我正在嘗試使用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