如何从单词列表中返回最相似的单词?
如何创建一个函数,从一堆单词中找出最相似的一个,即使这个单词并不完全一样?
这个函数需要两个输入:一个是你要查找的单词,另一个是单词列表。函数应该返回与这个单词最相似的那个单词。
lst = ['apple','app','banana store','pear','beer']
func('apple inc.',lst)
>>'apple'
func('banana',lst)
>>'banana store'
经过一些研究,我发现我需要用到模糊字符串匹配、NLTK和莱文斯坦距离这些概念,但我在实现这样的函数时遇到了困难。
我还想说明一下,这里说的“相似”只是指字母的相似性,我并不关心单词的意思。
1 个回答
3
调试时的慢速解决方案:
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
的内容。某个回答里有一个关于Levenshtein距离实现的链接。