Если нет необходимости также хранить все неправильно введенные слова, я бы посоветовал использовать двухэтапный подход для этой задачи.
1.) Построить набор, содержащий хэши всех допустимых слов (не включая опечатки)).Так что, вероятно, мы говорим здесь о приблизительно 10.000 записях, которые все еще должны позволять довольно быстрые поиски с двоичным поиском.Если хеш слова найден в наборе, он набран правильно.
2.) Если хеш слова не найден в наборе, слово, вероятно, неправильно введено.Поэтому рассчитайте расстояние Дамерау-Левенштейна между словом и всеми известными словами, чтобы выяснить, что мог значить пользователь.Чтобы добиться некоторой производительности, измените алгоритм DL, чтобы прервать вычисление, если расстояние превышает допустимый порог в 2 опечатки.