Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Petrovich просклоняет русские имена

Anna | 20.06.2014 | нет комментариев

Вам Зачастую доводится иметь дело со склонением имён пользователей на русском языке? При рассылке писем, при отображении страниц и упоминаний, при генерации рекламных объявлений? Скорее каждого, доводится изворачиваться и писать все сообщения в именительном падеже — Иванов Пётр Сергеевич

Это не неизменно комфортно, не неизменно прекрасно, не неизменно целесообразно. Русский язык одарён богатой морфологией, которая несколько затрудняет его механическую обработку. Каждому вестимо, чтоантропонимы, как полагается именам существительным, подчиняются каждому правилам словообразования.

Для решения этой задачи при применении Ruby существует Petrovich — комфортная легковесная библиотека для автомагического склонения русскоязычных имён, фамилий и отчеств.


Суть

В основе алгорифма Petrovich лежит база правил словообразования, составленная вручную. Прикладному программисту трудиться с библиотекой будет дюже легко: на входе указывается слово в канонической форме, на выходе получается слово запрошенного рода и падежа.

Применение

Базовый синтаксис довольно примитивен для понимания.

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

Как дозволено подметить, имеется два параметра, которые описывают поведение анализатора: в конструктор класса Petrovich передаётся пол, вторым параметром способа склонения передаётся падеж.

Во-первых, половая принадлежность имени. Petrovich рассматривает три варианта:

  • мужской пол, :male;
  • женский пол, :female;
  • «андрогинный» пол, :androgynous, при котором форма фамилии не зависит от пола человека. Скажем,Прокопенко.

Во-вторых, требуемый падеж. Возможные падежи, изменяющие слово, описаны ниже в таблице.

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

Имеется вероятность подмешать модуль 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 указываются способы, представляющие фамилию, имя и отчество. В данном примере указано, что способ my_firstname представляет имя, способ my_lastname представляет фамилию, способ my_middlename представляет отчество. Ничто не мешает подмешать модуль и в обыкновенный класс, всё будет трудиться так же отлично. В целевой класс будут добавлены способы с падежами, описанными в таблице.

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

user.my_firstname_genitive  # => Петра
user.my_middlename_genitive # => Ашотовича
user.my_lastname_genitive   # => Бонч-Соколова-Скаля

Некоторые особенности русского правописания учитываются довольно отлично.

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

Ради благочиния, проводилась оценка точности склонения слов. В качестве стандарта взят список фамилий и их форм из морфологического словаря АОТ. Точность оценивалась на основе обработки 88 314 примеров по формуле

,

где case — падеж, gender — пол, Vcase,gender — число правильных словоизменений для указанного падежа и рода, Ncase,gender — всеобщее число примеров для указанного падежа и рода.

На момент написания статьи отслеживается средняя точность 99,6614% на основе обработки 88 314 примеров. Детали приведены ниже в таблице. Эта информация может быть пригодна при применении Petrovich в боевых условиях.

Пол / Падеж Родительный Дательный Винительный Творительный Предложный
Мужской 99,7137% 99,7386% 99,7635% 97,9858% 99,7261%
Женский 99,9102% 99,9401% 99,9701% 99,4636% 99,9401%

Реквизиты

Репозиторий на GitHub располагается по адресу rocsci/petrovich. Библиотека распространяется на условиях MIT License. Авторами библиотеки являются Андрей Козлов (Bonch) и Дмитрий Усталов (eveel).

Дабы установить Petrovich и применять его в собственных приложениях, довольно исполнить gem install petrovich либо дописать соответствующую строчку в Gemfile.

Веб-интерфейс

Славно, что Андрей Ситник (Iskin) из «Гневных Марсиан» сделал изумительный интерфейс, тот, что разрешает играться с Petrovich прямо из браузера.

В подлинный момент интерфейс доступен по адресу http://petrovich.rocketscience.it/.

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

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

Спасибо, что дочитали до конца!

Иллюстрации с Петровичем принадлежат Андрею Бильжо, автору комиксов про Петровича.

 

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB