2016-08-23 5 views
0

При попытке простого выражения fuzzywuzzy с иностранными символами, я получаю ошибочные результаты, используя метод process.extractOne (я пробовал и без и-):Python: Fuzzywuzzy не работает для иностранных символов

>>> 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) 

В чем может быть проблема?

ответ

0

Передача fuzz.ratio как в аргументе scorer= и добавить u перед строкой, для которой вы пытаетесь сопоставить.

Ниже работы:

choices= [u"הלכות חנוכה",u"הלכות פורים",u"הלכות סוכה"] process.extractOne(u"הלכות סוכה", choices, scorer=fuzz.ratio)

(и '\ u05d4 \ u05dc \ u05db \ u05d5 \ u05ea \ u05e1 \ u05d5 \ u05db \ u05d4', 100)

И другие дают то же самое а также оценка:

choices= [u"הלכות חנוכה",u"הלכות פורים",u"הלכות סוכה"] process.extract(u"הלכות סוכה", choices, scorer=fuzz.ratio)

[(и '\ 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 версия: 0.7.0 fuzzywuzzy & Python 2.7x