我正在尝试使用Levenshtein距离算法(在Python中,如果它有任何区别)在两个公司名称列表之间进行模糊字符串比较。一个示例是列表A包含XYZ INDUSTRIAL SUPPLY
但列表B可能会说XYZ INDUSTRIAL SUPPLY, INC.
,但它们仍应匹配。
现在,我的实施非常不准确。作为第二个例子,目前算法发现abc metal finishing
和xyz's mach & metal finishing
非常相似,因为它们的结局,但它们是完全不同的公司。我想提高这种准确性,我认为我能做到的一种方法是以某种方式对字符串的开头进行加权。如果公司名称应该匹配,那么他们很可能同样开始。看看我的第一个例子,整个开头匹配,它只是在最终发生变化的地方。有没有办法实现这个目标?我无法解决这个问题。
谢谢!
编辑以获取更多示例:
应匹配:
s west tool supply
,southwest tool supply
abc indust inc
,abc industries
icg usa
,icg usa llc
不应匹配(但目前正在执行):
ohio state university
,iowa state university
m e gill corporation
,s g corporation
更新
取得了进展:)如果有人对这类事情感兴趣,我最终会尝试插入删除和替换的成本。我的想法是更重要地对字符串的开头进行加权,因此我将权重基于矩阵中的当前位置。这个问题产生的问题是,由于我的权重如何分配,所有内容都与一些非常短的名称相匹配。我通过在计算中包含长度来修复此问题。例如,我的插入重量最终为(1 if index<=2/3*len(target) else .1*(len(source)-index))
,其中source
始终是两个字符串中较长的一个。我打算继续调整它并尝试其他值,但它已经显示出很大的改进。这绝不是一个接近精确科学的地方,但如果它有效,那就重要了!