RapidFuzz与FuzzyWuzzy的API差异解析

RapidFuzz与FuzzyWuzzy的API差异解析

RapidFuzz Rapid fuzzy string matching in Python using various string metrics RapidFuzz 项目地址: https://gitcode.com/gh_mirrors/rap/RapidFuzz

前言

在字符串模糊匹配领域,FuzzyWuzzy曾经是Python生态中最受欢迎的库之一。而RapidFuzz作为其后继者,不仅提供了更快的执行速度,还在API设计上进行了优化和改进。本文将详细解析RapidFuzz与FuzzyWuzzy在API层面的关键差异,帮助开发者更好地理解和使用RapidFuzz。

核心算法实现差异

ratio函数实现

FuzzyWuzzy提供了两种ratio实现方式:

  1. 基于difflib的纯Python实现(使用Ratcliff和Obershelp算法)
  2. 使用Indel相似度的加速版本(类似于Levenshtein距离,但只允许插入/删除操作)

这种双重实现会导致不同版本下结果不一致的问题。RapidFuzz则始终使用Indel相似度算法,无论是纯Python回退实现还是C++实现,都保证了结果的一致性。

partial_ratio函数实现

FuzzyWuzzy的partial_ratio实现存在几个关键问题:

  1. 纯Python实现中未禁用difflib的自动垃圾启发式算法
  2. 加速版本回溯Levenshtein矩阵时不能保证找到最长公共子串
  3. 假设最优子串从匹配块开始,但这一假设并不总是成立

RapidFuzz采用了更可靠的滑动窗口方法(带有优化以跳过不可能的匹配),这种方法能保证找到最优匹配。

预处理功能差异

预处理函数

FuzzyWuzzy中的utils.full_process函数在RapidFuzz中更名为utils.default_process,行为基本一致,但移除了force_ascii参数(该参数用于移除字符串中的非ASCII字符)。

计分器(Scorers)预处理

FuzzyWuzzy中多个计分器默认会预处理字符串,包括:

  • token_sort_ratio
  • token_set_ratio
  • partial_token_sort_ratio
  • partial_token_set_ratio
  • WRatio
  • QRatio
  • UWRatio
  • UQRatio

其中大多数默认启用force_ascii选项。

RapidFuzz采取了更一致的设计原则:

  1. 默认不预处理字符串
  2. 通过processor参数显式指定预处理函数
  3. 移除了UWRatio和UQRatio函数(因为它们本质上就是禁用force_ascii的WRatio/QRatio)

处理函数差异

提取函数对比

FuzzyWuzzy中的处理函数在RapidFuzz中有以下变化:

| FuzzyWuzzy函数 | RapidFuzz对应函数 | 说明 | |---------------|------------------|------| | extractWithoutOrder | extract_iter | 生成未排序结果的迭代器 | | extract/extractBests | extract | 合并为一个函数,通过score_cutoff参数过滤 | | extractOne | extractOne | 保持相同名称 | | dedupe | 无对应函数 | 未实现 |

预处理行为

RapidFuzz中的所有提取函数都遵循一致的设计原则:

  1. 默认不进行预处理
  2. 通过processor参数显式启用预处理

迁移建议

对于从FuzzyWuzzy迁移到RapidFuzz的开发者,建议注意以下几点:

  1. 结果一致性:由于算法实现不同,相同输入可能会产生略微不同的相似度分数
  2. 预处理逻辑:需要显式指定预处理函数,而不是依赖默认行为
  3. 函数重命名:注意部分函数名称的变化
  4. 移除功能:如dedupe等函数需要寻找替代方案

总结

RapidFuzz在保持与FuzzyWuzzy高度兼容的同时,通过更一致的API设计和优化的算法实现,提供了更好的开发体验和性能表现。理解这些API差异将帮助开发者更顺利地迁移项目并充分利用RapidFuzz的优势。

RapidFuzz Rapid fuzzy string matching in Python using various string metrics RapidFuzz 项目地址: https://gitcode.com/gh_mirrors/rap/RapidFuzz

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毕腾鉴Goddard

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值