Python 之 fuzzywuzzy 进行字符串模糊匹配

fuzzywuzzy 是 Python中 基于 Levenshtein 距离算法的字符串模糊匹配库,提供 fuzz.ratio 、 partial_ratio 、 token_sort_ratio 等核心函数,用于高效计算字符串相似度。该库广泛应用于数据清洗、拼写纠错、文本挖掘和用户输入处理等场景。比如识别相同新闻(有些新闻可能会在不同平台进行发布,标题和内容基本上没太大差异,这种的需要识别出来,避免重复处理)。

依赖安装

pip install fuzzywuzzy python-Levenshtein

依赖安装可以使用清华的 pip 镜像源,不然会很慢,而且很可能导致安装失败:

pip install fuzzywuzzy python-Levenshtein -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

编辑距离

你可以把编辑距离想象成一场“变脸游戏”:给你两个词,比如“kitten”和“sitting”,你要通过最少的操作次数,把第一个词变成第二个词。允许的操作只有三种:

  • 插入 (Insert):加个字母
  • 删除 (Delete):删个字母
  • 替换 (Substitute):换个字母

比如将 “kitten” 怎么变成 “sitting” ?

  1. k → s (替换)
  2. e → i (替换)
  3. 在末尾加个 g (插入)

总共三步完成,所以它们的编辑距离就是3。这种以“最小改动次数”来衡量相似度的方式,非常符合人类的直觉。改动越少,说明俩词越像;改动越多,就越不像。

相似度得分

fuzzywuzzy把编辑距离转化成了一个 0 到 100 的直观评分。分数越高,越像。

相似度得分 = (1 - 编辑距离 / 最长字符串长度) × 100

匹配函数

常用的匹配函数一般是下面这些,可能还会有一些衍生出来的变体,但整体分类上没有太大变化。下面示例中,不同依赖包版本的算法可能会稍有差异,运行的结果可能会有不同属于正常现象。

完整比对

ratio() 要求整体上尽量一致,包括顺序,词汇,长度等。它就像一把尺子,从头到尾量一遍两个字符串的相似度。

from fuzzywuzzy import fuzz standard = "iPhone 15 Pro Max" variants = [ "Iphone15ProMax", "iphone 15 pro max (256GB)", "IPHONE 15 PRO MAX", ] for v in variants: print(f"{v}: {fuzz.ratio(standard.lower(), v.lower())}") # Iphone15ProMax: 90 # iphone 15 pro max (256GB): 81 # IPHONE 15 PRO MAX: 100

局部比对

partial_ratio() 自动把短的那个字符串当成模板,在长的那个字符串上滑动,挨个位置截取同样长度的子串,然后调用ratio()去比,最后返回最高的那个得分。

from fuzzywuzzy import fuzz query = "北京路" db_entry = "广东省广州市越秀区北京路步行街" print(fuzz.ratio(query, db_entry)) # 只有33多分 print(fuzz.partial_ratio(query, db_entry)) # 高达100分!

忽略顺序

token_sort_ratio() 会先把两个字符串按空格或其他分隔符拆分成词(token),然后排序,最后再调用 ratio() 比对得到结果。

from fuzzywuzzy import fuzz print(fuzz.token_sort_ratio("红 色 跑车", "跑车 红 色")) # 输出: 100

核心比对

token_set_ratio()会提取两个字符串的所有唯一词汇,然后分成三部分:交集(共同有的词)、A独有、B独有。接着,它会组合这些部分进行多次比对,取最高分。在处理电商商品标题、文章标签等富含冗余信息场景时比较有效。

from fuzzywuzzy import fuzz title1 = "【旗舰店】Apple iPhone 15 Pro Max 256G 黑色" title2 = "iPhone15 Pro Max 256GB 手机 黑色" print(fuzz.token_set_ratio(title1, title2)) # 73

process

extractOne()

传给它一个查询词和一个候选列表,它会默默帮你把每个候选都比一遍,然后把得分最高的那位和它的分数打包送回来。默认的full_process预处理器会帮你做小写转换、去标点等清洗工作。

from fuzzywuzzy import process choices = [ "Apple iPhone 14 Pro", "iPhone 14 Plus", "Samsung Galaxy S23", "Google Pixel 7", ] query = "iphone 14 pro" best_match, score = process.extractOne(query, choices) print(f"最佳匹配: {best_match}, 得分: {score}") # 输出: 最佳匹配: Apple iPhone 14 Pro, 得分: 95

extract()

提取最好的几个,默认是 5 个,会将最佳匹配的几个候选和得分返回来。

from fuzzywuzzy import process choices = [ "Apple iPhone 14 Pro", "iPhone 14 Plus", "Samsung Galaxy S23", "Google Pixel 7", ] query = "iphone 14 pro" bests_match = process.extract(query, choices, limit=3) for match, score in bests_match: print(f"匹配:'{match}',得分:{score}") # 匹配:'Apple iPhone 14 Pro',得分:95 # 匹配:'iPhone 14 Plus',得分:81 # 匹配:'Google Pixel 7',得分:35

extractBests()

目前来看和 extract() 差别不大,唯一的区别是可以设置 score_cutoff 的阈值,使得只返回得分高于阈值的选项。

from fuzzywuzzy import process choices = [ "Apple iPhone 14 Pro", "iPhone 14 Plus", "Samsung Galaxy S23", "Google Pixel 7", ] query = "iphone 14 pro" bests_match = process.extractBests(query, choices, limit=3, score_cutoff=80) for match, score in bests_match: print(f"匹配:'{match}',得分:{score}") # 匹配:'Apple iPhone 14 Pro',得分:95 # 匹配:'iPhone 14 Plus',得分:81

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1119973.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot+Vue的厨艺美食菜品分享交流系统的设计与实现应用和研究

文章目录摘要项目简介大数据系统开发流程主要运用技术介绍爬虫核心代码展示结论源码文档获取定制开发/同行可拿货,招校园代理 :文章底部获取博主联系方式!摘要 随着互联网技术的快速发展,线上美食分享与交流平台逐渐成为用户展示厨艺、学习烹…

深度学习毕设选题推荐:基于深度学习python的鞋类分类

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

华为OD机考双机位C卷 - 任务编排系统 (Java Python JS C/C++ GO )

最新华为上机考试 真题目录:点击查看目录 华为OD面试真题精选:点击立即查看 华为OD机考双机位C卷 - 任务编排系统 题目描述 任务编排服务负责对任务进行组合调度。参与编排的任务有两种类型,其中一种执行时长为taskA,另一种执…

力扣数据库——组合两个表

175. 组合两个表https://leetcode.cn/problems/combine-two-tables/ 一 题目 表: Person 列名类型PersonIdintFirstNamevarcharLastNamevarchar personId 是该表的主键(具有唯一值的列)。该表包含一些人的 ID 和他们的姓和名的信息。表: Address 列…

基于人脸识别的企业员工考勤管理系统没视频应用和研究

文章目录人脸识别考勤系统的研究背景系统核心技术非视频应用场景研究进展与挑战实际应用价值项目简介大数据系统开发流程主要运用技术介绍爬虫核心代码展示结论源码文档获取定制开发/同行可拿货,招校园代理 :文章底部获取博主联系方式!人脸识别考勤系统的…

计及调峰主动性的风光水火储多能系统互补协调优化调度Matlab实现

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室 👇 关注我领取海量matlab电子书和数学建模资料 &#x1…

最新流出9款免费AI论文工具!知网维普查重一把过,无AIGC痕迹

紧急预警:毕业倒计时不足72小时?这些AI工具能救你命! 凌晨3点的图书馆、导师第12次打回的修改稿、查重报告上飘红的大片文字、答辩PPT还没开始做……如果你正被这些绝望瞬间包围,现在看到这篇文章就是最后的救命稻草!…

基于储能电站服务的冷热电多微网系统双层优化配置Matlab实现

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室 👇 关注我领取海量matlab电子书和数学建模资料 &#x1…

想他了,撒撒娇,男人真的很吃这一套

💖 我今天没吃糖,却甜到发慌——因为满脑子都是你呀~🌙 月亮都睡了,我还在想你,快补偿我一个晚安吻😘🎈 想做你的专属小尾巴,你走哪我粘哪,甩都甩不掉&#x…

lvgl之显示gif测试代码

#include "lvgl/src/lv_lib_gif/lv_gif.h" void lvgl_gif_demo() {lv_obj_t* parent = lv_scr_act();</

【集群划分】考虑楼宇空间布局的电力系统集群规划策略附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1…

深度学习毕设选题推荐:基于python的cnn卷积网络识别树叶是否存在病变

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

深度学习毕设选题推荐:卷神经网络 基于深度学习算法训练数字识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

大模型岗位薪资爆了,年薪百万轻轻松松,非常详细收藏我这一篇就够了

2024下半年&#xff0c;“大模型狂热”愈演愈烈 国内巨头战队华为、百度、阿里在AIGC的厮杀中 从通用大模型渗透到各垂类应用市场 就连创投资本也独宠AIGC企业 百度、科大讯飞市值分别增加27亿和45亿美元 这导致AI人才缺口大、薪资普遍上涨↑40% 不少企业开出百万年薪挖掘大模型…

vue基于spring boot的学生宿舍分配报修管理系统应用和研究

文章目录摘要技术实现应用价值项目简介大数据系统开发流程主要运用技术介绍爬虫核心代码展示结论源码文档获取定制开发/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 随着高校规模的扩大和学生人数的增加&#xff0c;传统的学生宿舍管理方式已…

计算机深度学习毕设实战-基于python深度学习的鞋类分类

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

vue基于人脸识别基于spring boot的网络考试系统的设计与实现应用和研究

文章目录摘要关键词项目简介大数据系统开发流程主要运用技术介绍爬虫核心代码展示结论源码文档获取定制开发/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 随着在线教育的普及&#xff0c;网络考试系统成为高校和培训机构的重要工具。传统在线…

深度Agent评测全攻略:LangChain团队分享5大核心评测模式

LangChain团队分享了评测深度Agent的五大核心模式&#xff1a;定制化测试逻辑、单步评测、完整Agent轮次、多轮次运行评测及正确环境设置。与传统LLM评测不同&#xff0c;深度Agent评测需关注轨迹、状态和工具调用。单步评测适合开发快速迭代&#xff0c;完整轮次适合回归测试&…

计算机深度学习毕设实战-python基于cnn卷积网络识别树叶是否存在病变

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

【程序员必藏】2025最新RL×LLM技术全景扫描:从全生命周期到推理增强,附60+开源模型与30+训练框架

该文介绍2025年两篇关于强化学习(RL)与大语言模型(LLM)结合的最新技术综述。第一篇梳理了RL在LLM全生命周期(预训练、对齐、推理增强)的应用&#xff0c;重点解析RLVR技术&#xff1b;第二篇聚焦"大推理模型(LRM)"&#xff0c;探讨奖励设计、策略优化等核心问题&…