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 MySQLdb Linux下安装笔记
May 09 Python
详解Python设计模式编程中观察者模式与策略模式的运用
Mar 02 Python
深入理解Python对Json的解析
Feb 14 Python
Python实现Linux的find命令实例分享
Jun 04 Python
Python实现翻转数组功能示例
Jan 12 Python
DataFrame 将某列数据转为数组的方法
Apr 13 Python
Python 判断文件或目录是否存在的实例代码
Jul 19 Python
使用python进行广告点击率的预测的实现
Jul 04 Python
Django多数据库的实现过程详解
Aug 01 Python
Python之关于类变量的两种赋值区别详解
Mar 12 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
Mar 03 Python
Python实现byte转integer
Jun 03 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实现单链表的实例代码
2013/03/22 PHP
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
完善CodeIgniter在IDE中代码提示功能的方法
2014/07/19 PHP
PHP控制前台弹出对话框的实现方法
2016/08/21 PHP
基于jQuery替换table中的内容并显示进度条的代码
2011/08/02 Javascript
ie6下png图片背景不透明的解决办法使用js实现
2013/01/11 Javascript
javascript中不等于的代码是什么怎么写
2013/12/29 Javascript
浅谈JS日期(Date)处理函数
2014/12/07 Javascript
jQuery实现企业网站横幅焦点图切换功能实例
2015/04/30 Javascript
JavaScript正则表达式exec/g实现多次循环用法示例
2017/01/17 Javascript
使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)
2017/03/21 jQuery
Vue.extend构造器的详解
2017/07/17 Javascript
JS/HTML5游戏常用算法之碰撞检测 地图格子算法实例详解
2018/12/12 Javascript
详解Vue用cmd创建项目
2019/02/12 Javascript
详解从vue-loader源码分析CSS Scoped的实现
2019/09/23 Javascript
python实现划词翻译
2020/04/23 Python
python在多玩图片上下载妹子图的实现代码
2013/08/13 Python
Tornado Web服务器多进程启动的2个方法
2014/08/04 Python
Python中subprocess的简单使用示例
2015/07/28 Python
python如何实现int函数的方法示例
2018/02/19 Python
TensorFlow实现RNN循环神经网络
2018/02/28 Python
对dataframe进行列相加,行相加的实例
2018/06/08 Python
Python两台电脑实现TCP通信的方法示例
2019/05/06 Python
Flask框架请求钩子与request请求对象用法实例分析
2019/11/07 Python
python离线安装外部依赖包的实现
2020/02/13 Python
python实现图像随机裁剪的示例代码
2020/12/10 Python
python 模拟登录B站的示例代码
2020/12/15 Python
设计师家具购买和委托在线市场:Viyet
2016/11/16 全球购物
联想马亚西亚官方网站:Lenovo Malaysia
2018/09/19 全球购物
个人自我评价范文
2014/02/05 职场文书
餐厅周年庆活动方案
2014/08/25 职场文书
科学发展观演讲稿
2014/09/11 职场文书
党的群众路线整改落实情况汇报
2014/10/28 职场文书
遗愿清单观后感
2015/06/09 职场文书
班主任远程培训研修日志
2015/11/13 职场文书
2016教师党员学习心得体会
2016/01/21 职场文书