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 过滤字符串的技巧,map与itertools.imap
Sep 06 Python
用Python实现换行符转换的脚本的教程
Apr 16 Python
Python找出list中最常出现元素的方法
Jun 14 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
May 29 Python
使用python实现http及ftp服务进行数据传输的方法
Oct 26 Python
python样条插值的实现代码
Dec 17 Python
详解Pandas之容易让人混淆的行选择和列选择
Jul 10 Python
python编写计算器功能
Oct 25 Python
使用pyshp包进行shapefile文件修改的例子
Dec 06 Python
Python实现画图软件功能方法详解
Jul 28 Python
通过实例解析Python文件操作实现步骤
Sep 21 Python
python中使用.py配置文件的方法详解
Nov 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
DIY一个适配电脑声卡的动圈话筒放大器
2021/03/02 无线电
PHP利用header跳转失效的解决方法
2014/10/24 PHP
Windows7下的php环境配置教程
2015/02/28 PHP
PHP设计模式(一)工厂模式Factory实例详解【创建型】
2020/05/02 PHP
Javascript实现滑块滑动改变值的实现代码
2013/04/12 Javascript
js随机颜色代码的多种实现方式
2013/04/23 Javascript
JavaScript 模拟类机制及私有变量的方法及思路
2013/07/10 Javascript
利用jquery写的左右轮播图特效
2014/02/12 Javascript
深入理解JavaScript系列(17):面向对象编程之概论详细介绍
2015/03/04 Javascript
cookie的secure属性详解
2015/04/08 Javascript
javascript显示中文日期的方法
2015/06/18 Javascript
jQuery右下角悬浮广告实例
2016/10/17 Javascript
对类Vue的MVVM前端库的实现代码
2018/09/07 Javascript
Javascript confirm多种使用方法解析
2020/09/25 Javascript
python中stdout输出不缓存的设置方法
2014/05/29 Python
快速入门python学习笔记
2017/12/06 Python
浅谈Python黑帽子取代netcat
2018/02/10 Python
Python文件路径名的操作方法
2019/10/30 Python
python 检查数据中是否有缺失值,删除缺失值的方式
2019/12/02 Python
Python如何实现定时器功能
2020/05/28 Python
如何让pre和textarea等HTML元素去掉滚动条自动换行自适应文本内容高度
2019/08/01 HTML / CSS
Crocs卡骆驰洞洞鞋日本官方网站:Crocs日本
2016/08/25 全球购物
汽车电子与维修专业大学生求职信
2013/09/28 职场文书
物业电工岗位职责
2013/11/20 职场文书
幼儿园中班新学期寄语
2014/01/18 职场文书
优秀班集体获奖感言
2014/02/03 职场文书
奥巴马英文演讲稿
2014/05/15 职场文书
护士找工作求职信
2014/07/02 职场文书
关于读书的演讲稿600字
2014/08/27 职场文书
前台接待员岗位职责
2015/04/15 职场文书
关于感恩的素材句子(38句)
2019/11/11 职场文书
Pytorch 使用tensor特定条件判断索引
2021/04/08 Python
Python制作春联的示例代码
2022/01/22 Python
css filter和getUserMedia的联合使用
2022/02/24 HTML / CSS
《艾尔登法环》Boss腐烂树灵很有可能是《黑暗之魂3》的一个废案
2022/04/11 其他游戏
面试官问我Mysql的存储引擎了解多少
2022/08/05 MySQL