Механизм определения слова без учета языка раскладки клавиатуры

Мне нужно написать метод, который будет распознавать введенное слово, не смотря на язык клавиатуры. В основном я использую русскую(РУ) и английскую(США) раскаладку. Мне нужно чтобы при вводе слов на русском языке с использованием английской клавиатуры система понимала, что я ввожу русское слово, но без переключения на русскую клавиатуру, и наоборот, чтобы распознавала английские слова введенные без переключения на английскую клавиатуру. Например, как это сделано в ГУГЛ поиске. Если ввести английское слово milk, оно выдаст milk. Если ввести русское слово молоко таким образом - vjkjrj(англо-русская клавиатура) - он мне выдаст результат с русским словом молоко.

Например:

  1. молоко vjkjrj
  2. екуу tree
  3. абдула f,lekf
  4. g.ht пюре
  5. i.go шюпо

С чего начать? Возможно, имеются некоторые библиотеки готовые?

Данные подтягиваются через Solr(с использованием полнотекстового поиска).


Ответы (1 шт):

Автор решения: rhino_rus

Для решения подобной задачи можно считать расстояние Дамерау - Левенштейна между введенным словом и словами из заранее подготовленных словарей для разных языков. Возможно, с некоторыми ограничениями, если необходимо.

Примерный алгоритм:

  1. Получаем на вход от пользователя слово. Допустим, 'руддщ' (hello)
  2. Осуществляем поиск данного слова в словаре языка, соответствующего раскладке. Если не находим - переходим к следующему шагу.
  3. Осуществляем преобразование слова во все другие раскладки. В нашем случае, 'руддщ' -> 'hello'.
  4. Считаем расстояние Дамерау-Левенштейна и выбираем то слово, расстояние до которого является наименьшим. В случае равенства, отдаем предпочтение тому языку, раскладка которого установлена.
→ Ссылка