我正在尝试编写一个拼写检查模块。
它加载文本,从 16 mb 文件创建字典,然后检查遇到的单词是否与字典中的单词相似(相似 = 最多变化两个字符),如果是,则将其更改为字典中的形式。
现在我正在使用 Levenshtein 距离算法,处理 50 个单词集需要 3 分钟......
我很确定必须有一个更快的解决方案。Profiler 告诉我,我的应用程序在 Levenshtein Distance 函数中花费了超过 80% 的时间。
有没有更好的解决方案/算法?
这是我使用的算法版本的实现:
def levenshteinDistance(s1, s2):
l_s1 = len(s1)
l_s2 = len(s2)
d = [[a for a in genM(x, l_s2 + 1)] for x in xrange(l_s1 + 1)]
for i in xrange(1, l_s1 + 1):
for j in xrange(1, l_s2 + 1):
d[i][j] = min(d[i - 1][j] + 1, d[i][j - 1] + 1, d[i - 1][j - 1] + decide_of_equality(s1[i - 1],s2[j - 1]))
return d[l_s1][l_s2]