(lensum - ldist)/lensum
ldist不是距离,是成本
所述阵列的每个数字是不匹配来自以上,从左侧或对角线
总和如果数字来自左侧,他是一个插入,它来自上面它是一个删除,它来自对角线它是一个替代品
插入和删除成本为1,替换成本为2。 替换成本是2,因为它是一个删除和插入
AB AC成本是2,因为它是一个替换
>>> import Levenshtein as lev
>>> lev.distance("ab","ac")
1
>>> lev.ratio("ab","ac")
0.5
>>> (4.0-1.0)/4.0 #Erro, the distance is 1 but the cost is 2 to be a replacement
0.75
>>> lev.ratio("ab","a")
0.6666666666666666
>>> lev.distance("ab","a")
1
>>> (3.0-1.0)/3.0 #Coincidence, the distance equal to the cost of insertion that is 1
0.6666666666666666
>>> x="ab"
>>> y="ac"
>>> lev.editops(x,y)
[('replace', 1, 1)]
>>> ldist = sum([2 for item in lev.editops(x,y) if item[0] == 'replace'])+ sum([1 for item in lev.editops(x,y) if item[0] != 'replace'])
>>> ldist
2
>>> ln=len(x)+len(y)
>>> ln
4
>>> (4.0-2.0)/4.0
0.5
更多信息:python-Levenshtein ratio calculation
又如:
成本是9(4替换=> 4×2 = 8和1删除1 * 1 = 1,8 + 1 = 9)
str1=len("google") #6
str2=len("look-at") #7
str1 + str2 #13
距离= 5(根据矢量(7,6矩阵)= 5)
比为(13-9)/ 13 = 0.3076923076923077
>>> c="look-at"
>>> d="google"
>>> lev.editops(c,d)
[('replace', 0, 0), ('delete', 3, 3), ('replace', 4, 3), ('replace', 5, 4), ('replace', 6, 5)]
>>> lev.ratio(c,d)
0.3076923076923077
>>> lev.distance(c,d)
5
我查库(在链接给你),我也搞不清他为什么使用'sum'.Also '(1-1/3)= .666..'这是正确的根据代码,但也('1 - 1/4)= 0.75'它如何.5?即使在文档中也不清楚......但是计算Levenshtein距离的实际公式是在我的答案中。 –