Rapidfuzz
是为了满足现代数据处理中对于字符串匹配速度和准确性的双重需求而生的。
当我们提到字符串匹配,可能脑海中首先浮现的是正则表达式或者是传统的字符串比对方法。
然而,这些方法在处理模糊匹配上显得力不从心。
在模糊匹配的王国里,Levenshtein
和fuzzywuzzy
曾称霸一方,但是随着 Rapidfuzz
的出现,它们的宝座开始摇摇欲坠。
Rapidfuzz
以其背后的 C++强力驱动,其执行效率大大超越了它的前辈们。
它不仅速度更快,性能更优,而且依赖更少,为开发者节约了大量的时间与精力。
虽然 Rapidfuzz
本身如同箭在弦上,等不及滑进你的项目中,但首先我们得安装它。
来,跟随这简单的命令,让其在你的 Python 环境中驰骋:
pip install rapidfuzz
如果你的项目依赖于快速而准确的字符串匹配功能,那么这就是一个不可或缺的步骤。
在涉足 Rapidfuzz
的世界之前,让我们先来熟悉几个它的杀手锏功能,这些是它真正崭露头角的地方。
Rapidfuzz
最基本的功能就是计算两个字符串之间的相似度。
这是通过比较字符出现的频率和位置来实现的。
from rapidfuzz import fuzz
similarity = fuzz.ratio("Rapidfuzz", "Rapidfuzz is amazing!")
print(similarity) # 输出两个字符串的匹配百分比
如果你有一堆候选字符串,你可以使用 Rapidfuzz
来找出其中与给定查询字符串匹配度最高的那个:
from rapidfuzz import process
candidates = ["Rapid buzz", "Rapidfuss", "Rapidfuzz", "Rapid fuzz"]
best_match = process.extractOne("Rapid fuzz", candidates)
print(best_match)
输出将显示出哪个候选字符串与查询字符串最为接近。
Rapidfuzz
不仅仅是个粗犷的功能库,它还有一些妙处藏在袖间。这里展示了其中的几个高级功能。
当你拥有一个大型的候选集合,而你又想按照匹配度对它们排序时,Rapidfuzz
提供了一种高效的解决方案。
from rapidfuzz import process
candidates = ["apple", "apricot", "banana", "orange"]
query = "appl"
sorted_matches = process.extract(query, candidates)
print(sorted_matches)
此功能会根据与查询字符串的匹配度对候选列表进行排序。
有时候我们不需要找到 100% 的匹配,有一个可接受的阈值就足够了。Rapidfuzz
允许你设置这样的条件,进而控制搜索的精细度。
from rapidfuzz import process, fuzz
candidates = ["New Yark", "New Work", "New York", "New Yolk"]
best_match = process.extractOne(
"New York", candidates, scorer=fuzz.partial_ratio, score_cutoff=80
)
print(best_match) # 找到匹配度至少为 80% 的最佳匹配
这就是 Rapidfuzz
不可忽视的部分超前技能。更多详细说明和用法,请参考项目文档:https://rapidfuzz.github.io/RapidFuzz/