(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 比率の計算を参照してください。
もう一つの例:
コストは 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