fuzzy wuzzy WRatio для обнаружения верхнего регистра

Мне нужна помощь в выяснении причин

fuzz.WRatio('Māne', 'mane', force_ascii=True) => 75%

а также

fuzz.WRatio('Māne', 'Mane', force_ascii=True) => 75%

Я бы ожидал, что параметр force_ascii обеспечит большую точность. Спасибо.


person rearThing    schedule 06.05.2020    source источник


Ответы (1)


Есть два аргумента force_ascii и full_process при работе с fuzz.WRatio в fuzzywuzzy, оба по умолчанию имеют значение True. Оба они используются для предварительной обработки строк (force_ascii используется только тогда, когда full_process имеет значение True, а в противном случае игнорируется).

1) При использовании force_ascii=False, full_process=False строки не изменяются до их сопоставления, поэтому, например. верхний/нижний регистр имеет значение.

2) При использовании force_ascii=False, full_process=True Все не буквенно-цифровые символы в строках заменяются пробелом, строки переводятся в нижний регистр, а пробелы с начала и конца обрезаются. Так например "Мэнэ!" -> «Мэнэ» -> «Мэнэ» -> «Мэнэ»

2) При использовании force_ascii=True, full_process=True Это делает то же самое, что и 2), но заранее удаляет все символы, отличные от ascii. Так например "Мэнэ!" -> "Мне!" -> «Мне» -> «Мне» -> «Мне»

Я действительно не думаю, что это хорошо, что force_ascii по умолчанию имеет значение true, так как лично я не очень хочу такого поведения в 99% случаев, но большинство людей, использующих fuzzywuzzy, даже не подозревают об этом поведении. Помимо этого, похоже, есть ошибка, так как, например,

> utils.full_process("ā", force_ascii=True)
'ā'

в то время как это явно не символ ascii и поэтому должен возвращать пустую строку.

В вашем случае, когда вы хотите, чтобы он учитывал любую разницу между двумя строками, вы должны позвонить

> fuzz.WRatio('Māne', 'mane', full_process=False)
50
> fuzz.WRatio('Māne', 'Mane', full_process=False)
75
person maxbachmann    schedule 07.05.2020
comment
Я понял ваш ответ, но не понимаю всех нюансов модуля. Например, fuzz.WRatio('Mane', 'manēre', full_process=False) = 60, но fuzz.WRatio('Mane', 'manēre', full_process=False) = 50. Не больше ли расстояние в первом сравнении? , таким образом оценка должна быть ниже? Есть ли документация для непрофессионала помимо самого кода? Это, пожалуй, другой вопрос. Спасибо. - person rearThing; 07.05.2020
comment
не могли бы вы задать второй вопрос об этом? Причина этого не имеет ничего общего с предварительной обработкой - person maxbachmann; 07.05.2020