1,简介
Levenshtein Distance是一个度量两个字符序列之间差异的字符串度量标准,两个单词之间的Levenshtein Distance是将一个单词转换为另一个单词所需的单字符编辑(插入、删除或替换)的最小数量。Levenshtein Distance是1965年由苏联数学家Vladimir Levenshtein发明的。Levenshtein Distance也被称为编辑距离(Edit Distance)。
2,安装
conda install python-Levenshtein
# pip install python-Levenshtein
3,计算字符串的相似度
3.1 汉明距离,要求str1和str2必须长度一致。是描述两个等长字串之间对应位置上不同字符的个数。
>>> Levenshtein.hamming('abc','cba')
2
>>> Levenshtein.hamming('abc','cam')
3
3.2 编辑距离,[v]
也称为Levenshtein距离,描述由一个字串转化成另一个字串最少的操作次数,在其中的操作包括插入、删除、替换。
>>> Levenshtein.distance('abc','ac')
1
>>> Levenshtein.distance('kitten','sitting')
3
3.3 莱文斯坦比
计算公式 r = (sum - ldist) / sum, 其中sum是指str1 和 str2 字串的长度总和,ldist是类编辑距离
注意:这里的类编辑距离不是2中所说的编辑距离,2中三种操作中每个操作+1,而在此处,删除、插入依然+1,但是替换+2
这样设计的目的:ratio(‘a’, ‘c’),sum=2,按2中计算为(2-1)/2 = 0.5,’a’,'c’没有重合,显然不合算,但是替换操作+2,就可以解决这个问题。
>>> Levenshtein.ratio('abc','abc') # (5-0) / 5 = 1
1.0
>>> Levenshtein.ratio('abc','ab') # (5 - 1) / 5 = 0.8
0.8
>>> Levenshtein.ratio('abc','abd') # (6 - 2) / 6 = 2 / 3 = 0.666
0.6666666666666666
3.4 jaro距离
3.5 Jaro–Winkler距离
4,相关链接
https://www.jb51.net/article/98449.htm
https://www.jianshu.com/p/06370a33e1ee