python 公司名称 相似度分析_使用Python完成公司名称和地址的模糊匹配

正如题目中说的一样,这个程序的目的是实现公司名及公司地址的模糊匹配,也可以迁移到房产信息、电话号码之类的字段上。本来的应用场景是反团伙欺诈以及失联客户的修复,大概的意思就是说多个相同公司的同事都在我公司借贷的欺诈可能性要高于其他客户,以及造假的房产信息和电话号码可能不完全相同,但有一定的相似性,我们需要把这些客户找出来,但是又不能用精确匹配。因为存在问题的房产信息和电话可能只是相似,而不是完全相同;对于公司名和地址来说,就更糟糕一些,即使是真实的信息,但同一个公司的叫法可能会多种多样,如果麻烦一些,还要建一个同义词库。而我们做的工作还没有那么全面,只是提取出了公司名中的关键词。

而做评分卡模型也需要用到这个思想。因为评分卡的其中一个字段就是所在城市等级,这就需要从原始数据的地址中提取出城市信息,但地址的格式又不够标准,因为信息是客户人工填写的,举个例子,“山东省济南市”也有可能被写成“山东济南”,所以一个正则表达式就不足以解决这个字段提取的问题了。

总结一下,模糊匹配的两个应用场景:

1)构建反欺诈知识图谱

2)评分卡提取所需字段

地址处理的基本思路就是建立一个标准库,对地址逐个进行对比,再返回结果和置信度,所以词库的建立是地址处理的关键。

下面是解决问题的过程:

第一步,希望可以提取出公司名中的关键字。首先,要分析一下数据库中公司名的形式:“浙江杭州立多林贸易有限公司”,“汇川区万全兄弟购物中心”,“温州雪龙集团有限公司北京销售分公司”……

经过分析,可以看出,公司名大致分为3个部分:1、省市区名称;2、关键词+公司属性;3、分公司或分局等信息。

首先,需要使用python连接到数据库,取出公司名字段:

1、下载并安装psycopg2模块,下载链接如下:

http://www.stickpeople.com/projects/python/win-psycopg/

安装完毕后,输入下面语句,连接数据库:

import psycopg2

#录入数据

conn=psycopg2.connect(database="testdb", user="postgres", password="postgres", host="10.180.157.168", port="1975")

cur=conn.cursor()

needinfo=['brhs_unitname','dict_unit_province','dict_unit_city','dict_unit_arer','brhs_unit_address']

cur.execute("SELECT brhs_unitname,dict_unit_province,dict_unit_city,dict_unit_arer,brhs_unit_address FROM aaa_t_jk_dhzh_brhs limit 1000;")

selects=cur.fetchall()

enterprise_datas=pd.DataFrame(selects,columns=needinfo)

2、根据上面的分析,下一步就要先将省市区提取出来。提取省市区的常规做法是建立行政区划库,类似于jieba分词中的txt词典。在解决这个问题时,我和同事两个人的思路不尽相同。在使用jieba对公司名进行分词后,一种思路是建立一个最简词库,词库中的词都是行政区划的最简称,例如“宁夏”、“内蒙古”等,如果字典中的词在分词中,则取出该分词;另一种思路是,使用全称词库,例如“宁夏回族自治区”、“内蒙古自治区”等,如果分词后的词可以和其完全匹配,则取出该分词,否则,按照一定的规则,将字典中的词去掉“省”、“市”、“自治区”后,再和分词进行匹配。经过讨论,最后,行政区划库的形式如下图所示:

region_nosuffix

region_suffix

city_nosuffix

city_suffix

province_nosuffix

province_suffix

东城

东城区

北京直辖区

北京直辖区

北京

北京市

西城

西城区

北京直辖区

北京直辖区

北京

北京市

朝阳

朝阳区

北京直辖区

北京直辖区

北京

北京市

3、使用python建立词典,分别建立以下几个词典:

你可能感兴趣的:(python,公司名称,相似度分析)