Мне нужно написать решение для определенного требования, и я хотел бы знать, знаком ли кто-либо с готовой библиотекой, которая может этого достичь, или может направить меня в лучшую сторону. Описание:
Пользователь вводит слово, которое должно быть одним из нескольких фиксированных параметров (я держу параметры в списке). Я знаю, что ввод должен быть в списке в списке, но так как это ввод пользователя, он / она, возможно, допустил ошибку. Я ищу алгоритм, который скажет мне, какое слово наиболее вероятно имел в виду пользователь. У меня нет контекста, и я не могу заставить пользователя выбирать из списка (то есть он должен иметь возможность вводить слово свободно и вручную).
Например, скажем, в списке есть слова «вода», «четверть», «пиво», «свекла», «ад», «привет» и «аардварк».
Решение должно учитывать различные типы «обычных» ошибок:
- Оперативные опечатки (например, удвоение символов, удаление символов и т. Д.)
- Опечатки рядом с символами клавиатуры (например, "qater" для "воды")
- опечатки на неродном английском языке (например, "quater" для "четверти")
- И так далее ...
Очевидное решение состоит в том, чтобы сравнивать букву за буквой и давать «веса штрафа» для каждой отдельной буквы, дополнительной буквы и пропущенной буквы. Но это решение игнорирует тысячи «стандартных» ошибок, которые, я уверен, где-то перечислены. Я уверен, что есть эвристики, которые имеют дело со всеми случаями, как конкретными, так и общими, возможно, с использованием большой базы данных стандартных несоответствий (я открыт для решений с большим объемом данных).
Я пишу на Python, но считаю этот вопрос независимым от языка.
Любые рекомендации / мысли?