前言
最近幾天處於恢復期間,會不定期更新,感謝大家的關心與支援。今天分享是一個計算字串相似度的第三方庫:Levenshtein
。
Levenshtein
簡介
Levenshtein
:萊文斯坦距離,又稱Levenshtein距離,是編輯距離的一種。 指兩個字串之間,由一個轉成另一個所需的最少編輯操作次數。 允許的編輯操作包括將一個字元替換成另一個字元,插入一個字元,刪除一個字元。
安裝
pip install python-Levenshtein
簡單使用
常見方法
hamming
:計算漢明距離,兩個字串的長度必須相同。返回兩個字串之間對應位置上不同字元的個數。>>> hamming('Hello world!', 'Holly grail!') 7 >>> hamming('Brian', 'Jesus') 5
distance
:計算一個字串轉化成另一個字串最少的操作次數,在其中的操作包括插入、刪除、替換>>> distance('Levenshtein', 'Lenvinsten') 4 >>> distance('Levenshtein', 'Levensthein') 2 >>> distance('Levenshtein', 'Levenshten') 1 >>> distance('Levenshtein', 'Levenshtein') 0
ratio
:計算萊文斯坦比。計算公式為 r = (sum - ldist) / sum, 其中sum是指str1 和 str2 字串的長度總和,ldist是類編輯距離。>>> ratio('Hello world!', 'Holly grail!') # doctest: +ELLIPSIS 0.583333... >>> ratio('Brian', 'Jesus') 0.0
這裡的類編輯距離不是2中所說的編輯距離,2中三種操作中每個操作+1,而在此處,刪除、插入依然+1,但是替換+2,這樣ratio(‘a’, ‘c’),sum=2,按2中計算為(2-1)/2 = 0.5,’a’,’c’沒有重合,顯然不合算,但是替換操作+2,就可以解決這個問題。
jaro
:計算兩個字串的 Jaro 字串相似度度量。>>> jaro('Brian', 'Jesus') 0.0 >>> jaro('Thorkel', 'Thorgier') # doctest: +ELLIPSIS 0.779761... >>> jaro('Dinsdale', 'D') # doctest: +ELLIPSIS 0.708333...
Jaro 字串相似度度量適用於短字串,例如個人姓氏。 對於完全不同的字串,它是 0 並且1 表示相同的字串。
jaro_winkler
:計算兩個字串的 Jaro 字串相似度度量。>>> jaro_winkler('Brian', 'Jesus') 0.0 >>> jaro_winkler('Thorkel', 'Thorgier') # doctest: +ELLIPSIS 0.867857... >>> jaro_winkler('Dinsdale', 'D') # doctest: +ELLIPSIS 0.7375... >>> jaro_winkler('Thorkel', 'Thorgier', 0.25) 1.0
Jaro-Winkler 字串相似度度量是對 Jaro 的修改,度量給予公共字首更多的權重,因為拼寫錯誤是更可能出現在詞尾附近。
作用
這個庫是一個專門用於處理兩個字串間差異的庫,目前該庫很久沒有維護,大家可以根據需求來使用。
尾巴
該專案的作者正在尋找新的維護者,如果對該專案感興趣的朋友可以聯絡作者,將該庫一直維護下去!
本作品採用《CC 協議》,轉載必須註明作者和本文連結