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中文编码那些事
Jun 25 Python
利用python代码写的12306订票代码
Dec 20 Python
python使用matplotlib画饼状图
Sep 25 Python
使用Scrapy爬取动态数据
Oct 21 Python
解决Python3 被PHP程序调用执行返回乱码的问题
Feb 16 Python
python实现按首字母分类查找功能
Oct 31 Python
Windows上安装tensorflow  详细教程(图文详解)
Feb 04 Python
Python读取yaml文件的详细教程
Jul 21 Python
浅析Python 字符编码与文件处理
Sep 24 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
Nov 24 Python
深入理解python多线程编程
Apr 18 Python
Python关于OS文件目录处理的实例分享
May 23 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使用curl出现Expect:100-continue解决方法
2015/03/03 PHP
支持中文、字母、数字的PHP验证码
2015/05/04 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
php使用curl获取header检测开启GZip压缩的方法
2018/08/15 PHP
thinkPHP5.0框架事务处理操作简单示例
2018/09/07 PHP
JS JavaScript获取Url参数,src属性参数
2021/03/09 Javascript
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
document.onreadystatechange事件的用法分析
2009/10/17 Javascript
JavaScript 开发规范要求(图文并茂)
2010/06/11 Javascript
jquery如何把数组变为字符串传到服务端并处理
2014/04/30 Javascript
jQuery实现表格展开与折叠的方法
2015/05/04 Javascript
javascript动画算法实例分析
2015/07/31 Javascript
基于Bootstrap实现下拉菜单项和表单导航条(两个菜单项,一个下拉菜单和登录表单导航条)
2016/07/22 Javascript
详解nodejs微信公众号开发——6.自定义菜单
2017/04/13 NodeJs
JavaScript实现反转字符串的方法详解
2017/04/27 Javascript
vue2.0 父组件给子组件传递数据的方法
2018/01/15 Javascript
解决npm安装Electron缓慢网络超时导致失败的问题
2018/02/06 Javascript
详解vue 路由跳转四种方式 (带参数)
2019/04/28 Javascript
vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题
2020/04/14 Javascript
Vue 基于 vuedraggable 实现选中、拖拽、排序效果
2020/05/18 Javascript
Python+tkinter使用40行代码实现计算器功能
2018/01/30 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
2019/04/04 Python
Django 对象关系映射(ORM)源码详解
2019/08/06 Python
浅谈python中统计计数的几种方法和Counter详解
2019/11/07 Python
Python用类实现扑克牌发牌的示例代码
2020/06/01 Python
Python字符串三种格式化输出
2020/09/17 Python
Scrapy项目实战之爬取某社区用户详情
2020/09/17 Python
ASOS亚洲:ASOS Asia
2018/03/04 全球购物
制药工程专业应届生求职信
2013/09/24 职场文书
《桃花心木》教学反思
2014/02/17 职场文书
中国好声音广告词
2014/03/18 职场文书
工作分析计划书
2014/04/30 职场文书
公司员工活动策划方案
2014/08/20 职场文书
商超业务员岗位职责
2015/02/13 职场文书
2015年政治教研组工作总结
2015/07/22 职场文书
Nginx进程调度问题详解
2021/09/25 Servers