Jaro-Winkler与Levenshtein距离的区别?

时间:2014-08-28 04:10:27

标签: performance algorithm levenshtein-distance jaro-winkler

我有一个用例,我需要对来自多个文件的数百万条记录进行模糊匹配。我确定了两种算法: Jaro-Winkler Levenshtein 编辑距离。

当我开始探索两者时,我无法理解两者之间的确切差异。似乎Levenshtein给出了两个字符串之间的编辑数量,而Jaro-Winkler给出了0.0到1.0之间的匹配分数。我对这个算法并不了解。由于我需要使用任何一种算法,我需要知道与算法性能的确切差异。

1 个答案:

答案 0 :(得分:127)

Levenshtein计算将一个字符串转换为另一个字符串所需的编辑(插入,删除或替换)的数量。 Damerau-Levenshtein是一个修改版本,也将转置视为单一编辑。虽然输出是整数编辑,但可以对其进行归一化,以通过公式

给出相似度值
1 - (edit distance / length of the larger of the two strings)

Jaro算法是对共同字符的度量,不超过距离较长字符串长度的一半,考虑到转置。 Winkler修改了这个算法,以支持这样的观点,即字符串开头附近的差异比字符串末尾附近的差异更重要。 Jaro和Jaro-Winkler适合比较较小的字符串,如单词和名称。

决定使用哪个不仅仅是性能问题。选择一种适合您所比较的字符串性质的方法非常重要。一般而言,您提到的两种算法都很昂贵,因为每个字符串必须与其他所有字符串进行比较,并且数据集中有数百万个字符串,这就是大量的比较。这比计算每个字符串的语音编码,然后简单地对共享相同编码的字符串进行分组要贵得多。

在互联网上有关于这些算法和其他模糊字符串匹配算法的大量详细信息。这个会给你一个开始:

A Comparison of Personal Name Matching: Techniques and Practical Issues

根据那篇论文,我提到的四种Jaro和Levenshtein算法的速度从最快到最慢:

  • Jaro
  • Jaro-Winkler
  • Levenshtein
  • Damerau-的Levenshtein

以最慢的速度服用最快的2到3倍。当然,这些时间取决于字符串的长度和实现,并且有一些方法可以优化这些可能尚未使用的算法。