Сен
29
2010

Склонение имени и фамилии или интеграция ruby on rails и Яндекс Склонятора

Понадобилось мне на одном из русскоязычных проектов вывести красиво фразу типа «Точки Василия Пупкина». Вводить имя и фамилию в родительном падеже, конечно никто не будет, да и неправильно это. К счастью у Яндека оказался сервис Склонятор, который позволяет просклонять по всем падежам имя и фамилию. Сервис поддерживает работу через xml и json. Вот я и занялся интеграцией этого сервиса с моим приложением на ruby on rails.

Я создал файлик app/models/yandex_inflect.rb вот с таким содержанием:

class YandexInflect
  include HTTParty
  base_uri 'export.yandex.ru'

  def self.decline(name, needed_case)
    data = JSON.parse(get("/inflect.xml?name=#{URI.encode(name)}&format=json"))
    if    needed_case == :genitive      && data.has_key?('2') # родительный
      data['2']
    elsif needed_case == :dative        && data.has_key?('3') # дательный
      data['3']
    elsif needed_case == :accusative    && data.has_key?('4') # винительный
      data['4']
    elsif needed_case == :instrumental  && data.has_key?('5') # творительный
      data['5']
    elsif needed_case == :prepositional && data.has_key?('6') # предложный
      data['6']
    else
      name
    end
  rescue
    name
  end
end

Как видно, для посылки запросов на удалённый адреc я использую HTTParty. Поэтому в config/environment.rb необходимо указать зависимость от этого гема:

config.gem 'httparty'

А использование получается примерно таким:

< %= "Точки #{YandexInflect.decline(@user.name, :genitive)}" %>

tags: , ,
posted in ruby by yas375

Follow comments via the RSS Feed | Оставить комментарий | Trackback URL

3 Comments to "Склонение имени и фамилии или интеграция ruby on rails и Яндекс Склонятора"

  1. Yaroslav wrote:

    http://github.com/yaroslav/yandex_inflect/

    Гему два года

  2. yas wrote:

    оо, круто! а когда надо было, то я не нашел, видимо плохо искал.
    спасибо, буду знать

  3. Сергей wrote:

    Яндекс.Склонятор больше не работает. Вот гем для сервиса «Морфер». Склоняет не только ФИО, но и города, названия товаров в магазинах и вообще произвольные слова и словосочетания:

    http://morpher.ru/ruby

Leave Your Comment