Skip to content

Склонение падежей русских имён, фамилий и отчеств

License

Notifications You must be signed in to change notification settings

k1mst0n/petrovich

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Petrovich

Склонение падежей русских имён, фамилий и отчеств. Вы задаёте начальное имя в именительном падеже, а получаете в нужном вам.

Build Status

Посмотреть в действии: http://petrovich.rocketscience.it

Установка

Добавьте в Gemfile:

gem 'petrovich'

Установите гем cредствами Bundler:

$ bundle

Или установите его отдельно:

$ gem install petrovich

Зависимости

Для работы гема требуется Ruby не младше версии 1.9.1. Petrovich не привязан к Ruby on Rails и может свободно использоваться практически в любых приложениях и библиотеках на Ruby.

Использование

Вы задаёте начальные значения (фамилию, имя и отчество) в именительном падеже.

p = Petrovich.new(:male)
p.lastname('Иванов', :dative)      # => Иванову
p.firstname('Пётр', :dative)       # => Петру
p.middlename('Сергеевич', :dative) # => Сергеевичу

Конструктор класса Petrovich принимает пол в качестве единственного аргумента. Пол может принимать значения :male, :female или :androgynous. Последнее означает, что слово не склоняется по родам. По нормам языка, некоторые фамилии не склоняются. Например, такие украинские фамилии, как Симоненко, а также заимствованные фамилии, такие как Нельсон.

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

Продвинутое использование

Вы можете подмешать модуль Petrovich::Extension в любой класс. Это особенно полезно при использовании ActiveRecord и подобных ORM.

class User < ActiveRecord::Base
  include Petrovich::Extension

  petrovich :firstname  => :my_firstname,
            :middlename => :my_middlename,
            :lastname   => :my_lastname,
            :gender     => :my_gender

  def my_firstname
    'Пётр'
  end

  def my_middlename
    'Петрович'
  end

  def my_lastname
    'Петренко'
  end

  # Если пол не был указан, используется автоматическое определение
  # пола на основе отчества. Если отчество также не было указано,
  # пытаемся определить правильное склонение на основе файла правил.
  def my_gender
    :male # :male, :female или :androgynous
  end
end

Ничего не мешает подмешать модуль Petrovich::Extension в самый обычный класс.

class Person
  include Petrovich::Extension

  # А здесь мы не указали пол - он будет определяться на основе отчества
  petrovich :firstname  => :name,
            :middlename => :patronymic,
            :lastname   => :surname

  def name
    'Иван'
  end

  def patronymic
    'Олегович'
  end

  def surname
    'Сафронов'
  end
end

При помощи метода petrovich указываются методы, представляющие фамилию, имя и отчество. В данном примере указано, что метод name представляет имя, метод lastname представляет фамилию, метод patronymic представляет отчество.

После конфигурации Petrovich можно легко выполнять склонение необходимых строк.

user = User.new
user.my_firstname         # => Пётр

user.my_firstname_dative  # => Петру
user.my_middlename_dative # => Петровичу
user.my_lastname_dative   # => Петренко
person = Person.new
person.name # => Иван

person.my_firstname_dative  # => Ивану
person.my_middlename_dative # => Олеговичу
person.my_lastname_dative   # => Сафронову

Базовое имя должно быть в именительном падеже. Вы просто добавляете _<суффикс> в конец имени оригинального метода и получаете заданное имя в требуемом падеже.

Названия суффиксов для методов образованы от английских названий соответствующих падежей. Полный список поддерживаемых падежей приведён в таблице ниже.

Суффикс метода Падеж Характеризующий вопрос
genitive родительный Кого? Чего?
dative дательный Кому? Чему?
accusative винительный Кого? Что?
instrumental творительный Кем? Чем?
prepositional предложный О ком? О чём?

Оценка точности

Тестирование гема при склонении коллекции фамилий из морфологического словаря АОТ показало точность около 99%. Оригинальный словарь распространяется по лицензии LGPL версии 2.1, однако используется только в задаче оценки точности данного гема.

Для оценки точности достаточно выполнить команду rake evaluate. После выполнения этой команды в поток стандартного вывода будут напечатаны результаты оценки с данными в словаре АОТ.

Pr(nominative|male) = 100.0000%
Pr(genitive|male) = 99.7137%
Pr(dative|male) = 99.7386%
Pr(accusative|male) = 99.7635%
Pr(instrumental|male) = 97.9858%
Pr(prepositional|male) = 99.7261%
Pr(nominative|female) = 100.0000%
Pr(genitive|female) = 99.9102%
Pr(dative|female) = 99.9401%
Pr(accusative|female) = 99.9701%
Pr(instrumental|female) = 99.4636%
Pr(prepositional|female) = 99.9401%

В настоящий момент наблюдается точность в 99.6614% на основе обработки 88314 примеров.

Модульные тесты

Для запуска тестов достаточно выполнить rake spec или просто rake.

Разработчики

Портирование

Неравнодушные люди портировали Petrovich на другие языки и платформы программирования.

Ребята, спасибо!

Дальнейшее развитие

Мы планируем и далее улучшать этот проект. Поэтому нам важен отклик от пользователей данного гема. Вот наши планы:

  • добавить отладочный режим, чтобы видеть, какое именно правило было использовано при словообразовании;
  • интерфейс командной строки, чтобы работать с гемом из командной строки;
  • проверка совместимости с различными ORM и сторонними библиотеками.

Если вы хотите помочь этому проекту, вы можете реализовать любую вышеперечисленную идею. Перед этим желательно связаться с нами, чтобы мы были в курсе.

Содействие

Если вы нашли баги, как программной части, так и в базе правил, то вы всегда можете форкнуть репозиторий и внести необходимые изменения. Ваша помощь не останется незамеченной! Если вы заметили ошибки при склонении падежей имён, фамилий или отчеств, можете написать об этом в Issues на GitHub. Проблема будет сразу же исследована и, по возможности, решена.

Не стесняйтесь добавлять улучшения.

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

About

Склонение падежей русских имён, фамилий и отчеств

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Ruby 100.0%