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时间整形转标准格式的示例分享
Feb 14 Python
详解使用Python处理文件目录的相关方法
Oct 16 Python
对Python中DataFrame按照行遍历的方法
Apr 08 Python
解决python3中cv2读取中文路径的问题
Dec 05 Python
Tensorflow获取张量Tensor的具体维数实例
Jan 19 Python
利用python中集合的唯一性实现去重
Feb 11 Python
Jupyter notebook运行Spark+Scala教程
Apr 10 Python
pycharm sciview的图片另存为操作
Jun 01 Python
为什么是 Python -m
Jun 19 Python
Python变量格式化输出实现原理解析
Aug 06 Python
pytorch实现ResNet结构的实例代码
May 17 Python
Python绘制散点图之可视化神器pyecharts
Jul 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
天津市收音机工业发展史
2021/03/04 无线电
PHP把小数转成整数3种方法
2014/06/30 PHP
php+mysqli实现将数据库中一张表信息打印到表格里的方法
2015/01/28 PHP
php基于CodeIgniter实现图片上传、剪切功能
2016/05/14 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
2019/03/21 PHP
laravel 执行迁移回滚示例
2019/10/23 PHP
替代window.event.srcElement效果的可兼容性的函数
2009/12/18 Javascript
JavaScript 基础篇之运算符、语句(二)
2012/04/07 Javascript
基于jQuery选择器的整理集合
2013/04/26 Javascript
鼠标移到图片上变大显示而不是放大镜效果
2014/06/15 Javascript
javascript设置连续两次点击按钮时间间隔的方法
2014/10/28 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
2016/01/23 Javascript
js 自带的sort() 方法全面了解
2016/08/16 Javascript
AngularJS入门教程之路由机制ngRoute实例分析
2016/12/13 Javascript
NodeJS爬虫实例之糗事百科
2017/12/14 NodeJs
node.js中express模块创建服务器和http模块客户端发请求
2019/03/06 Javascript
JavaScript实现随机点名器实例详解
2019/05/07 Javascript
[04:10]DOTA2英雄梦之声_第11期_圣堂刺客
2014/06/21 DOTA
[01:03:51]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第三场
2018/04/09 DOTA
python实现文本去重且不打乱原本顺序
2016/01/26 Python
Python Flask 搭建微信小程序后台详解
2019/05/06 Python
Django中modelform组件实例用法总结
2020/02/10 Python
pycharm 激活码及使用方式的详细教程
2020/05/12 Python
详解python 支持向量机(SVM)算法
2020/09/18 Python
HTC VIVE美国官网:VR虚拟现实眼镜
2018/02/13 全球购物
澳大利亚窗帘商店:Curtain Wonderland
2019/12/01 全球购物
我们的节日清明节活动总结
2014/04/30 职场文书
让生命充满爱演讲稿
2014/05/10 职场文书
煤矿安全生产标语
2014/06/06 职场文书
2014年信贷员工作总结
2014/11/18 职场文书
2014年新农村建设工作总结
2014/12/01 职场文书
退货证明模板
2015/06/23 职场文书
springboot+VUE实现登录注册
2021/05/27 Vue.js
vue判断按钮是否可以点击
2022/04/09 Vue.js
MySQL去除密码登录告警的方法
2022/04/20 MySQL
MySQL事务的ACID特性以及并发问题方案
2022/07/15 MySQL