Задавайте вопросы, мы ответим
Вы не зашли.
Ребята, привет всем!
Пытаюсь придумать запрос, который будет более или менее вменяемо предлагать варианты исправления ошибок в напечатанном слове. Есть большая таблица слов. Среди них, скажем, есть слова: "equalizer", "excelsior". Пользователь неверно набрал слово "equalizer" как "equalizr", тогда можно получить некоторые вменяемые варианты исправлений для опечатки (естественно без использования индексов, увы):
Неактивен
Вот составил что-то похожее:
Отредактированно FiMko (11.05.2013 10:40:12)
Неактивен
FiMko написал:
Для русского языка совсем феерично (опечатался в слове "драка"):
select length('драк');
+----------------+
| length('драк') |
+----------------+
| 4 |
+----------------+
select length(word), word from words where word sounds like 'драк' and length(word) >= 4 and length(word) <= 5 limit 10;
+------+
| word |
+------+
| да |
| Да |
| дБ |
| ДВ |
| дг |
| Де |
| де |
| Дж |
| Ди |
| ди |
+------+
Не спасает даже:
Отредактированно FiMko (11.05.2013 10:40:54)
Неактивен
В результате некоторых изысканий в Интернет и собственного придумывания запроса получилось следующее.
Опечатки бывают, условно, 3-х типов:
1. Потерянная буква.
2. Лишняя буква.
3. Буквы перепутанные местами.
Из статистики некоторых наиболее популярных опечаток Yandex (для русских слов) имеем слова:
агенство > агентство
расчитать > рассчитать
програма > программа
рассписание > расписание
руский > русский
растояние > расстояние
Тогда запрос MySQL для проверки орфографии (по отношению к большой таблице words) может иметь вид:
Отредактированно FiMko (11.05.2013 12:00:53)
Неактивен
Согласно списка Oxford Dictionaries наиболее частых опечаток и ошибок в словах имеем результаты выполнения запроса:
belive > beagle,beetle,believe,belite,Belize
beleive > bearable,bellaire,Belgrade,beeville,bedplate
calender > calander,cavalier,capillar,calender,calendar (слово calender существует, в переводе с англ. означает каландровый)
commitee > commutate,Committee,comminute
harrass > hatches,harass,habitus,Habeas,harris
occuring > occupying,occurring
occurance > occurrence,occurence,oceanside
rember > Reaumur,reamer
remeber > remember,redeemer,Reaumur,reamer
succesful > successful,superfcal,sublineal,sublevel
molicular > motorailer,mollifier,molecular
Отредактированно FiMko (11.05.2013 13:43:33)
Неактивен