当我尝试使用带外字符的简单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

10-07 18:25