【问题标题】:fuzzywuzzy process.extract() not returning a listFuzzywuzzy process.extract() 不返回列表
【发布时间】:2021-06-11 03:55:05
【问题描述】:

我对编程比较陌生,在完成大学作业时,我遇到了 fuzzywuzzy 包中的 process.extract() 函数的问题。

documentation 表示该函数应该返回一个列表,但是,我的代码返回一个类类型为 None 的对象。

如果我打印process.extract(limit=1),它会返回一个列表:

[("Matching string","Fuzz Ratio", "Index")]

但是我不能使用[] 对该对象进行切片,因为它被归类为None

我需要能够获取匹配字符串的索引,因此我需要找出为什么 process.extract() 没有返回列表或者如何从 None 对象中取出最后一个元素。

谢谢,如果需要任何澄清,请告诉我。

编辑:好的,我的坏人,我会尝试更具体。

最少的可重复样本:

注意:CSV 文件只是两列问题和答案,它来自我的大学,所以我不确定是否允许我上传确切的文件,对此感到抱歉。

好吧,太奇怪了,重新创建示例修复了它,但我仍然不知道发生了什么。

第一个例子取自我的原始代码:

import pandas as pd 
from fuzzywuzzy import fuzz
from fuzzywuzzy import process
df_chat_bot = pd.read_csv("ChatBot-short.csv")
str_user_question = input("Question: ")
test_var = print(process.extract(str_user_question, df_chat_bot["Question"], limit = 1))
print(type(test_var))

print(type(test_var)) 行的输出是(直接从终端)“”。

然后,当我去制作可重现的代码时:

from fuzzywuzzy import process
from fuzzywuzzy import fuzz
import pandas as pd  
test_user_question = "vsc"
df_chat_bot = pd.read_csv("ChatBot-short.csv")
temp_var = process.extract(test_user_question,df_chat_bot["Question"], limit = 1)
print(temp_var)
print(type(temp_var))

打印此类型会导致“

那么这里发生了什么?请注意,我已将原始文件中的所有其他代码都注释掉了,因此我在此处粘贴的代码是唯一正在运行的代码。

【问题讨论】:

  • None 的类类型”没有意义 - NoneType 至少是可能的,但这样的对象不能具有除“None”之外的字符串表示形式。请显示您所说的 None 类型的实际代码/成绩单。
  • 具体来说就是一个包含一个元素的列表,也就是3个元素的元组。

标签: python fuzzywuzzy


【解决方案1】:

看看区别:

您的代码:

test_var = print(process.extract(str_user_question, df_chat_bot["Question"], limit = 1))

测试代码:

temp_var =       process.extract(test_user_question,df_chat_bot["Question"], limit = 1)

在您的代码中,process.extract() 包含在 print() 中。函数print() 始终返回None 并将其分配给test_var,这就是您收到错误的原因。当然type(None)NoneType

如果您想同时分配打印process.extract(...)的返回值,您必须在单独的语句中执行它们,就像在第二个示例中所做的那样。

【讨论】:

  • 我明白了!谢谢!我希望你不介意回答,但现在我对 process.extract() 的理解更好(它返回 3 个元组的列表,而不是 3 个元素的列表),我该如何选择我想使用的元组?我试过 temp_var[-1] 但它只返回 3 个元组的集合,因为它位于列表的第一个元素下。我试图谷歌如何做到这一点没有成功。如果你能帮助我,请提前谢谢你:)
  • 看起来process.extract() 返回一个元组列表,其中每个元组代表(value, score[, key]) 中的单个项目choices。输出中的元组数量与choices 参数中的元素数量相同,并且它们将对应。要访问最后一个匹配项的值,您可以使用temp_var[-1][0]。要获得得分最高的单个元组的值,您可以使用max(temp_var, key=lambda tup:tup[1])[0]。请注意,process.extractOne() 基本上会为您完成 max() 部分,只返回一个元组而不是它们的列表。
猜你喜欢
  • 1970-01-01
  • 2019-08-29
  • 1970-01-01
  • 2020-11-30
  • 2017-05-16
  • 1970-01-01
  • 2021-04-06
  • 2011-05-15
  • 2015-06-02
相关资源
最近更新 更多