【发布时间】:2013-11-28 06:02:39
【问题描述】:
我正在尝试使用Jellyfish 处理模糊字符串。我注意到Damerau–Levenshtein distance 算法的一些奇怪行为。例如:
import jellyfish as jf
In [0]: jf.damerau_levenshtein_distance('ZX', 'XYZ')
Out[0]: 3
In [1]: jf.damerau_levenshtein_distance('BADC', 'ABCD')
Out[1]: 3
在我看来,两者都应该得分 2。
在第一个例子中:
-
ZX→XZ(转置相邻字符) -
XZ→XYZ(插入Y)
在第二个例子中:
-
BACD→ABDC(转置相邻的BA字符) -
ABDC→ABCD(转置相邻的DC字符)
这是算法有问题,还是我误解了度量?任何指导将不胜感激。
编辑
为了让事情更奇怪,我还观察到以下几点:
In [3]: jf.damerau_levenshtein_distance('jellyifhs', 'jellyfish')
Out[3]: 2
In [4]: jf.damerau_levenshtein_distance('ifhs', 'fish')
Out[4]L 3
这特别奇怪,因为两个示例中的编辑数量不仅应该是两个,而且它们是完全相同的编辑:
在第三个例子中:
-
jellyifhs→jellyfihs(转置相邻字符if) -
jellyfihs→jellyfish(转置相邻字符hs)
在第四个例子中:
-
ifhs→fihs(转置相邻字符if) -
fihs→fish(转置相邻字符hs)
【问题讨论】:
-
我认为转置算两个步骤。
-
@aIKid:两个相邻字符的换位是一个操作/步骤。
-
+1,看起来他们已经实施了 OSA 而不是 Damerau–Levenshtein 距离。
-
这就是我的想法......实际上我也发现了 jaro_distance 的错误。我在 github 上但从不使用它,是直接给他们发电子邮件还是在 github 上做点什么更好?我想我会在这里更新我的问题以提出这个问题
标签: python string python-2.7 fuzzy-comparison