【发布时间】:2020-12-10 20:03:48
【问题描述】:
我正在尝试使用 levenshtein 距离按编辑距离对列表进行排序。
def suggest(dic, word, distance, maxSugestions=5):
list = []
for i in range(1, 200):
for word1 in sorted(dic):
if distance(word1, word) == i:
list.append(word1)
if len(list) == maxSugestions:
return list
这是我当前的函数,它接收一个字符串列表(这个列表有大约 43000 个字符串),一个我想比较的单词,一个返回两个字符串之间的编辑距离的函数和一个整数 maxSugestions 列表应该有。
这是当前距离函数:
def levDistance(str1, str2):
matrix = [[0 for x in range(len(str2) + 1)] for x in range(len(str1) + 1)]
for i in range(len(str1) + 1):
for j in range(len(str2) + 1):
if i == 0:
matrix[i][j] = j
elif j == 0:
matrix[i][j] = i
elif str1[i-1] == str2[j-1]:
matrix[i][j] = matrix[i-1][j-1]
else:
matrix[i][j] = 1 + min(matrix[i][j-1], matrix[i-1][j], matrix[i-1][j-1])
return matrix[len(str1)][len(str2)]
当前的建议()函数有效,但是我需要对其进行优化,因为它花费的时间太长而且我不知道该怎么做。任何帮助都将不胜感激。谢谢
【问题讨论】:
-
您是否尝试过使用
sorted并指定key? -
如果多次计算相同的距离,最好先创建所有距离的字典
{(word1,word2):distance, ... } -
在当前代码中,您在
for i in range(1, 200)内运行sorted(dic),因此您重复相同的排序 200 次 - 您只能在for-loop 之前对其排序一次 -
当你有字典
{(word1,word2):distance, ... }然后你可以使用函数sorted(..., key=...)和key它使用`距离来排序它
标签: python