python fuzzywuzzy模块模糊字符串匹配详细用法

作者:sunyao_123 时间:2021-10-02 10:58:03 

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的字符串取最长一个。

来源:https://blog.csdn.net/sunyao_123/article/details/76942809

标签:python,fuzzywuzzy,字符串匹配
0
投稿

猜你喜欢

  • Golang 实现复制文件夹同时复制文件

    2024-02-09 10:57:26
  • Python3操作SQL Server数据库(实例讲解)

    2024-01-24 04:13:21
  • python掌握字符串只需这一篇就够了

    2023-01-09 03:39:10
  • 解决在Dreamweaver中不支持中文文件名的方法

    2010-09-02 12:35:00
  • Python第三方常用模块openpyxl的简单介绍

    2021-05-28 16:10:09
  • 浅谈微信小程序之官方UI框架we-ui使用教程

    2024-04-16 09:52:43
  • 写SQL语句的经验

    2009-04-13 16:02:00
  • 利用Python连接Oracle数据库的基本操作指南

    2024-01-20 05:10:30
  • 给应用部分的js代码设定一个统一的入口

    2024-05-05 09:15:59
  • JS中call/apply、arguments、undefined/null方法详解

    2024-04-19 11:01:31
  • Python数学建模StatsModels统计回归可视化示例详解

    2023-10-09 02:16:54
  • 关于SQL Server中bit类型字段增删查改的一些事

    2024-01-13 10:07:45
  • vue全局自定义指令-元素拖拽的实现代码

    2024-04-30 08:46:16
  • 一文弄懂MySQL索引创建原则

    2024-01-14 07:38:25
  • python 动态迁移solr数据过程解析

    2023-03-08 10:19:20
  • python 两种方法修改文件的创建时间、修改时间、访问时间

    2023-08-10 03:06:52
  • go语言Timer计时器的用法示例详解

    2024-04-27 15:39:38
  • 浅析SQL Server 2008企业级新特性

    2008-11-24 17:01:00
  • PHP 实现多服务器共享 SESSION 数据

    2023-11-19 12:43:24
  • 关于Pandas count()与values_count()的用法及区别

    2021-09-25 08:28:20
  • asp之家 网络编程 m.aspxhome.com