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 相关文章推荐
Python初学时购物车程序练习实例(推荐)
Aug 08 Python
Python进阶之尾递归的用法实例
Jan 31 Python
python3爬取各类天气信息
Feb 24 Python
浅谈python3.6的tkinter运行问题
Feb 22 Python
python+opencv实现摄像头调用的方法
Jun 22 Python
django中账号密码验证登陆功能的实现方法
Jul 15 Python
Django中reverse反转并且传递参数的方法
Aug 06 Python
wxPython窗体拆分布局基础组件
Nov 19 Python
opencv 图像滤波(均值,方框,高斯,中值)
Jul 08 Python
降低python版本的操作方法
Sep 11 Python
python flask开发的简单基金查询工具
Jun 02 Python
Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)
Jun 07 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
深入mysql_fetch_row()与mysql_fetch_array()的区别详解
2013/06/05 PHP
php strrpos()与strripos()函数
2013/08/31 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
Laravel源码解析之路由的使用和示例详解
2018/09/27 PHP
Yii框架ACF(accessController)简单权限控制操作示例
2019/04/26 PHP
jQuery的实现原理的模拟代码 -5 Ajax
2010/08/07 Javascript
jquery checkbox实现单选小例
2013/11/27 Javascript
JavaScript避免代码的重复执行经验技巧分享
2014/04/17 Javascript
使用javascript实现监控视频播放并打印日志
2015/01/05 Javascript
jQuery操作基本控件方法实例分析
2015/12/31 Javascript
js实现密码强度检测【附示例】
2016/03/30 Javascript
Json解析的方法小结
2016/06/22 Javascript
Ajax与服务器(JSON)通信实例代码
2016/11/05 Javascript
AngularJS通过ng-Img-Crop实现头像截取的示例
2017/08/17 Javascript
JavaScript输入分钟、秒倒计时技巧总结(附代码)
2017/08/17 Javascript
ES6 javascript中class类的get与set用法实例分析
2017/10/30 Javascript
Angularjs之如何在跨域请求中传输Cookie的方法
2018/06/01 Javascript
vue2.0获取鼠标位置的方法
2018/09/13 Javascript
移动端滑动切换组件封装 vue-swiper-router实例详解
2018/11/25 Javascript
JS控制下拉列表左右选择实例代码
2020/05/08 Javascript
ant-design表单处理和常用方法及自定义验证操作
2020/10/27 Javascript
jQuery实现移动端扭蛋机抽奖
2020/11/08 jQuery
Python实现堆排序的方法详解
2016/05/03 Python
常见的python正则用法实例讲解
2016/06/21 Python
用python结合jieba和wordcloud实现词云效果
2017/09/05 Python
浅谈关于Python3中venv虚拟环境
2018/08/01 Python
python利用pandas将excel文件转换为txt文件的方法
2018/10/23 Python
Python发展简史 Python来历
2019/05/14 Python
如何安装2019Pycharm最新版本(详细教程)
2019/09/26 Python
PyTorch 解决Dataset和Dataloader遇到的问题
2020/01/08 Python
使用Python求解带约束的最优化问题详解
2020/02/11 Python
分别介绍一下Session Bean和Entity Bean
2015/03/13 面试题
自荐信不宜过于夸大
2013/11/06 职场文书
计算机应用专业应届毕业生中文求职信范文
2013/11/29 职场文书
2014年党员自我评议总结
2014/09/23 职场文书
创业计划书之校园超市
2019/09/12 职场文书