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 相关文章推荐
Djang中静态文件配置方法
Jul 30 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
Jun 14 Python
numpy.random.seed()的使用实例解析
Feb 03 Python
Python-OpenCV基本操作方法详解
Apr 02 Python
Numpy数组转置的两种实现方法
Apr 17 Python
启动Atom并运行python文件的步骤
Nov 09 Python
pytorch使用Variable实现线性回归
May 21 Python
python opencv图片编码为h264文件的实例
Dec 12 Python
解决ROC曲线画出来只有一个点的问题
Feb 28 Python
Python实现发票自动校核微信机器人的方法
May 22 Python
python--shutil移动文件到另一个路径的操作
Jul 13 Python
Python中logger日志模块详解
Aug 04 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
php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
2014/06/19 PHP
Yii中render和renderPartial的区别
2014/09/03 PHP
PHP中使用array函数新建一个数组
2015/11/19 PHP
PHP目录与文件操作技巧总结(创建,删除,遍历,读写,修改等)
2016/09/11 PHP
jQuery $.each的用法说明
2010/03/22 Javascript
推荐17个优美新鲜的jQuery的工具提示插件
2012/09/14 Javascript
js获取当前页面路径示例讲解
2014/01/08 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
2015/09/01 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
2016/05/05 Javascript
AngularJs学习第五篇从Controller控制器谈谈$scope作用域
2016/06/08 Javascript
微信小程序 教程之小程序配置
2016/10/17 Javascript
jQuery实现可移动选项的左右下拉列表示例
2016/12/26 Javascript
jQuery表单元素选择器代码实例
2017/02/06 Javascript
JavaScript数据结构之广义表的定义与表示方法详解
2017/04/12 Javascript
php简单数据库操作类的封装
2017/06/08 Javascript
package.json文件配置详解
2017/06/15 Javascript
jQuery实现表单动态加减、ajax表单提交功能
2018/06/08 jQuery
Angular6中使用Swiper的方法示例
2018/07/09 Javascript
详解jenkins自动化部署vue
2019/05/14 Javascript
Vue指令之 v-cloak、v-text、v-html实例详解
2019/08/08 Javascript
一次微信小程序内地图的使用实战记录
2019/09/09 Javascript
关于vue表单提交防双/多击的例子
2019/10/31 Javascript
Python编程中用close()方法关闭文件的教程
2015/05/24 Python
python中的变量如何开辟内存
2018/06/26 Python
python中sys.argv函数精简概括
2018/07/08 Python
新年快乐! python实现绚烂的烟花绽放效果
2019/01/30 Python
Python3 使用map()批量的转换数据类型,如str转float的实现
2019/11/29 Python
python自动化测试三部曲之request+django实现接口测试
2020/10/07 Python
美国女鞋品牌:naturalizer(娜然)
2016/08/01 全球购物
中国茶叶、茶具一站式网上购物商城:醉品茶城
2018/07/03 全球购物
欧缇丽加拿大官方网站:Caudalie加拿大
2019/07/18 全球购物
高中生的自我评价
2014/03/04 职场文书
学党史心得体会
2014/09/05 职场文书
2015新年寄语大全
2014/12/08 职场文书
解析Redis Cluster原理
2021/06/21 Redis
vue使用Google Recaptcha验证的实现示例
2021/08/23 Vue.js