当我尝试使用带外字符的简单Fuzzywuzzy表达式时,使用process.extractOne方法会得到错误的结果(我尝试过使用或不使用u):
>>> choices= [u"הלכות חנוכה",u"הלכות פורים",u"הלכות סוכה"]
>>> process.extractOne("הלכות סוכה", choices)
(u'\u05d4\u05dc\u05db\u05d5\u05ea \u05d7\u05e0\u05d5\u05db\u05d4', 0)
但是,对于fuzz.ratio,它运行平稳:
>>> fuzz.ratio("הלכות ראש השנה", "הלכות תעניות")
69
相同的代码非常适合常规字符:
>>> choices= ['this','that','those']
>>> process.extractOne("these", choices)
('those', 80)
可能是什么问题?
最佳答案
在fuzz.ratio
参数中传递scorer=
,然后在要匹配的字符串前面添加u。
下面的作品:choices= [u"הלכות חנוכה",u"הלכות פורים",u"הלכות סוכה"]process.extractOne(u"הלכות סוכה", choices, scorer=fuzz.ratio)
(u'\ u05d4 \ u05dc \ u05db \ u05d5 \ u05ea \ u05e1 \ u05d5 \ u05db \ u05d4',100)
其他人也给出相同的分数:choices= [u"הלכות חנוכה",u"הלכות פורים",u"הלכות סוכה"]process.extract(u"הלכות סוכה", choices, scorer=fuzz.ratio)
[(u'\ u05d4 \ u05dc \ u05db \ u05d5 \ u05ea \ u05e1 \ u05d5 \ u05db \ u05d4',100),
(u'\ u05d4 \ u05dc \ u05db \ u05d5 \ u05ea \ u05d7 \ u05e0 \ u05d5 \ u05db \ u05d4',86),
(u'\ u05d4 \ u05dc \ u05db \ u05d5 \ u05ea \ u05e4 \ u05d5 \ u05e8 \ u05d9 \ u05dd',67)]
Fuzzywuzzy版本:Fuzzywuzzy 0.7.0和Python 2.7x