如何计算Levenshtein距离算法中字符串的起始权重?

2024-06-02 07:13:51 发布

您现在位置:Python中文网/ 问答频道 /正文

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

现在,我的实现非常不准确。作为第二个例子,目前算法发现abc 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总是两个字符串中较长的一个。我计划继续调整这个值并尝试其他值,但它已经显示出了很大的改进。这绝不是一门精确的科学,但如果它是有效的,那才是最重要的!在


Tags: 字符串名称算法列表公司tool例子权重