il tipo di distanza si chiede non è incluso nel levenshtein - ma si dovrebbe usare un aiutante come euclidea o Manhattan distanza, per ottenere il result.my semplice presupposto è, q (nel layout QWERTY inglese) è cartesiana (y = 0; x = 0) quindi, w sarà (y = 0; x = 1) e così via. 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},
#
}
assumere, parola qaz ha un significato. distanza tra il Levenshtein qaz
e con entrambi waz
e eaz
è 1. di verificare che Misspell è più probabile, prendere le differenze (qui (q, w) e (q, e)) e calcolare la distanza euclidea
>>> 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
questo significa misspell di qaz come waz è più likley di qaz come eaz.
Vuoi dire [Damerau-Levenshtein] (http://en.wikipedia.org/wiki/Damerau%E2%80%93Levenshtein_distance)? – EdChum
L'ho visto, ma non mi ero reso conto che "la trasposizione dei personaggi adiacenti" fosse in realtà ciò che intendevo. Anche se immagino che cerco non solo i personaggi adiacenti, ma più di una distanza ponderata quadratica (non solo adiacente) Grazie! – PascalVKooten
Penso che adiacente a quello schema si parli di caratteri tansposing che sono adiacenti all'interno della parola (ad esempio want vs wnat), piuttosto che adiacenti su una tastiera. –