Levenshtein距離
萊文斯坦距離,又稱Levenshtein距離,是編輯距離的一種。 指兩個字串之間,由一個轉成另一個所需的最少編輯操作次數。 允許的編輯操作包括將一個字符替換成另一個字符,插入一個字符,刪除一個字符。
GitHub 提供了計算萊文斯坦距離的包。
安裝方法:
pip install python-Levenshtein
https://www.lfd.uci.edu/~gohlke/pythonlibs/ 里面查找python-Levenshtein.xxx.whl 離線安裝
1 Levenshtein
1.1 漢明距離
-
Levenshtein.hamming(str1, str2)
計算漢明距離。要求str1和str2必須長度一致。是描述兩個等長字串之間對應位置上不同字符的個數。- 插入一個字符 +1
- 刪除一個字符 +1
- 替換一個字符 +1
import Levenshtein.hamming Levenshtein.hamming('hello', 'world') # 4 Levenshtein.hamming('abc', 'abd') # 1
1.2 編輯距離
-
Levenshtein.distance(str1, str2)
計算編輯距離(也成Levenshtein距離)。是描述由一個字串轉化成另一個字串最少的操作次數,在其中的操作包括插入、刪除、替換。 -
編輯距離計算方式
- 插入一個字符 +1
- 刪除一個字符 +1
- 替換一個字符 +1
import Levenshtein.distance Levenshtein.distance('hello', 'world') # 4 Levenshtein.distance('abc', 'abd') # 1 Levenshtein.distance('abc', 'aecfaf') # 4
1.3 萊文斯坦比
-
Levenshtein.ratio(str1, str2)
計算萊文斯坦比。計算公式 r = (sum - ldist) / sum, 其中sum是指str1 和 str2 字串的長度總和,ldist是類編輯距離
注意:這里的類編輯距離與編輯距離不同 -
類編輯距離計算方式
- 插入一個字符 +1
- 刪除一個字符 +1
- 替換一個字符 +2
萊文斯坦比越接近1,則兩個字符串越接近
import Levenshtein.ratio Levenshtein.ratio('hello', 'world') # (10 -8) / 10 0.2 Levenshtein.ratio('abc', 'aecfaf') # (9 - 2 - 3) / 9 0.4444444444444444 Levenshtein.ratio('abc', 'abd') # (6 - 2) / 6 0.6666666666666666 Levenshtein.ratio('abc', 'abc') # (6 - 0) / 6 1.0