如何在python中的列表中找到最相似的单词

时间:2014-10-09 16:42:36

标签: python

我有一个单词列表

list = ['car', 'animal', 'house', 'animation']

我希望将每个列表项与字符串str1进行比较,输出应该是最相似的单词。示例:如果str1anlmal,则animal是最相似的字词。我怎么能在python中这样做?通常我列表中的单词可以很好地区分开来。

2 个答案:

答案 0 :(得分:16)

使用difflib

difflib.get_close_matches(word, ['car', 'animal', 'house', 'animation'])

从细读the source可以看出,“关闭”匹配从最佳到最差排序。

>>> import difflib
>>> difflib.get_close_matches('anlmal', ['car', 'animal', 'house', 'animation'])
['animal']

答案 1 :(得分:1)

我检查了 difflib.get_close_matches(),但它对我不起作用。我在这里写了一个强大的解决方案,用作:

closest_match,closest_match_idx = find_closet_match(test_str, list2check)

def find_closet_match(test_str, list2check):
scores = {}
for ii in list2check:
    cnt = 0
    if len(test_str)<=len(ii):
        str1, str2 = test_str, ii
    else:
        str1, str2 = ii, test_str
    for jj in range(len(str1)):
        cnt += 1 if str1[jj]==str2[jj] else 0
    scores[ii] = cnt
scores_values        = numpy.array(list(scores.values()))
closest_match_idx    = numpy.argsort(scores_values, axis=0, kind='quicksort')[-1]
closest_match        = numpy.array(list(scores.keys()))[closest_match_idx]
return closest_match, closest_match_idx