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

Есть строка поиска. Иногда пользователь может ошибиться и ввести русское слово на английской раскладке. Как это понять без выполнения лишних запросов (без выполнения поиска)? Первое, что приходит в голову, проверять на наличие символов, находящихся на месте кириллицы (хъжэбю). Но эти символы иногда могут встречаться и в обычном запросе (особенно апостроф). Есть ли готовые алгоритмы или функции (php)?
  • Вопрос задан
  • 5218 просмотров
Решения вопроса 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)
Хотя анализ сочетаний правильнее, так что лучше комбинировать.
Ответ написан
автоматически менять раскладку при обнаружении тех сочетаний букв, которых нет в данном языке
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
O.Vision Санкт-Петербург
от 200 000 до 280 000 руб.
Chudo Москва
от 100 000 до 210 000 руб.
Zelo Москва
от 130 000 руб.
25 янв. 2020, в 19:06
1000 руб./в час
25 янв. 2020, в 19:05
3000 руб./за проект
25 янв. 2020, в 18:55
500 руб./за проект