fuzzy wuzzy WRatio для определения верхнего регистра - PullRequest
0 голосов
/ 06 мая 2020

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

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

, а также

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

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

1 Ответ

1 голос
/ 07 мая 2020

Есть два аргумента 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
...