首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比FuzzyWuzzy更好的方法?

比FuzzyWuzzy更好的方法?
EN

Stack Overflow用户
提问于 2018-07-31 23:56:34
回答 2查看 3.2K关注 0票数 7

我在fuzzywuzzy得到了一个没有期望的好结果。如果中间有一个额外的词,由于levenshtein的差异,分数会更低。

示例:

代码语言:javascript
复制
from fuzzywuzzy import fuzz

score = fuzz.ratio('DANIEL CARTWRIGHT', 'DANIEL WILLIAM CARTWRIGHT')
print(score)
score = fuzz.ratio('DANIEL CARTWRIGHT', 'DAVID CARTWRIGHT')
print(score)

score = fuzz.partial_ratio('DANIEL CARTWRIGHT', 'DANIEL WILLIAM CARTWRIGHT')
print(score)
score = fuzz.partial_ratio('DANIEL CARTWRIGHT', 'DAVID CARTWRIGHT')
print(score)

结果: 81 85 71 81

我正在寻找第一双(丹尼尔对丹尼尔威廉)比第二对(丹尼尔对大卫)更好的匹配。

这里有比fuzzywuzzy更好的方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-01 00:16:28

对于您的示例,可以使用token_set_ratio。代码doc表示,它采用令牌与剩余令牌的交集的比率。

代码语言:javascript
复制
from fuzzywuzzy import fuzz

score = fuzz.token_set_ratio('DANIEL CARTWRIGHT', 'DANIEL WILLIAM CARTWRIGHT')
print(score)
score = fuzz.token_set_ratio('DANIEL CARTWRIGHT', 'DAVID CARTWRIGHT')
print(score)

结果:

代码语言:javascript
复制
100
85
票数 9
EN

Stack Overflow用户

发布于 2021-05-30 02:17:42

在使用FuzzyWuzzy将一个名称列表与另一个名称列表进行比较以识别列表之间的匹配时,我遇到了类似的挑战。FuzzyWuzzy token_set_ratio的得分手不适合我,因为用你的例子,把“丹尼尔·卡特赖特”和“丹尼尔·威廉·卡特赖特”和“丹尼尔·威廉·卡特赖特”(3字中的2对3字的身份匹配)进行比较,都能获得100%的分数。对我来说,三个字的匹配比三个中的两个要高。

最后我用了一种类似于文字的方法。下面的代码中的算法将多个单词名称转换为不同的单词列表(令牌),并对一个列表中的单词与另一个列表中的单词进行匹配计数,并将计数规范化为每个列表中的单词数。因为True =1和False = 0,所以通过测试元素是否在list中的sum()可以很好地工作于count the elements of one list in another list

所有单词的身份匹配得分为1 (100%)。比较的评分结果如下:

  • DANIEL CARTWRIGHT诉DANIEL WILLIAM CARTWRIGHT = (2/2 + 2/3)/2 = (5/3)/2 = 0.83
  • DANIEL CARTWRIGHT诉DAVID CARTWRIGHT = (1/2 + 1/2)/2 = 1/2 = 0.5 注意,我的方法忽略了词序,这在我的情况下是不需要的。进口s1 =‘’s2 =‘’,‘’def myScore(lst1,lst2):#计算分数用于比较单词列表c= sum(el in lst1 in lst2) if (len(lst1) == 0或len(lst2) == 0):retval = 0.0其他: retval = 0.5 * (c/len(lst1) + c/len(lst2))返回retval tokens1 = nltk.word_tokenize(s1) in s2: tokens2 = nltk.word_tokenize(s) score = myScore(tokens1,( tokens2)打印(‘vs. '.join(s1,s),":",str(分数)) 输出: 丹尼尔·卡特赖特诉丹尼尔·威廉·卡特赖特: 0.8333333333333333丹尼尔·卡特赖特对大卫·卡特赖特: 0.5
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51623595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档