You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

FuzzyWuzzy不同匹配方法对相同文本返回结果不一致的技术咨询

为什么FuzzyWuzzy的token_sort_ratiopartial_token_sort_ratio返回不同结果?

这是个很常见的疑问,核心原因是这两个方法的匹配逻辑完全不同,咱们结合你的例子一步步拆解:

1. fuzz.token_sort_ratio的工作逻辑

这个方法的步骤是:

  • 把两个字符串按空格拆分成「token(词元)」
  • 对每个字符串的token按字母顺序排序
  • 将排序后的token重新拼接成新字符串
  • 计算两个新字符串的完整相似度(基于编辑距离/SequenceMatcher)

放到你的例子里:

  • "Kimberly Beukema" 拆分后是 ["Kimberly", "Beukema"],排序后拼接为 "Beukema Kimberly"
  • "Ms. Kimberly Beukema" 拆分后是 ["Ms.", "Kimberly", "Beukema"],排序后拼接为 "Beukema Kimberly Ms."

现在它要对比的是这两个完整字符串的相似度——第二个字符串比第一个多了"Ms. "这部分内容,所以完整匹配度会被拉低,最终返回91。

2. fuzz.partial_token_sort_ratio的工作逻辑

这个方法在token_sort_ratio的基础上,做了一个关键调整:只做部分匹配,步骤是:

  • token_sort_ratio一样,先拆分、排序token
  • 取较短的那个token集合,去匹配较长的token集合
  • 计算较短集合的token在较长集合中的覆盖比例

还是你的例子:

  • 较短的token集合是 ["Kimberly", "Beukema"]
  • 较长的token集合是 ["Ms.", "Kimberly", "Beukema"]

因为较短集合里的所有token都能在较长集合中找到,覆盖比例是100%,所以返回100。

给你的小建议

如果你的场景是匹配姓名(经常会有Ms./Mr.这类前缀差异),partial_token_sort_ratio或者fuzz.token_set_ratio(基于token集合的交集匹配)会比token_sort_ratio更合适,它们能更好地忽略这类无关的前缀/后缀差异。

内容的提问来源于stack exchange,提问作者Cristina

火山引擎 最新活动