如题,这个程序的目的是实现公司名称和公司地址的模糊匹配,也可以移植到房产信息、电话号码等领域。原应用场景是反团伙诈骗和流失客户的修复,大致意思是同一家公司的很多同事向我们公司借款的诈骗可能性比其他客户高,假的房产信息和电话号码可能不完全一样,但有一定的相似性。我们需要找出这些客户,但我们无法精确匹配他们。因为问题中的房产信息和电话号码可能只是相似,而不是完全相同;对于公司名称和地址,更是雪上加霜。即使是真实信息,同一家公司的名称也可能五花八门。如果很麻烦,那就要建个词库。但是我们做的工作没有那么全面,只是从公司名称中提取关键词。
制作记分卡模型也需要这个思路。因为记分卡的字段之一是城市级别,所以需要从原始数据的地址中提取城市信息,但是地址的格式不够标准,因为信息是客户手工填写的。比如“山东省济南市”也可能写成“山东省济南市”,那么一个正则表达式不足以解决提取这个字段的问题。
总结一下,模糊匹配的两个应用场景:1)构建反欺诈知识图谱;2)通过记分卡提取必填字段。
地址处理的基本思想是建立一个标准库,逐个比较地址,然后返回结果和置信度,所以建立词库是地址处理的关键。
下面是解决问题的过程:
第一步是从公司名称中提取关键词。首先要分析一下数据库中公司名称的形式:“浙江杭州利多林贸易有限公司”、“汇川区万全兄弟购物中心”、“温州龙雪集团有限公司北京销售分公司”.经过分析,我们可以看到公司名称大致分为三个部分:1。省市名称;2.关键词公司属性;3.分支机构或分局等信息。
首先你需要用python连接数据库,取出公司名称段:1。下载并安装psycopg2模块。下载链接如下:安装完成后,输入以下语句连接数据库:
2.根据以上分析,下一步是先提取省市。提取省市的常规方式是建立行政区划数据库,类似于街霸分词中的txt字典。在解决这个问题的时候,我和我的同事有不同的想法。用jieba对公司名称进行切分后,一个思路是建立一个最简单的词库。词库中的字是行政区划的简称,如“宁夏”、“内蒙古”。如果词典里的单词在段里,就把段拿出来;另一个想法是使用全称词库,如宁夏回族自治区,内蒙古自治区,等等。如果分词后的单词能完全匹配,就拿出分词。否则,按照一定的规则,将词典中的单词从“省”、“市”、“自治区”中剔除,然后进行分词匹配。经过讨论,最终,行政区划数据库的形式如下图所示:
3.使用python构建字典,分别构建如下字典:
4.使用分词包对公司名称进行分词,标注词性。显然,我们需要带词性ns的词来提取行政区域。但切分后发现,并不是我们需要的省市在解霸词典里的词类都是ns,而其他的词,比如“大望路”,我们不需要的,可能都是ns。所以我们需要创建一个专门的分词词典,将其词性标注为ns。
5.如前所述,提取三级行政区划由于写法不规范导致行政区划相同,写法可能不同。比如“山西省太原市小店区”就可能写成“山西省太原市小店区”,或者写成“太原市小店区”,或者直接写成“小店区市”。因此,在提取时,有许多情况:
6.接下来,提取分支信息。
7.接下来是提取关键词信息,这也是所有步骤中的难点。主要问题是需要建立一个新的行业字典。以下是去掉行政区划和分支机构后,几个公司名称的例子:后营经贸有限公司伟强餐饮有限公司品展装饰有限公司泰广兴空分设备配件有限公司豫南贸易有限公司陆金新力贸易有限公司远东刀厂湛江霞山海明充电行北明钢铁有限公司三达化工有限公司友作木业有限公司玉竹广告有限公司体安实业有限公司川音五金厂盛师傅藤器厂经分析,公司1, 2.后缀叫“玩具厂”、“小卖部”、“化工厂”。因此,需要建立两个新的行业词典,其数据是公司购买的几千万个企业库的公司名称和地址。由于数据量大,需要使用kattle将它们导入数据库进行操作。从所有公司名称中选择带后缀“有限公司”的名称,去掉这四个字符的后缀,分别截取最后两个、三个、四个…字符,按出现频率排序。然后,按照字符串从大到小的顺序,手动选择行业属性。原因是,比如假设四个人物之间“文化交流”的频率高,就有可能“融化”出所获得的行业属性如下:安全技术保安技术服务安装工程百货办公设备包装产品保洁服务泵行业酒店玻璃材料销售财务顾问财务咨询服务餐饮服务餐饮管理仓储测绘规划茶产品销售同样, 结构化企业属性词库:技术服务部汽修站配件业务部营销服务部机械配件厂汽运队建工队证券业务部汽修厂工会委员会金属结构厂金属加工厂材料经销部安装工程部汽修站技术开发部。 于是我们把企业名称中的属性去掉了,留下关键词,可以进行公司名称的模糊匹配。当然,对于一些公司来说,可能还会有昵称,这就需要建立词库,这里暂且不讨论。
第二部分是公司地址的模糊匹配。与公司名称相比,地址的模糊匹配更简单。斗冠路317号、马家工业园4号、灵芝广场、马家工业园4号、远洋路4号、海阔天空二期8号、高坪镇1-5-3号、宏发路30号、之江路934号、滨湖路胡明花园1-4号、文远路东段203号、渭南大道19号、1022B、凯恩国际A座、万象城一期A-6层商铺五六个行政区划,以及某路数字号的具体门牌号,所以可以通过正则表达式提取: