morpher.ru 8 (499) 647 86 54
nowhere@morpher.ru
 
 
Мой морфер

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

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

См. также:

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

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

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

Метод getForm возвращает форму заданного падежа.

Case Описание, примеры
Case.Nom именительный (кто? что?):
  Иванов Петрова Крым Урал
Case.Gen родительный (кого? чего?):
  Иванова Петровой Крыма Урала
Case.Dat дательный (кому? чему?):
  Иванову Петровой Крыму Уралу
Case.Acc винительный (кого? что?):
  Иванова Петрову Крым Урал
Case.Ins творительный (кем? чем?):
  Ивановым Петровой Крымом Уралом
Case.Pre предложный (о ком? о чем?):
  Иванове Петровой Крыме Урале
Case.Loc местный (где?):
  Иванове Петровой Крыму Урале

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

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

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

Метод getPlural возвращает null для сочетаний фамилии, имени и отчества, а также если исходное словосочетание уже во множественном числе.

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

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

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

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

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

Склонение прилагательных по родам

    Declension declension = new Declension();
    String dear = declension.changeGender("Уважаемый", Gender.Feminine);
    assertEquals("Уважаемая", dear);

Функция прописи чисел

    NumberSpeller speller = new NumberSpeller(new Declension());
    SpellResult r = speller.spell(38, "попугай");
    assertEquals("тридцать восемь попугаев", r.Number + " " + r.Unit);

Функция spell возвращает null, если единица измерения нерусская или не имеет нужной формы.

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

В ситуации, когда необходимо оперативно изменить склонение заданного словосочетания, не прибегая к техподдержке, удобен пользовательский словарь. Словарь представлен в библиотеке интерфейсом 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, выдаваемый утилитой, аналогичен тому, что выдает веб-сервис 2.0. Поэтому если вы ранее работали с веб-сервисом, то для перехода на утилиту вам потребуются минимальные изменения в программе.

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

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

  • Выполняется на Java версий 6, 7 и 8.
  • Совместима с Oracle 11.2.0.4.
  • Не имеет зависимостей кроме стандартной библиотеки.
  • Все классы неизменяемы (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.
2017-02-15 Обеспечена совместимость с Oracle 11.2.0.4.
2017-03-01 Добавлены функции склонения прилагательных по родам и прописи чисел. Методы getGenitive, getDative и т.п. интерфейса IParse заменены на метод getForm. Многие недокументированные public классы "спрятаны" (сделаны package-private). Убрана спецификация throws Exception у метода Declension.parse. Так как API библиотеки изменился, Specification-Version изменена с 1.0.0 на 2.0.0.
2017-03-05 Исправлены дефекты, обнаруженные в предыдущей версии. Неправильно склонялись слова с беглыми гласными. В частности, слово "кошка" в родительном множественного программа выдавала как "кошк".

 

Библиотеки

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

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