如何在Levenshtein距离算法中对字符串的开头进行加权

时间:2017-04-27 12:28:39

标签: python levenshtein-distance

我正在尝试使用Levenshtein距离算法(在Python中,如果它有任何区别)在两个公司名称列表之间进行模糊字符串比较。一个示例是列表A包含XYZ INDUSTRIAL SUPPLY但列表B可能会说XYZ INDUSTRIAL SUPPLY, INC.,但它们仍应匹配。

现在,我的实施非常不准确。作为第二个例子,目前算法发现abc metal finishingxyz's mach & metal finishing非常相似,因为它们的结局,但它们是完全不同的公司。我想提高这种准确性,我认为我能做到的一种方法是以某种方式对字符串的开头进行加权。如果公司名称应该匹配,那么他们很可能同样开始。看看我的第一个例子,整个开头匹配,它只是在最终发生变化的地方。有没有办法实现这个目标?我无法解决这个问题。

谢谢!

编辑以获取更多示例:

应匹配:

  • s west tool supplysouthwest tool supply

  • abc indust incabc industries

  • icg usaicg usa llc

不应匹配(但目前正在执行):

  • ohio state universityiowa state university

  • m e gill corporations g corporation

更新

取得了进展:)如果有人对这类事情感兴趣,我最终会尝试插入删除和替换的成本。我的想法是更重要地对字符串的开头进行加权,因此我将权重基于矩阵中的当前位置。这个问题产生的问题是,由于我的权重如何分配,所有内容都与一些非常短的名称相匹配。我通过在计算中包含长度来修复此问题。例如,我的插入重量最终为(1 if index<=2/3*len(target) else .1*(len(source)-index)),其中source始终是两个字符串中较长的一个。我打算继续调整它并尝试其他值,但它已经显示出很大的改进。这绝不是一个接近精确科学的地方,但如果它有效,那就重要了!

0 个答案:

没有答案