我正在尝试使用Jellyfish来处理模糊字符串。我注意到Damerau–Levenshtein distance算法的一些奇怪行为。例如:水母的Damerau-Levenshtein距离计算车?
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
@aIKid:两个相邻字符的换位是一个操作/步骤。 – 0xc0de
+1,看起来他们已经实现了OSA而不是Damerau-Levenshtein距离。 – 0xc0de