Excel模糊查找中使用的算法

时间:2018-09-28 10:49:24

标签: python excel levenshtein-distance fuzzy-logic

我正在研究两组匹配的公司名称。我试图用Levenstien的距离在Python中进行编码。我遇到公司简称以及诸如Pvt,Ltd之类的尾随问题。我已经使用Excel Fuzzy查找运行了相同的集合,并获得了良好的结果。我有一种方法可以查看excel模糊查找的编码方式,并在python中使用相同的实现。

2 个答案:

答案 0 :(得分:0)

据我所知,模糊查找使用Jaccard相似度。查看其文档。在我四处游玩时,您也可以尝试SequenceMatcher并以相似度玩游戏-在统一文本字符串后,它会提供非常好的结果。

答案 1 :(得分:0)

以下摘录自 Excel的Microsoft模糊查找外接程序,Readme.docx。希望对您有所帮助。

  

高级概念

     

模糊查询技术基于非常简单但灵活的技术   两个记录之间的相似性度量。提卡相似度模糊   查找使用Jaccard相似度,定义为   集合交集除以两个集合的集合并集的大小   对象。例如,集合{a,b,c}和{a,c,d}具有Jaccard   2/4 = 0.5的相似度,因为交集为{a,c}并且   联合是{a,b,c,d}。两组的共同点越多,   Jaccard相似度将更接近1.0。

     

带模糊的记录的加权Jaccard相似度和标记化   查找,您可以将权重分配给集合中的每个项目,并定义   加权Jaccard相似度作为相交的总权重   除以工会的总人数。对于加权集{(a,   2),(b,5),(c,3)},{(a,2),(c,3),(d,7)},加权雅卡   相似度是(2 + 3)/(2 + 3 + 5 +7)= 5/17 = .294。

     

由于Jaccard相似性是在集合上定义的,因此必须进行模糊查找   首先将数据记录转换为集合,然后再计算Jaccard   相似。模糊查找使用令牌生成器将数据转换为集合。   例如,记录{“ Jesper Aaberg”,“ 4567 Main Street”}可能是   标记成集合{{“ Jesper”,“ Aaberg”,“ 4567”,“ Main”,   “街”}。默认的分词器用于英语文本,但可能   在Configure => Global Settings中更改LocaleId属性以指定   其他语言的标记器。

     

令牌加权由于并非所有令牌都具有同等重要性,因此模糊   查找将权重分配给令牌。令牌被分配高权重,如果   它们很少出现在记录样本和低权重中,如果它们   经常发生。例如,诸如“公司”之类的常用词   可能会被赋予较低的权重,而诸如   “ Abracadabra”的体重可能更高。一个可以超越   通过提供自己的令牌权重表来默认令牌权重。

     

转换转换极大地提高了Jaccard的功能   通过将令牌从一个字符串转换为字符串来实现相似性   另一个。例如,您可能知道名称“ Bob”可以是   转换为“罗伯特”; “美国”与“美国”相同;要么   “ Missispi”是“密西西比州”的拼写错误。有许多   模糊查找处理的此类转换的类   自动,例如拼写错误(使用“编辑转换”   如下所述),字符串前缀和字符串合并/分割操作。   您还可以指定一个包含自己的自定义表格   转换。

     

转换下的Jaccard相似度   转换是任意两个Jaccard之间的最大相似度   每个集合的变换。给定一套转换规则,所有   考虑集合的可能变换。例如,对于   集{a,b,c}和{a,c,d}以及变换规则{b => d,   d => e},Jaccard相似度的计算如下:   {a,b,c}:{a,b,c},{a,d,c} {a,c,d}的变化形式:{a,c,d},   {a,c,e}所有对之间的最大Jaccard相似度:J({a,b,c},   {a,c,d})= 2/4 = 0.5 J({a,b,c},{a,c,e})= 2/4 = 0.5 J({a,d,   c},{a,c,d})= 3/3 = 1.0 J({a,d,c},{a,c,e})= 2/4 = 0.5   最大值为1.0。注意:转换后的Weghted Jaccard类似词   简直就是所有对的最大加权Jaccard相似度   转换集。

     

编辑距离编辑距离是字符总数   转换一个所需的插入,删除或替换   串到另一个。例如,“ misissipi”之间的编辑距离   而“ mississippi”为2,因为需要插入两个字符。   Fuzzy Lookup附带的转换提供者之一   是EditTransformationProvider,它生成特定的   每个输入记录的转换并创建一个转换   从令牌到字典中给定范围内的所有单词   编辑距离。归一化编辑距离是编辑距离   除以输入字符串的长度。在上一个示例中,   归一化的编辑距离是2/9 = .222。