使用fuzzy-wuzzy匹配名称(问题!)是否未按预期执行?

2024-06-07 12:40:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我想恰当地命名这场比赛,但从下面可以看出,这不是我想要的比赛,有什么办法可以避免吗?我只是希望马克·朗菲尔德先生比劳伦斯·布德先生更受欢迎,因为这更可能是正确的匹配

from fuzzywuzzy import fuzz, process

str = 'Mr Lonfield'
L = list('Mr Laurence Boode', 'Mr Mark Longfield')
print(process.extractOne(str, L))

Output: ('Mr Laurence Boode', 86)

这与列表和字符串的结构有关吗。所以,如果我删除了人们的名字,我当然更可能匹配他们,但我更希望有他们的全名


Tags: fromimportprocess命名listmarkmrstr
1条回答
网友
1楼 · 发布于 2024-06-07 12:40:09

不管它值多少钱,以下内容将产生您的预期匹配:

print(process.extractOne(str, L, scorer=fuzz.token_set_ratio))

在这种情况下,您将获得:

('Mr Mark Longfield', 79)

劳伦斯·布德在这个场景中的得分是43

我之所以说是因为它的价值,是因为除了查看源代码(下面的链接)之外,我无法找到关于它如何工作的更多细节

此外,您当然需要测试这在您的更大人群中的效果

您还可以使用其他记分器选项进行测试。其中之一可能更适合。详情见here

不久前,我在这个库的Java端口中使用了token_set_ratio,用于匹配电影标题。如果我还记得的话,它对我的需求来说已经足够好了,但确实有一些案例我得到了误报——但这是由于某些电影标题的性质。这可能不适用于您的场景

我希望有帮助

更新

来源评论中的一些注释:

一个标记\u集是一个字符串中的字母数字标记集(按空格分割)

职能:

令牌集比率: 返回序列在0和100之间的相似性度量

令牌排序比率: 返回序列在0和100之间的相似性度量,但在比较之前对标记进行排序

部分比例: 以0到100之间的数字形式返回最相似子字符串的比率

部分令牌集比率: 以0到100之间的数字形式返回最相似子字符串的比率

部分令牌排序比率: 以0到100之间的数字形式返回最相似子字符串的比率,但在比较之前对标记进行排序

Java端口文档中还有一些附加的usage examples

相关问题 更多 >

    热门问题