python fuzzywuzzy模块模糊字符串匹配详细用法


Posted in Python onAugust 29, 2019

github主页

导入:

>>> from fuzzywuzzy import fuzz
>>> from fuzzywuzzy import process

1)

>>> fuzz.ratio("this is a test", "this is a test!")
out 97
>>> fuzz.partial_ratio("this is a test", "this is a test!")
out 100

fuzz.ratio()对位置敏感,全匹配。fuzz.partial_ratio()对位置敏感,搜索匹配。

2)

>>> fuzz._process_and_sort(s, force_ascii, full_process=True)

对字符串s排序。force_ascii:True 或者False。为True表示转换为ascii码。如果full_process为True,则会将字符串s转换为小写,去掉除字母和数字之外的字符(发现不能去掉-字符),剩下的字符串以空格分开,然后排序。如果为False,则直接对字符串s排序。

>>> fuzz._token_sort(s1, s2, partial=True, force_ascii=True, full_process=True)

给出字符串 s1, s2的相似度。首先经过 fuzz._process_and_sort()函数处理。partial为True时,再经过fuzz.partial_ratio()函数。partial为False时,再经过fuzz.ratio()函数。

>>> fuzz.token_sort_ratio("fuzzy wuzzy was a bear", "wuzzy fuzzy was a bear")
out 100

partial为False的_token_sort()

fuzz.partial_token_sort_ratio(s1, s2, force_ascii=True, full_process=True)

就是partial为True时的Fuzz._token_sort()

3)

>>> fuzz.token_set_ratio("fuzzy was a bear", "fuzzy fuzzy was a bear")
out 100
fuzz._token_set(s1, s2, partial=True, force_ascii=True, full_process=True)

当partial为False时,就是 fuzz.token_set_ratio()函数。

fuzz.partial_token_set_ratio(s1, s2, force_ascii=True, full_process=True)

partial为True的fuzz._token_set()函数。

4)

fuzz.QRatio(s1, s2, force_ascii=True, full_process=True)

full_process为True时,经过utils.full_process()函数。然后经过fuzz.ratio()函数。对顺序敏感。

fuzz.UQRatio(s1, s2, full_process=True)

就是 force_ascii为False的fuzz.QRatio()函数。

fuzz.WRatio(s1, s2, force_ascii=True, full_process=True)

使用另一种不同算法计算相似度。对顺序敏感。

UWRatio(s1, s2, full_process=True)

是force_ascii为False的fuzz.WRatio()函数。

总结:如果计算相似度的字符串只有字母和数字,直接可以用ratio()和partial_ratio()。但如果还有其他字符,而且我们想要去掉这些没用字符,就用下边的。下边的函数都对顺序不敏感,但token_sort_ratio()系列是全字符匹配,不管顺序。而token_set_ratio()只要第二个字符串包含第一个字符串就100,不管顺序。

5)

>>> choices = ["Atlanta Falcons", "New York Jets", "New York Giants", "Dallas Cowboys"]
>>> process.extract("new york jets", choices, limit=2)
 [('New York Jets', 100), ('New York Giants', 78)]
>>> process.extractOne("cowboys", choices)
 ("Dallas Cowboys", 90)
>>> process.extract(query, choices, processor=default_processor, scorer=default_scorer, limit=5)

query是字符串,choices是数组,元素是字符串。 processor是对输入比较的字符串的处理函数,默认是fuzzywuzzy.utils.full_process(),即将字符串变为小写, 去掉除字母和数字之外的字符(发现不能去掉-字符),剩下的字符串以空格分开。scorer计算两个字符串相似度的函数,默认fuzz.WRatio()。 limit是输出个数。

输出为数组,元素为元组,元祖第一个匹配到的字符串,第二个为int型,为score。对输出按照score排序。

>>> process.extractWithoutOrder(query, choices, processor=default_processor, scorer=default_scorer, score_cutoff=0)

score_cutoff为一个阈值,当score小于该阈值时,不会输出。返回一个生成器,输出每个大于 score_cutoff的匹配,按顺序输出,不排序。

>>> process.extractBests(query, choices, processor=default_processor, scorer=default_scorer, score_cutoff=0, limit=5)

process.extractBests()和process.extract()都调用了process.extractWithoutOrder(),只不过process.extractBests()能传输 score_cutoff。

>>> process.extractOne(query, choices, processor=default_processor, scorer=default_scorer, score_cutoff=0)

也调用了process.extractWithoutOrder(),只不过输出一个score最高的值。

process.dedupe(contains_dupes, threshold=70, scorer=fuzz.token_set_ratio)

contains_dupes是数组,元素为字符串。

取出相似度小于 threshold的字符串,相似度大于 threshold的字符串取最长一个。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python3使用requests登录人人影视网站的方法
May 11 Python
Python 3.x读写csv文件中数字的方法示例
Aug 29 Python
python opencv之SIFT算法示例
Feb 24 Python
Python面向对象之静态属性、类方法与静态方法分析
Aug 24 Python
Python List列表对象内置方法实例详解
Oct 22 Python
python绘制雪景图
Dec 16 Python
Django app配置多个数据库代码实例
Dec 17 Python
Django使用Celery加redis执行异步任务的实例内容
Feb 20 Python
python使用Thread的setDaemon启动后台线程教程
Apr 25 Python
python怎么判断素数
Jul 01 Python
Pytorch GPU内存占用很高,但是利用率很低如何解决
Jun 01 Python
python中字符串String及其常见操作指南(方法、函数)
Apr 06 Python
python多线程分块读取文件
Aug 29 #Python
用sqlalchemy构建Django连接池的实例
Aug 29 #Python
详解Python 字符串相似性的几种度量方法
Aug 29 #Python
python多线程同步之文件读写控制
Feb 25 #Python
python线程中的同步问题及解决方法
Aug 29 #Python
python实现H2O中的随机森林算法介绍及其项目实战
Aug 29 #Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
Aug 29 #Python
You might like
Banner程序
2006/10/09 PHP
php中base_convert()进制数字转换函数实例
2014/11/20 PHP
php源码的使用方法讲解
2019/09/26 PHP
IE不出现Flash激活框的小发现的js实现方法
2007/09/07 Javascript
js监控IE火狐浏览器关闭、刷新、回退、前进事件
2014/07/23 Javascript
nodejs中简单实现Javascript Promise机制的实例
2014/12/06 NodeJs
jQuery焦点控制图层展示延迟隐藏的方法
2015/03/09 Javascript
js模拟淘宝网的多级选择菜单实现方法
2015/08/18 Javascript
深入探讨javascript函数式编程
2015/10/11 Javascript
js图片轮播效果实现代码
2020/04/18 Javascript
移动手机APP手指滑动切换图片特效附源码下载
2015/11/30 Javascript
jQuery ajax应用总结
2016/06/02 Javascript
Bootstrap CSS布局之代码
2016/12/17 Javascript
vue动态组件实现选项卡切换效果
2017/03/08 Javascript
jquery仿ps颜色拾取功能
2017/03/08 Javascript
JavaScript中this关键字用法实例分析
2018/08/24 Javascript
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
2019/04/09 Javascript
Layui之table中的radio在切换分页时无法记住选中状态的解决方法
2019/09/02 Javascript
[01:14]辉夜杯战队访谈宣传片—NEWBEE.Y
2015/12/26 DOTA
[12:29]2018国际邀请赛 开幕秀
2018/08/22 DOTA
python定时检查启动某个exe程序适合检测exe是否挂了
2013/01/21 Python
深入浅析Python中的yield关键字
2018/01/24 Python
使用Python脚本zabbix自定义key监控oracle连接状态
2019/08/28 Python
python检测服务器端口代码实例
2019/08/31 Python
Python如何实现小程序 无限求和平均
2020/02/18 Python
python golang中grpc 使用示例代码详解
2020/06/03 Python
大都会艺术博物馆商店:The Met Store
2018/06/22 全球购物
世界上最大的艺术和工艺用品商店:MisterArt.com
2018/07/13 全球购物
网上常见的一份Linux面试题(多项选择部分)
2015/02/07 面试题
采购求职信
2014/03/17 职场文书
农民工工资发放承诺书
2014/03/31 职场文书
党员群众路线自我剖析材料
2014/10/06 职场文书
高三英语复习计划
2015/01/19 职场文书
2015小学音乐教师个人工作总结
2015/07/21 职场文书
2016年小学教师政治学习心得体会
2016/01/23 职场文书
Java8 CompletableFuture 异步回调
2022/04/28 Java/Android