需要更深入地了解Python模糊匹配算法中的部分比对。

6

我正在企业级应用Python Fuzzywuzzy匹配两个字符串。在大多数情况下它都可以正常工作,但在下面提到的场景中却出现了意外结果:

fuzz.partial_ratio('ja rule:mesmerize','ja rule feat. ashanti:mesmerize') gives output 65

并且

fuzz.partial_ratio('ja rule:mesmerize','jennifer lopez feat. ja rule:im real ') gives the output 67

为什么第二场比赛的模糊分数比第一场好?有什么解释吗?

非常感谢您的帮助和建议。


观众可能会发现这个很有用(来自 "fuzzywuzzy" 的开发者)https://dev59.com/blwZ5IYBdhLWcg3wIdV8 - ATutorMe
1个回答

6

fuzzywuzzy使用Levenshtein距离,这意味着它会比较所有字符,包括空格和符号,例如“:”。

partial_ratio比较两个字符串,但允许将较长的字符串截断为较短字符串的长度。

在您的情况下,较短的字符串是长度为17的'ja rule:mesmerize'。当比较字符串时,较长的字符串被削减到该大小。

有了这些信息,让我们比较您的输出。我们可以看到第一个长字符串末尾没有:,而第二个长字符串有。还有许多其他可能的因素,但这可能是您结果的主要原因。

我相信更仔细的分析将揭示有关得分的更多信息。 patial_ratio的实现在此处找到 https://github.com/seatgeek/fuzzywuzzy/blob/master/fuzzywuzzy/fuzz.py#L34


谢谢您的解释! - Sains
[2020年10月] 它不会截断较长的字符串。它只是根据上面的 github 链接进行切换。 - RAbraham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接