编辑距离,如Levenshtein考虑到键盘上的接近度

时间:2015-03-24 13:27:04

标签: python levenshtein-distance

是否存在编辑距离,例如Levenshtein考虑到替换的距离?

例如,如果我们考虑单词是否相等,typotylo非常接近(pl在键盘上的物理关闭),而typotyqo相距甚远。我想将更小的距离分配给更可能的拼写错误。

必须有一个指标考虑到这种主张?

2 个答案:

答案 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有意义。 qazwazeaz之间的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没有提到键盘布局的接近度。 ..但也许你应该研究一下。