使用模糊 wuzzy 来匹配名称(问题!)没有达到预期效果?

Using fuzzy wuzzy to match names (Issue!) Not performing as expected?

我想适当地命名匹配,但如下所示,这不是我想要的匹配,有什么办法可以解决这个问题吗?我只是希望 Mark Longfield 先生比 Laurence Boode 先生更受欢迎,因为它更有可能是正确的匹配。

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)

这是否与列表和字符串的结构有关,而不是其他任何事情。因此,如果我删除人们的名字,我当然会更有可能匹配,但我宁愿使用他们的全名。

就其价值而言,以下将产生您预期的匹配:

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

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

('Mr Mark Longfield', 79)

Laurence Boode 在这种情况下的得分是 43。

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

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

您还可以测试其他记分器选项。其中之一可能更合适。有关详细信息,请参阅 here

我刚才在 Java 的这个库的端口中使用 token_set_ratio 来匹配电影标题。如果我记得的话,它对我的​​需要来说已经足够好了,但肯定有我得到误报的情况——但那是由于某些电影片名的性质。这可能不适用于您的情况。

希望对您有所帮助。

更新

来源评论中的一些注释:

A token_set 是字符串中的一组字母数字标记(按空格拆分)。

函数:

token_set_比率: Returns 是 0 到 100 之间序列相似性的度量。

token_sort_ratio: Returns 是 0 到 100 之间序列相似性的度量,但在比较之前对标记进行排序。

partial_ratio: Returns 最相似子串的比率为 0 到 100 之间的数字。

partial_token_set_ratio: Return 最相似子串的比率为 0 到 100 之间的数字。

partial_token_sort_ratio: Return 最相似子字符串的比率,作为 0 到 100 之间的数字,但在比较之前对标记进行排序。

Java 端口文档中有一些额外的 usage examples