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的lambda匿名函数的简单介绍
Apr 25 Python
python统计字符串中指定字符出现次数的方法
Apr 04 Python
Python的消息队列包SnakeMQ使用初探
Jun 29 Python
对python sklearn one-hot编码详解
Jul 10 Python
python之mock模块基本使用方法详解
Jun 27 Python
通过PHP与Python代码对比的语法差异详解
Jul 10 Python
python 爬取学信网登录页面的例子
Aug 13 Python
Flask中endpoint的理解(小结)
Dec 11 Python
Python统计时间内的并发数代码实例
Dec 28 Python
Python random库使用方法及异常处理方案
Mar 02 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
May 24 Python
Python2手动安装更新pip过程实例解析
Jul 16 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
分享一个Laravel好用的Cache宏
2015/03/02 PHP
关于PHP 如何用 curl 读取 HTTP chunked 数据
2016/02/26 PHP
php实现文件与16进制相互转换的方法示例
2017/02/16 PHP
PHP实现微信图片上传到服务器的方法示例
2017/06/29 PHP
利用js的Node遍历找到repeater的一个字段实例介绍
2013/04/25 Javascript
Javascript验证方法大全
2015/09/21 Javascript
JS实现常见的TAB、弹出层效果(TAB标签,斑马线,遮罩层等)
2015/10/08 Javascript
JavaScript面试开发常用的知识点总结
2016/08/08 Javascript
JS动态的把左边列表添加到右边的实现代码(可上下移动)
2016/11/17 Javascript
如何学JavaScript?前辈的经验之谈
2016/12/28 Javascript
jQuery遮罩层实例讲解
2017/05/11 jQuery
js实现自定义右键菜单
2020/05/18 Javascript
vue中渲染对象中属性时显示未定义的解决
2020/07/31 Javascript
vue-cli4.0多环境配置变量与模式详解
2020/12/30 Vue.js
[01:04:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第二场 1月31日
2021/03/11 DOTA
python 判断自定义对象类型
2009/03/21 Python
浅谈django中的认证与登录
2016/10/31 Python
Python使用微信SDK实现的微信支付功能示例
2017/06/30 Python
python实现图片处理和特征提取详解
2017/11/13 Python
python清除字符串中间空格的实例讲解
2018/05/11 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
如何通过python实现人脸识别验证
2020/01/17 Python
Python应用自动化部署工具Fabric原理及使用解析
2020/11/30 Python
印尼最大的婴儿用品购物网站:Orami
2017/09/28 全球购物
Speedo速比涛法国官方网站:泳衣、泳镜、泳帽、泳裤
2019/07/30 全球购物
完美实现CSS垂直居中的11种方法
2021/03/27 HTML / CSS
销售代表求职自荐信
2013/10/01 职场文书
教师师德演讲稿
2014/05/06 职场文书
2015新年联欢晚会开场白
2014/12/14 职场文书
物业工程部经理岗位职责
2015/04/09 职场文书
装修公司工程部经理岗位职责
2015/04/09 职场文书
士兵突击观后感
2015/06/16 职场文书
婚宴致辞
2015/07/28 职场文书
《月光曲》教学反思
2016/02/16 职场文书
2016年精神文明建设先进个人事迹材料
2016/02/29 职场文书
MYSQL如何查看操作日志详解
2022/05/30 MySQL