欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-11-30 09:57:46
导入: >>> from fuzzywuzzy import fuzz >>> from fuzzywuzzy impo...

导入:

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。