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 创建子进程模块subprocess详解
Apr 08 Python
python获取指定路径下所有指定后缀文件的方法
May 26 Python
Python sqlite3事务处理方法实例分析
Jun 19 Python
Python2.7下安装Scrapy框架步骤教程
Dec 22 Python
python3中函数参数的四种简单用法
Jul 09 Python
python已协程方式处理任务实现过程
Dec 27 Python
Python字典深浅拷贝与循环方式方法详解
Feb 09 Python
tensorflow保持每次训练结果一致的简单实现
Feb 17 Python
python3 实现口罩抽签的功能
Mar 11 Python
完美解决ARIMA模型中plot_acf画不出图的问题
Jun 04 Python
最新Python idle下载、安装与使用教程图文详解
Nov 28 Python
python opencv检测直线 cv2.HoughLinesP的实现
Jun 18 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实现框架(一)
2006/10/09 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
2016/02/16 PHP
Yii中特殊行为ActionFilter的使用方法示例
2020/10/18 PHP
jQuery bind事件使用详解
2011/05/05 Javascript
Extjs单独定义各组件的实例代码
2013/06/25 Javascript
使用javascript做的一个随机点名程序
2014/02/13 Javascript
jquery easyui 对于开始时间小于结束时间的判断示例
2014/03/22 Javascript
深入理解JavaScript系列(35):设计模式之迭代器模式详解
2015/03/03 Javascript
jQuery实现带滑动条的菜单效果代码
2015/08/26 Javascript
详解javascript函数的参数
2015/11/10 Javascript
node.js实现端口转发
2016/04/14 Javascript
JSON 的正确用法探讨:Pyhong、MongoDB、JavaScript与Ajax
2016/05/15 Javascript
vue将对象新增的属性添加到检测序列的方法
2018/02/24 Javascript
vue cli构建的项目中请求代理与项目打包问题
2018/02/26 Javascript
Vue中CSS动画原理的实现
2019/02/13 Javascript
Vue使用zTree插件封装树组件操作示例
2019/04/25 Javascript
利用Python如何实现一个小说网站雏形
2018/11/23 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
2018/11/29 Python
配置python的编程环境之Anaconda + VSCode的教程
2020/03/29 Python
python requests包的request()函数中的参数-params和data的区别介绍
2020/05/05 Python
学习python需要有编程基础吗
2020/06/02 Python
浅谈keras中的目标函数和优化函数MSE用法
2020/06/10 Python
CSS3 选择器 伪类选择器介绍
2012/01/21 HTML / CSS
html5与css3小应用
2013/04/03 HTML / CSS
HTML5中使用postMessage实现两个网页间传递数据
2016/06/22 HTML / CSS
Myprotein芬兰官网:欧洲第一运动营养品牌
2019/05/05 全球购物
幼儿园消防安全制度
2014/01/26 职场文书
对祖国的寄语大全
2014/04/11 职场文书
保证书格式范文
2014/04/28 职场文书
五好关工委申报材料
2014/05/31 职场文书
学生检讨书范文
2015/01/27 职场文书
导游欢送词
2015/01/31 职场文书
golang中的空slice案例
2021/04/27 Golang
利用Python判断你的密码难度等级
2021/06/02 Python
SpringBoot 整合mongoDB并自定义连接池的示例代码
2022/02/28 MongoDB
Mysql的Table doesn't exist问题及解决
2022/12/24 MySQL