Python中使用 thefuzz 实现模糊字符串匹配与提取
讲解如何借助Python的thefuzz库解决名称拼写不一、格式混乱带来的字符串匹配难题。涵盖环境配置、fuzz模块四种核心相似度算法的适用场景,以及process模块在列表批量提取与自定义打分器中的应用,附完整可运行代码与性能优化建议。
环境配置与导入
Thetfuzz是早期FuzzyWuzzy的现代维护版本,底层依赖Python-Levenshtein以提升运算速度。建议在项目初始化前完成依赖安装:
pip install thefuzz
pip install python-Levenshtein
若安装过程中因编译环境问题报错,可尝试预编译包回退方案:
pip install python-Levenshtein-wheels
安装完成后,按需导入核心模块:
from thefuzz import fuzz, process
核心比对算法与适用场景
传统等号比较仅返回布尔值,无法处理大小写、空格或轻微拼写差异。thefuzz通过Levenshtein距离度量将相似度转化为0~100的数值指标,提供以下四种标准函数:
第1步:计算基础字符相似度
入口为`fuzz.ratio()`,逐字符比对两个字符串的整体相似度。适用于长度相近且语序完全一致的对比。
ST1 = 'Just a test'
ST2 = 'just a test'
print(fuzz.ratio(ST1, ST2)) # 输出: 91
仅首字母大小写差异即可使完美匹配降至91分。当替换整句内容时,分数会随重叠部分减少而下降:
ST1 = 'This is a test string for test'
ST2 = 'There are some test string for testing'
print(fuzz.ratio(ST1, ST2)) # 输出: 75
第2步:执行子串部分匹配
入口为`fuzz.partial_ratio()`。当长文本包含完整的短文本片段时,该函数直接返回满分,忽略尾部多余词汇。
ST1 = 'There are test'
ST2 = 'There are test string for testing'
print(fuzz.partial_ratio(ST1, ST2)) # 输出: 100
第3步:处理词序与重复差异
当字符串包含相同单词但排列顺序不同,或存在大量重复词汇时,需切换至分词集合比对函数:
CASE_1 = 'This generation rules the nation'
CASE_2 = 'Rules the nation This generation'
此时使用`fuzz.token_sort_ratio()`自动对单词按字母排序后再比对,无视原始位置差异:
print(fuzz.token_sort_ratio(CASE_1, CASE_2)) # 输出: 100
若连续出现重复单词导致干扰,启用`fuzz.token_set_ratio()`将重复词去重为集合后进行比对:
CASE_1 = 'This generation'
CASE_2 = 'This This generation generation generation generation'
print(fuzz.token_set_ratio(CASE_1, CASE_2)) # 输出: 100
使用 process 模块进行批量模糊提取
面对海量标签、商品名或知识库条目时,手动遍历评分效率低下。`process`模块提供向量化提取能力,可直接返回Top N匹配项及对应分值。
第4步:调用 extract 批量提取
基础用法需提供目标查询串、候选列表及限制返回数量:
Diff_items = [
'Programming language', 'Native language', 'React framework',
'People stuff', 'This generation', 'Coding and stuff'
]
print(process.extract('language', Diff_items, limit=2))
输出将按相似度降序排列元组列表。需注意,该逻辑基于字面距离而非语义理解,因此未直接包含"programing"的候选项仍可能因拼写接近获得高权重。
第5步:传入自定义 scorer 优化排序
默认提取使用`fuzz.ratio`作为打分器。若业务场景强调词序独立性与集合特征,可在调用时注入其他比对函数:
LISt_OF_Books = [
'The python everyone volume 1 - Beginner',
'The python everyone volume 2 - Machine Learning',
'The python everyone volume 3 - Data Science',
'Different Data Science book',
'Python algorithms and data structures'
]
print(process.extract(
'python Data Science',
LISt_OF_Books,
limit=3,
scorer=fuzz.token_sort_ratio
))
自定义打分器后,系统将优先召回标题结构松散但核心关键词重合度高的条目,显著提升检索命中率。
性能调优与注意事项
- 单次调用开销极低,但在万级数据集上仍建议使用`token_set_ratio`避免冗余字符拖慢计算。
- 函数返回值均为整数型相似度评分,实际过滤时需根据业务容忍度设定阈值(通常≥60视为有效关联)。
- 该库不涉及自然语言理解,专业术语缩写、同义词替换或语音转写误差需结合词向量模型或正则预处理辅助。
以上就是Python中使用 thefuzz 实现模糊字符串匹配的详细内容,更多关于Python文本处理与数据清洗的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









