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 16 Python
Python字符串格式化输出方法分析
Apr 13 Python
python三方库之requests的快速上手
Mar 04 Python
python+selenium定时爬取丁香园的新型冠状病毒数据并制作出类似的地图(部署到云服务器)
Feb 09 Python
高考考python编程是真的吗
Jul 20 Python
Python绘图之二维图与三维图详解
Aug 04 Python
python爬虫爬取网页数据并解析数据
Sep 18 Python
Python threading模块condition原理及运行流程详解
Oct 05 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
Nov 26 Python
Python OpenCV快速入门教程
Apr 17 Python
如何在C++中调用Python
May 21 Python
Python机器学习之底层实现KNN
Jun 20 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生成EXCEL的东东
2006/10/09 PHP
PHP实现仿Google分页效果的分页函数
2015/07/29 PHP
PHP生成短网址的思路以及实现方法的详解
2019/03/25 PHP
jQuery 动画弹出窗体支持多种展现方式
2010/04/29 Javascript
根据对象的某一属性进行排序的js代码(如:name,age)
2010/08/10 Javascript
js工具方法弹出蒙版
2013/05/08 Javascript
jquery子元素过滤选择器使用示例
2013/06/24 Javascript
jquery实现图片随机排列的方法
2015/05/04 Javascript
jquery合并表格中相同文本的相邻单元格
2015/07/17 Javascript
Jquery中巧用Ajax的beforeSend方法
2016/01/20 Javascript
jQuery实现的导航动画效果(附demo源码)
2016/04/01 Javascript
JavaScript适配器模式详解
2017/10/19 Javascript
vue中设置、获取、删除cookie的方法
2018/09/21 Javascript
JavaScript Array对象使用方法解析
2019/09/24 Javascript
[06:13]DOTA2进化论(修改版)
2013/10/08 DOTA
python获取一组数据里最大值max函数用法实例
2015/05/26 Python
Python求算数平方根和约数的方法汇总
2016/03/09 Python
对pandas写入读取h5文件的方法详解
2018/12/28 Python
python实现数据分析与建模
2019/07/11 Python
Python Lambda函数使用总结详解
2019/12/11 Python
python、PyTorch图像读取与numpy转换实例
2020/01/13 Python
python入门之井字棋小游戏
2020/03/05 Python
python 基于opencv 实现一个鼠标绘图小程序
2020/12/11 Python
HTML5标签小集
2011/08/02 HTML / CSS
基于第一个PhoneGap(cordova)的应用详解
2013/05/03 HTML / CSS
科尔士百货公司官网:Kohl’s
2016/07/11 全球购物
Linux常见面试题
2016/10/04 面试题
大学生个人求职信范文
2013/09/21 职场文书
大学生就业推荐信范文
2013/11/29 职场文书
刊首寄语大全
2014/04/11 职场文书
优秀工会工作者事迹材料
2014/06/02 职场文书
小学校园文化建设汇报材料
2014/08/19 职场文书
人事专员岗位职责
2015/02/03 职场文书
档案工作个人总结
2015/03/03 职场文书
2015年车间安全管理工作总结
2015/05/13 职场文书
Python通过loop.run_in_executor执行同步代码 同步变为异步
2022/04/11 Python