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 相关文章推荐
Tornado服务器中绑定域名、虚拟主机的方法
Aug 22 Python
讲解Python中运算符使用时的优先级
May 14 Python
安装ElasticSearch搜索工具并配置Python驱动的方法
Dec 22 Python
Python实现的桶排序算法示例
Nov 29 Python
用python实现百度翻译的示例代码
Mar 09 Python
解决Spyder中图片显示太小的问题
Apr 27 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
Jun 13 Python
python selenium 获取标签的属性值、内容、状态方法
Jun 22 Python
python 函数内部修改外部变量的方法
Dec 18 Python
Python中list循环遍历删除数据的正确方法
Sep 02 Python
python如何实现复制目录到指定目录
Feb 13 Python
Python学习之时间包使用教程详解
Mar 21 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版(1)
2006/10/09 PHP
php 获取select下拉列表框的值
2010/05/08 PHP
php自定义session示例分享
2014/04/22 PHP
Yii2实现log输出到file及database的方法
2016/11/12 PHP
Joomla框架实现字符串截取的方法示例
2017/07/18 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
2019/08/05 PHP
学习ExtJS TextField常用方法
2009/10/07 Javascript
常用Extjs工具:Extjs.util.Format使用方法
2012/03/22 Javascript
jQuery随便控制任意div隐藏的方法
2013/06/28 Javascript
jquery正则表达式验证(手机号、身份证号、中文名称)
2015/12/31 Javascript
javascript点击按钮实现隐藏显示切换效果
2016/02/03 Javascript
node.js 和HTML5开发本地桌面应用程序
2016/12/13 Javascript
vue-router跳转页面的方法
2017/02/09 Javascript
vue中element组件样式修改无效的解决方法
2018/02/03 Javascript
Javascript执行流程细节原理解析
2020/05/14 Javascript
uniapp微信小程序实现一个页面多个倒计时
2020/11/01 Javascript
使用python实现拉钩网上的FizzBuzzWhizz问题示例
2014/05/05 Python
Python使用Scrapy爬取妹子图
2015/05/28 Python
pycharm远程调试openstack代码
2017/11/21 Python
python 限制函数执行时间,自己实现timeout的实例
2019/01/12 Python
分享PyCharm的几个使用技巧
2019/11/10 Python
Pytorch evaluation每次运行结果不同的解决
2020/01/02 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
2020/02/24 Python
Pytorch使用PIL和Numpy将单张图片转为Pytorch张量方式
2020/05/25 Python
Django windows使用Apache实现部署流程解析
2020/10/12 Python
兰蔻加拿大官方网站:Lancome加拿大
2016/08/05 全球购物
Zatchels官网:英国剑桥包品牌
2021/01/12 全球购物
物流专业毕业生推荐信范文
2013/11/18 职场文书
社区国庆节活动方案
2014/02/05 职场文书
梅花魂教学反思
2014/04/25 职场文书
餐饮服务食品安全责任书
2014/07/25 职场文书
刑事和解协议书范本
2014/11/19 职场文书
离婚案件答辩状
2015/05/22 职场文书
Python 机器学习工具包SKlearn的安装与使用
2021/05/14 Python
根德5570型九灯四波段立体声收音机是电子管收音机的楷模 ? 再论5570
2022/04/05 无线电
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python