如何从单词列表中返回最相似的单词?

时间:2014-05-18 18:20:59

标签: python regex list nltk levenshtein-distance

如何创建一个函数,从单词列表中返回最相似的单词,即使单词不完全相同?

该函数应该有两个输入:一个用于单词,另一个用于列表。该函数应返回与单词最相似的单词。

lst = ['apple','app','banana store','pear','beer']

func('apple inc.',lst)
>>'apple'
func('banana',lst)
>>'banana store'

通过做一些研究,似乎我必须使用模糊字符串匹配,NLTK和Levenshtein距离的概念,我很难在创建这样的函数时尝试实现。< / p>

我还应该指出,通过类似的方式,我只是指字符,而我根本不关心这个字的含义。

1 个答案:

答案 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距离实施有关。