Распознавание языка текста

Дело было вечером :) Как то раз, уже после старта каталога карт для 3-их героев ко мне подошел Вит и сказал "Слушай, а можно еще выводить язык карты? А то есть клевые сюжетные карты и хотелось бы понимать на русском ли они."

Тут я плотно призадумался - с одной стороны в мета-данных карт нет подобной информации, но знание что есть такие алгоритмы у меня плотно засело на подкорке.

Решив поискать инфу я первым делом полез в гугл. Как ни странно вся инфа оказалась по большей части совершенно не тем, что я искал.

Спустя еще минут 15 я раскопал примерно следующее:

  • У гугла есть API перводов в рамках которого есть метод определения языка. Но данный вариант стал с определенного момента платным и прошел мимо;
  • На хабре я нашел статью как раз о том, как после закрытия API гугла человек переходил на API Bing. С этим мне просто связываться не хотелось по личным мотивам;
  • После обнаружения подобных API мне подумалось, что Yandex не мог пропустить такого и обязательно должен был сделать себе такую функцию (кстати, в той же статье из второго пунта говорилось, что у них оно в преальфе и совсем грустно пока). В итоге - API Перевода от Yandex. Все очень скромно и красиво :)

Для работы нужно получить ключик - на странице можно легко найти большую ссылку на получение ключа.

После получения ключа остается только внедрить к себе в приложение, что у меня выглядело примерно так:

require 'net/http'

# Тут определение моего класса (по идее нужно в отдельный оформить)

# Возвращет строку - код языка('ru', 'en'...) или nil
def language
  uri = URI.parse('https://translate.yandex.net/api/v1.5/tr.json/detect')
  uri.query = URI.encode_www_form({
    key: '<ВЫДАННЫЙ КЛЮЧ>',
    text: [name, description].join(' ')
  })
  result = JSON.parse(Net::HTTP.get_response(uri).body)
  if result['code'] == 200
    result['lang']
  else
    nil
  end
end

Не скажу что оформленно изумительно, но суть отражает очень хорошо - все очень просто и понятно. Особенно если вы согласны с условиями яндекса везде показывать, что информация добыта сервисами яндекса :)