(готовое решение)
Я что-то закопался с подробной статьей про поиск похожих слов, так что вот пока готовое решение на SQLite.
Напомню, что задача в общем виде такая:
— Человек ввел произвольное слово.
— Мы хотим найти наиболее похожее слово из готового словаря.
— И сделать это быстро.
Полный перебор по словарю работает хорошо, но медленно.
Чтобы сделать быстро, понадобится расширение spellfix.
Подключаем расширение:
.load ./spellfix
Создаем таблицу для словаря:
create virtual table dictionary using spellfix1;
Загружаем в нее данные:
insert into dictionary(word)
select ... from ...;
И ищем похожие слова:
select word
from dictionary
where word match ?
limit 1
Например:
sqlite> select word from dictionary where word match 'абривиатура' limit 1;
аббревиатура
sqlite> select word from dictionary where word match 'рассчет' limit 1;
расчет
sqlite> select word from dictionary where word match 'дорга' limit 1;
дорога
Изи!
Позже отдельно распишу, как и почему все работает. И как сделать самостоятельно на любой базе.