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关闭windows进程的方法
Apr 18 Python
Python3.x版本中新的字符串格式化方法
Apr 24 Python
python实现简单的socket server实例
Apr 29 Python
Python使用正则表达式实现文本替换的方法
Apr 18 Python
python遍历序列enumerate函数浅析
Oct 17 Python
python3如何将docx转换成pdf文件
Mar 23 Python
Pycharm之快速定位到某行快捷键的方法
Jan 20 Python
Python里字典的基本用法(包括嵌套字典)
Feb 27 Python
python 采用paramiko 远程执行命令及报错解决
Oct 21 Python
python实现全排列代码(回溯、深度优先搜索)
Feb 26 Python
Python中的xlrd模块使用整理
Jun 15 Python
一篇文章弄懂Python关键字、标识符和变量
Jul 15 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 MYSQL中插入当前时间
2008/04/06 PHP
php计算整个目录大小的方法
2015/06/19 PHP
Laravel中使用Queue的最基本操作教程
2017/12/27 PHP
PHP内置函数生成随机数实例
2019/01/18 PHP
向大师们学习Javascript(视频与PPT)
2009/12/27 Javascript
jQuery 学习入门篇附实例代码
2010/03/16 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
2014/03/25 Javascript
Jquery实现兼容各大浏览器的Enter回车切换输入焦点的方法
2014/09/01 Javascript
基于JQuery的购物车添加删除以及结算功能示例
2017/03/08 Javascript
Vue2.0父组件与子组件之间的事件发射与接收实例代码
2017/09/19 Javascript
React 使用browserHistory项目访问404问题解决
2018/06/01 Javascript
vue cli3.0 引入eslint 结合vscode使用
2019/05/27 Javascript
vue中uni-app 实现小程序登录注册功能
2019/10/12 Javascript
uni-app微信小程序登录并使用vuex存储登录状态的思路详解
2019/11/04 Javascript
WEB前端性能优化的7大手段详解
2020/02/04 Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
2020/07/18 Javascript
使用python的chardet库获得文件编码并修改编码
2014/01/22 Python
Python中Collections模块的Counter容器类使用教程
2016/05/31 Python
元组列表字典(莫烦python基础)
2019/04/03 Python
如何更优雅地写python代码
2019/07/02 Python
python笔记_将循环内容在一行输出的方法
2019/08/08 Python
使用pyecharts生成Echarts网页的实例
2019/08/12 Python
Python实现快速排序的方法详解
2019/10/25 Python
浅谈对pytroch中torch.autograd.backward的思考
2019/12/27 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
2020/03/28 Python
Python -m参数原理及使用方法解析
2020/08/21 Python
浅析NumPy 切片和索引
2020/09/02 Python
纯CSS3制作页面切换效果的实例代码
2019/05/30 HTML / CSS
财务总经理岗位职责
2014/02/16 职场文书
初中班主任寄语
2014/04/04 职场文书
2014年党员自我剖析材料
2014/10/07 职场文书
作风转变年心得体会
2014/10/22 职场文书
一次性工伤赔偿协议书范本
2014/11/25 职场文书
2015年健康教育工作总结
2015/04/10 职场文书
如何获取numpy array前N个最大值
2021/05/14 Python
Python Django框架介绍之模板标签及模板的继承
2021/05/27 Python