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

标签 python levenshtein-distance

是否有像 Levenshtein 这样考虑替换距离的编辑距离?

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

必须有一个指标来考虑这种邻近性吗?

最佳答案

你问的那种距离不包括在 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 之间的编辑距离为 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 拼写错误,因为 wazqaz 更容易拼写为 eaz

关于python - 编辑距离,例如 Levenshtein 考虑到键盘上的接近度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29233888/

相关文章:

postgresql - 是否有多字节感知的 Postgresql Levenshtein?

python - 使用 cmd.exe 或 PowerShell 或 Python 从 Windows 命名管道读取

python - 未使用 PIL ImageFont 呈现的 Unicode 字符

javascript - 选择中最接近的匹配

hadoop - 如何在 Pig Latin 中实现 Levenshtein 算法

java - 更好的比较字符串方法

elasticsearch - 模糊度超过2个字符的 Elasticsearch (距离)

python - 为什么 %en0 后缀无法连接 Python 中的链接本地 IPv6 TCP 套接字?

python - Django Form - 动态切换字段存在

python - 如何在条件语句中的 for 循环迭代器上使用比较语句?