是否存在编辑距离,例如Levenshtein考虑到替换的距离?
例如,如果我们考虑单词是否相等,typo
和tylo
非常接近(p
和l
在键盘上的物理关闭),而typo
和tyqo
相距甚远。我想将更小的距离分配给更可能的拼写错误。
必须有一个指标考虑到这种主张?
答案 0 :(得分:14)
你问的距离不包括在levenshtein中 - 但是你应该使用像欧几里得或曼哈顿距离这样的助手来得到结果。我的简单假设是, q (英文版qwerty布局) )是笛卡儿(y = 0; x = 0) 所以, w 将是(y = 0; x = 1),依此类推。 whole list here
keyboard_cartesian= {
'q': {'y': 0, 'x': 0},
'w': {'y': 0, 'x': 1},
'e': {'y': 0, 'x': 2},
'r': {'y': 0, 'x': 3},
# ...
'a': {'y': 1, 'x': 0},
#...
'z': {'y': 2, 'x': 0},
'x' : {'x':1, 'y':2},
#
}
假设,单词qaz有意义。
qaz
与waz
和eaz
之间的levenshtein距离为1.检查哪个拼写错误更可能,取差异(此处(q,w)和(q,e) ))并计算欧氏距离
>>> from math import *
>>> def euclidean_distance(a,b):
... X = (keyboard_cartesian[a]['x']-keyboard_cartesian[b]['x'])**2
... Y = (keyboard_cartesian[a]['y']-keyboard_cartesian[b]['y'])**2
... return sqrt(X+Y)
...
>>> euclidean_distance('q', 'w')
1.0
>>> euclidean_distance('q', 'e')
2.0
这意味着 qaz 的拼写错误,因为 waz 比 qaz 更像是 eaz 。
答案 1 :(得分:5)
http://www.melissadata.com/webhelp/ssis/updated/Components/Fuzzy_Match/Algorithms.htm提到:“ Needleman-Wunsch - Levenshtein算法的一种变体.Levenshtein和Needleman-Wunsch是相同的,只是字符错误的权重取决于两个字符在标准上的距离键盘布局。例如:A到S的错误权重为0.4,而A到D为0.6,A到P为1.0 “但Needleman-Wunsch Wikipedia article没有提到键盘布局的接近度。 ..但也许你应该研究一下。