python fuzzywuzzy模块模糊字符串匹配详细用法
github主页
导入:
>>>fromfuzzywuzzyimportfuzz >>>fromfuzzywuzzyimportprocess
1)
>>>fuzz.ratio("thisisatest","thisisatest!") out97 >>>fuzz.partial_ratio("thisisatest","thisisatest!") out100
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("fuzzywuzzywasabear","wuzzyfuzzywasabear") out100
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("fuzzywasabear","fuzzyfuzzywasabear") out100
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=["AtlantaFalcons","NewYorkJets","NewYorkGiants","DallasCowboys"] >>>process.extract("newyorkjets",choices,limit=2) [('NewYorkJets',100),('NewYorkGiants',78)] >>>process.extractOne("cowboys",choices) ("DallasCowboys",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的字符串取最长一个。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。