morpher.ru 8 (499) 647 86 54
nowhere@morpher.ru
 
 

Библиотека Morpher.jar

Библиотека реализует следующие функции:

См. также:

Склонение по падежам и числам

За склонение в библиотеке отвечает класс Declension. Вот как им пользоваться:

    Declension declension = new Declension();
    IParse parse = declension.parse("Соединенные Штаты Америки (США)");
    assertEquals("Соединенных Штатов Америки (США)", parse.getGenitive());

Форму родительного падежа возвращает метод getGenitive. Падежные формы возвращаются следующими методами интерфейса IParse:

Метод Описание, примеры
getNominative Возвращает форму именительного падежа (кто? что?):
  Иванов Петрова Крым Урал
getGenitive Возвращает форму родительного падежа (кого? чего?):
  Иванова Петровой Крыма Урала
getDative Возвращает форму дательного падежа (кому? чему?):
  Иванову Петровой Крыму Уралу
getAccusative Возвращает форму винительного падежа (кого? что?):
  Иванова Петрову Крым Урал
getInstrumental Возвращает форму творительного падежа (кем? чем?):
  Ивановым Петровой Крымом Уралом
getPrepositional Возвращает форму предложного падежа (о ком? о чем?) без предлога:
  Иванове Петровой Крыме Урале
getPrepositionalO Возвращает форму предложного падежа (о ком? о чем?) с предлогом о/об/обо:
  об Иванове о Петровой о Крыме об Урале
getLocative Возвращает форму местного падежа (где?) с предлогом в/на:
  в Иванове в Петровой в Крыму на Урале

Примечание: формы местного падежа (локатива) не имеют особого смысла для имен лиц (в Иванове, в Петровой), но незаменимы для географических названий: (где?) в Крыму, на Урале.

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

Для получения падежных форм множественного числа служит метод getPlural:

    Declension declension = new Declension();
    IParse parse = declension.parse("воздушный шар");
    assertEquals("воздушные шары", parse.getPlural().getNominative());

Просклонять слово по падежам во множественном числе можно, вызвав методы getNominative, getGenitive и т.д. (см. выше) у результата метода getPlural. Метод getPlural возвращает null для сочетаний фамилии, имени и отчества, а также если исходное словосочетание уже во множественном числе.

Определение рода и пола

    Declension declension = new Declension();
    IParse parse = declension.parse("Уитни");
    assertEquals(Gender.Feminine, parse.getGender());

Метод getGender возвращает автоматически определенный род входного словосочетания:

Gender.Masculineмужской род или пол
Gender.Feminineженский род или пол
Gender.Neuterсредний род
Gender.Pluralмножественное число

Определение рода может понадобиться, например, чтобы правильно написать уважаемый или уважаемая, действующий на основании или действующая, оставил комментарий или оставила.

Оперативная коррекция склонения при помощи пользовательского словаря

В ситуации, когда необходимо оперативно изменить склонение заданного словосочетания, не прибегая к техподдержке, удобен пользовательский словарь. Словарь представлен в библиотеке интерфейсом IUserDictionary:

public interface IUserDictionary {
    IParse lookup(String nominativeSingular);
}

Если передать объект IUserDictionary в конструктор класса Declension, то он сначала будет искать в пользовательском словаре, а если не найдено или найдены не все грамматические формы, то результат дополняется автоматически построенными формами.

В библиотеке имеется класс XmlUserDictionary, реализующий IUserDictionary, который читает данные из XML-файла (формат файла). Вы можете также самостоятельно реализовать этот интерфейс для любого другого хранилища, например, БД Oracle.

Интерфейс командной строки (CLI)

Если вы программируете на языке, отличном от Java, но имеете на машине среду выполнения Java, то вы можете вызвать morpher.jar через интерфейс командной строки:

C:\Users\Sergey\Documents\morpher>java -jar morpher.jar declension "Джава"
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xml>
    <И>Джава</И>
    <Р>Джавы</Р>
    <Д>Джаве</Д>
    <В>Джаву</В>
    <Т>Джавой</Т>
    <П>Джаве</П>
    <П-о>о Джаве</П-о>
    <М>в Джаве</М>
    <множественное>
        <И>Джавы</И>
        <Р>Джав</Р>
        <Д>Джавам</Д>
        <В>Джав</В>
        <Т>Джавами</Т>
        <П>Джавах</П>
        <П-о>о Джавах</П-о>
        <М>в Джавах</М>
    </множественное>
    <род>женский</род>
</xml>

Имена автоматически разбиваются на фамилию, имя и отчество:

C:\Users\Sergey\Documents\morpher>java -jar morpher.jar declension "Билл Гейтс"
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xml>
    <И>Билл Гейтс</И>
    <Р>Билла Гейтса</Р>
    <Д>Биллу Гейтсу</Д>
    <В>Билла Гейтса</В>
    <Т>Биллом Гейтсом</Т>
    <П>Билле Гейтсе</П>
    <П-о>о Билле Гейтсе</П-о>
    <М>в Билле Гейтсе</М>
    <ФИО>
        <Ф>Гейтс</Ф>
        <И>Билл</И>
        <О></О>
    </ФИО>
    <род>мужской</род>
</xml>
    

Пример склонения прописи числа и единицы измерения:

C:\Users\Sergey\Documents\morpher>java -jar morpher.jar spell 38 "попугай"
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<PropisResult>
    <n>
        <И>тридцать восемь</И>
        <Р>тридцати восьми</Р>
        <Д>тридцати восьми</Д>
        <В>тридцать восемь</В>
        <Т>тридцатью восьмью</Т>
        <П>тридцати восьми</П>
        <М>тридцати восьми</М>
    </n>
    <unit>
        <И>попугаев</И>
        <Р>попугаев</Р>
        <Д>попугаям</Д>
        <В>попугаев</В>
        <Т>попугаями</Т>
        <П>попугаях</П>
        <М>попугаях</М>
    </unit>
</PropisResult>
    

Если в выдаче программы русские буквы не читаются, введите команду hcp 65001, чтобы изменить кодировку консоли на UTF-8.

XML, выдаваемый утилитой, аналогичен тому, что выдает веб-сервис. Поэтому если вы ранее работали с веб-сервисом, то для перехода на утилиту вам потребуются минимальные изменения в программе.

Технические характеристики и комплект поставки

В дистрибутив входит один файл – Java-библиотека morpher.jar. Ее технические характеристики:

  • Выполняется на Java версий 6, 7 и 8.
  • Не имеет зависимостей кроме стандартной библиотеки.
  • Все классы неизменяемы (immutable) и, как следствие, потокобезопасны (thread-safe).
  • Библиотека не имеет никаких внешних зависимостей и не требует прав доступа к диску или сети.
  • Размер ~ 300K.

История изменений

Версия Описание
2017-01-25 В morpher.jar добавлен файл MANIFEST.MF с информацией о версии. Налажена работа интерфейса командной строки (CLI), нарушенная в одной из предыдущих версий.
2017-01-26 Исправлена ошибка (NullPointerException), возникавшая при создании класса Declension в приложениях на Spring.
2017-02-11 Библиотека пересобрана под JDK 1.6. Ранняя версия была по ошибке собрана под JDK 1.8.

 

Библиотеки

Заметили опечатку? Выделите слово мышкой и нажмите Ctrl-Enter. Система Orphus

© Сергей Слепов, 2003 - 2017. Перепечатка материалов сайта только с разрешения автора.