Как понять, что пользователь забыл переключить язык (ошибся раскладкой)?

Есть строка поиска. Иногда пользователь может ошибиться и ввести русское слово на английской раскладке. Как это понять без выполнения лишних запросов (без выполнения поиска)? Первое, что приходит в голову, проверять на наличие символов, находящихся на месте кириллицы (хъжэбю). Но эти символы иногда могут встречаться и в обычном запросе (особенно апостроф). Есть ли готовые алгоритмы или функции (php)?
  • Вопрос задан
  • 6202 просмотра
Решения вопроса 1
@Hint Автор вопроса
В итоге:
1. Собрал все строки, которые могут быть найдены (получилось около 100 мегабайт).
2. Построил список всех сочетаний из двух букв (aa, ab, ac, ..., zz).
3. Сделал поиск всех сочетаний из пункта 2 в словах из пунтка 1 и сохранил список тех сочетаний, которые не были найдены (ни разу не встречаются). Получилось 165 несуществующих сочетаний.

Теперь ищу в поисковых строках эти несуществующие сочетания. Если что-то найдено, то преобразую запрос в другую раскладку.
Ответ написан
Пригласить эксперта
Ответы на вопрос 8
opium
@opium
Просто люблю качественно работать
Для поиска использую сфинкс, тупо если в другой раскладке, что то найдено, а в текущей нет, то выдаю результаты для другой раскладки.
До миллиона записей сфинкс выдает результаты быстрее чем 1 милисекунда.
Ответ написан
Комментировать
wersoo
@wersoo
Правильней всего, конечно, в случае отсутствия результатов выполнять поиск в другой раскладке, но если второй запрос делать совершенно не хочется, можно например по биграммам определять язык (это будет быстрее поиска по словам конкретного языка).
Ответ написан
Комментировать
AloneCoder
@AloneCoder
[object Object]
Как вариант покопаться в исходниках XNeur, также здесь, на хабре, проскакивала статья со странной реализацией этого алгоритма)
Ответ написан
Комментировать
philpirj
@philpirj
Почему не делать это в жаваскрипте?

$('#txt').keyup(function(e){   
    if($(this).val().match(/([а-яёА-ЯЁ]+)/)){
        alert('Смените раскладку');
    }
});
Ответ написан
AmdY
@AmdY
PHP и прочие вебштучки
Самый простой способ — в случае отсутствия результатов поиска, делать повторную выборку прогнав вводимую строку через функцию ассоциаций раскладки типа str_replace(['q', 'w', 'e', ....], ['й', 'ц', у'', ...], $queryString)
Хотя анализ сочетаний правильнее, так что лучше комбинировать.
Ответ написан
Комментировать
автоматически менять раскладку при обнаружении тех сочетаний букв, которых нет в данном языке
Ответ написан
Комментировать
0neS
@0neS
Есть еще вот такое решение:
https://code.google.com/p/php-lang-correct/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы