我正在尝试使用Jellyfish来处理模糊字符串。我注意到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
)