Levenshtein距離


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
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM