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实现在pickling的时候压缩的方法
Sep 25 Python
举例讲解Python中的身份运算符的使用方法
Oct 13 Python
python3设计模式之简单工厂模式
Oct 17 Python
Python学习笔记之if语句的使用示例
Oct 23 Python
Python断言assert的用法代码解析
Feb 03 Python
对Python subprocess.Popen子进程管道阻塞详解
Oct 29 Python
python 发送和接收ActiveMQ消息的实例
Jan 30 Python
Python3 翻转二叉树的实现
Sep 30 Python
Pytorch中的VGG实现修改最后一层FC
Jan 15 Python
使用IPython或Spyder将省略号表示的内容完整输出
Apr 20 Python
Python 将 QQ 好友头像生成祝福语的实现代码
May 03 Python
python 爬虫爬取京东ps4售卖情况
Dec 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伪造referer突破网盘禁止外连的代码
2008/06/15 PHP
php程序员应具有的7种能力小结
2014/11/27 PHP
PHP实现简单的新闻发布系统实例
2015/07/28 PHP
php数组分页实现方法
2016/04/30 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
2018/09/05 PHP
jquery.boxy插件的iframe扩展代码
2010/07/02 Javascript
纯文字版返回顶端的js代码
2013/08/01 Javascript
JS取得绝对路径的实现代码
2015/01/16 Javascript
JS 对象属性相关(检查属性、枚举属性等)
2015/04/05 Javascript
Javascript通过overflow控制列表闭合与展开的方法
2015/05/15 Javascript
json+jQuery实现的无限级树形菜单效果代码
2015/08/27 Javascript
jquery动态遍历Json对象的属性和值的方法
2016/07/27 Javascript
Angular学习笔记之angular的$filter服务浅析
2016/11/12 Javascript
解决Vue编译时写在style中的路径问题
2017/09/21 Javascript
解决vue 表格table列求和的问题
2019/11/06 Javascript
python定时采集摄像头图像上传ftp服务器功能实现
2013/12/23 Python
python清除字符串里非字母字符的方法
2015/07/02 Python
简介Django框架中可使用的各类缓存
2015/07/23 Python
python 打印出所有的对象/模块的属性(实例代码)
2016/09/11 Python
利用numpy实现一、二维数组的拼接简单代码示例
2017/12/15 Python
Python实现名片管理系统
2020/02/14 Python
jupyter notebook 实现matplotlib图动态刷新
2020/04/22 Python
python 抓取知乎指定回答下视频的方法
2020/07/09 Python
Python实现自动装机功能案例分析
2020/10/22 Python
phpquery中文手册
2021/03/18 PHP
英国老牌潮鞋店:Offspring
2019/08/19 全球购物
入党自我鉴定范文
2013/10/04 职场文书
员工三分钟演讲稿
2014/08/19 职场文书
励志广播稿300字(5篇)
2014/09/15 职场文书
乡镇党委书记第三阶段个人整改措施
2014/09/16 职场文书
农村党员学习党的群众路线教育实践活动心得体会
2014/11/04 职场文书
教师个人师德工作总结2015
2015/05/12 职场文书
CSS3实现的侧滑菜单
2021/04/27 HTML / CSS
vue中利用mqtt服务端实现即时通讯的步骤记录
2021/07/01 Vue.js
python编程简单几行代码实现视频转换Gif示例
2021/10/05 Python
SQL语句中EXISTS的详细用法大全
2022/06/25 MySQL