如何创建一个函数,从单词列表中返回最相似的单词,即使单词不完全相同?
该函数应该有两个输入:一个用于单词,另一个用于列表。该函数应返回与单词最相似的单词。
lst = ['apple','app','banana store','pear','beer']
func('apple inc.',lst)
>>'apple'
func('banana',lst)
>>'banana store'
通过做一些研究,似乎我必须使用模糊字符串匹配,NLTK和Levenshtein距离的概念,我很难在创建这样的函数时尝试实现。< / p>
我还应该指出,通过类似的方式,我只是指字符,而我根本不关心这个字的含义。
答案 0 :(得分:1)
缓慢的调试解决方案:
def func(word, lst):
items = sorted((dist(word, w), w) for w in lst)
# Print items here for debugging.
if not items:
raise ValueError('List of words is empty.')
return items[0][1]
或者,这更快并且使用更少的内存:
def func(word, lst):
return min((dist(word, w), w) for w in lst)[1]
有关实施dist
的信息,请参见https://stackoverflow.com/questions/682367/good-python-modules-for-fuzzy-string-comparison。其中一个答案与Levenshtein距离实施有关。