【问题标题】:Find closest string match from list从列表中查找最接近的字符串匹配
【发布时间】:2021-02-02 20:27:48
【问题描述】:

我想对不正确的用户输入进行故障排除。 这正是从“数据库”中找到最接近的匹配项。

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 将结果添加到列表中。

【问题讨论】:

  • 评论:这里不是 python 专家。代码似乎很不完整。什么是“词”?数据库从哪里来?你不是在比较 "i" 而不是 user_input[i] 吗?

标签: python string-matching difflib


【解决方案1】:

实现这一点的更简单方法是使用列表理解

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 包含来自user_input 的单词的最接近匹配,基于来自database 的值:

[['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'], [], []]
   

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-13
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 2011-08-17
    • 1970-01-01
    相关资源
    最近更新 更多