Как сделать чтобы слово можно было писать по разному (в разном регистре или с ошибками)?
Помогите разобраться. Как работает вот этот код :
opts = {
"Find" : ('Найти','найти','Найди','найди','Искать','искать','Поиск','поиск'),
"Add" : ('Добавить','добавить','Добавь','добавь','Добавляй','добавляй','Добавишь','добавишь'),
"Delete" : ('Удалить','удалить','Удали','удали','Убрать','убрать','Убери','убери'),
"Correct": ('Корректировать','корректировать','Коректировать','коректировать','Корректирровать','корректирровать',
'Коректирровать','коректирровать','Скорректируй','скорректируй','Скоректируй','скоректируй','скорректирруй',
'скорректирруй','скоректирруй','скоректирруй')
}
Объясните пожалуйста как с этим работать? Нужна ли для этого fuzzywuzzy?
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Тут пример определения команды по ее псевдонимам, используя fuzzywuzzy.
Убрал псевдонимы, что, по моему мнению, излишние, особенно, те что отличаются регистром первой буквы. Похожесть слов определяется score, например score = 100 -- все символы совпадают
# pip install fuzzywuzzy[speedup]
from fuzzywuzzy import process
OPTS = {
"Find" : ('найти', 'найди', 'искать', 'поиск'),
"Add" : ('добавить', 'добавь', 'добавляй', 'добавишь'),
"Delete" : ('удалить', 'удали', 'убрать', 'убери'),
"Correct": ('корректировать', 'скорректируй', 'скоректируй')
}
def select_command(text: str, min_score=80) -> str:
for command, aliases in OPTS.items():
score = process.extractOne(text, aliases)[1]
if score >= min_score:
return command
for text in ['найти', 'НАЙТИ', 'найДи', 'Наайди', 'удалЕ', 'убИри', 'коректирровать']:
print(select_command(text))
# Find
# Find
# Find
# Find
# Delete
# Delete
# Correct