从列表中查找最接近的字符串匹配

Find closest string match from list

我想解决用户输入不正确的问题。 就是从“数据库”中找到最接近的匹配。

database = ["dog", "cat", "bird"]
user_input = ["dog", "ccat", "ddogg", "horse", "fish"]
for i in user_input:
   match = difflib.get_close_matches('i', words)
match

但是我得到一个空列表。 这个问题有什么简单的解决办法吗?我在任何地方都找不到如何使用 difflib 将结果添加到列表中。

更简单的方法是使用列表理解:

import difflib
database = ["dog", "cat", "bird"]
user_input = ["dog", "ccat", "ddogg", "horse", "fish"]

new_list = [difflib.get_close_matches(word, database) for word in user_input]

其中 new_list 根据 database 中的值保存与 user_input 中单词最接近的匹配项:

[['dog'], ['cat'], ['dog'], [], []]

您的代码存在问题,您将 i 作为字符串 'i' 传递给 get_close_matches 函数。将其作为变量传递,然后将 match 单词附加到列表中。例如,这里是代码的工作版本:

new_list = []
for i in user_input:
    match = difflib.get_close_matches(i, database)
                                  #   ^ don't pass this as string
    new_list.append(match)

# new_list: [['dog'], ['cat'], ['dog'], [], []]