为什么 fuzzywuzzy 处理分率 return 与模糊分率相比得分不同?

Why does fuzzywuzzy process with partial ratio return a different score compared to fuzz partial ratio?

我假设在将 scorer 参数设置为 fuzz.partial_ratio 的情况下调用的 process.extract 方法会产生与 fuzz.partial_ratio 方法相同的输出。然而,情况似乎并非如此:

>>>transcript = "July 23rd 2020 in house Sheridan Park alert"
>>>fuzz.partial_ratio(transcript, "Buses")
60

现在,process.extract:

>>>process.extract(transcript, ["Buses"], scorer = fuzz.partial_ratio)
[('Buses', 80)]

似乎 fuzz.partial_ratio 正在将“Buses”与内部的“use”匹配,但 process.extract 继续忽略以下 space 并匹配“S”在下一个词中。这是预期的行为吗?如果是这样,有没有办法解决它?我想使用 extract(或 extractBests)方法,因为我的列表大约有 150 个项目。

默认情况下 process.extract 通过以下方式预处理所有字符串:

  • 小写它们
  • 用空格替换非字母数字字符
  • 去除字符串开头和结尾的空格

可以使用 process.extractprocessor 参数禁用此行为。

from fuzzywuzzy import process, fuzz
transcript = "July 23rd 2020 in house Sheridan Park alert"
process.extract(transcript, ["Buses"], processor=None, scorer=fuzz.partial_ratio)

也会给你 [('Buses', 60)] 作为结果。