Есть два аргумента force_ascii
и full_process
при работе с fuzz.WRatio
в нечеткой форме, которые по умолчанию истинны. Оба они используются для предварительной обработки строк (force_ascii используется только тогда, когда full_process также имеет значение True, а в противном случае игнорируется).
1) При использовании force_ascii=False, full_process=False
строки не изменяются до сопоставления с ними, поэтому, например, имеет значение верхний / нижний регистр .
2) При использовании force_ascii=False, full_process=True
Все не буквенно-цифровые c символы в строках заменяются пробелом, строки переводятся в нижний регистр, а пробелы с начала и конца обрезаются. Так, например, "Mäne!" -> "Mäne" -> "mäne" -> "mäne"
2) При использовании force_ascii=True, full_process=True
Это делает то же, что и 2), но заранее удаляет все символы, отличные от ascii. Так, например, "Mäne!" -> "Мне!" -> "Mne" -> "mne" -> "mne"
Я не думаю, что это хорошо, что force_ascii
по умолчанию имеет значение true, так как я лично не хочу, чтобы такое поведение В 99% случаев, но большинство людей, использующих нечеткую логику, даже не подозревают об этом поведении. Кроме того, похоже, что у него есть ошибка, так как, например,
> 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