Как сделать чтобы слово можно было писать по разному (в разном регистре или с ошибками)?

Помогите разобраться. Как работает вот этот код :

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
→ Ссылка