每天分享一個好用的Python庫-Levenshtein

SilenceHL發表於2021-06-24

前言

最近幾天處於恢復期間,會不定期更新,感謝大家的關心與支援。今天分享是一個計算字串相似度的第三方庫: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 協議》,轉載必須註明作者和本文連結

相關文章