Ответ 1
вид расстояния, который вы просите, не включен в levenshtein, но вы должны использовать помощника, например, эвклидовое или манхэттенское расстояние, чтобы получить результат. Простое предположение: q (на английском языке qwerty layout ) является декартовым (y = 0; x = 0) поэтому w будет (y = 0; x = 1) и т.д. весь список здесь
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 имеет значение.
levenshtein расстояние между qaz
и с обеими waz
и eaz
равно 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.