Skip to content

jalexpr/jmorfsdk

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JMorfSdk

Архитектура

JMorfSdk - главный класс, содержит HashMap словоформ (OmoForm).

Form - форма слова содержит в себе набор характеристик, имеет набор характеристик, которые меняются в зависимости от словоформы (число, падеж и т.д.)
WordForm - словоформа, наследуется от Form, имеет ссылку на InitialForm.
InitialForm наследуется от Form - словоформа в начальной форме слова, имеет ссылки на все производные словоформы (WordfForm).
MorphologyParameters - набор констант для морфологических характеристик.


Репозиторий

Стабильные сборки доступны: https://search.maven.org/artifact/ru.textanalysis.tfwwt/jmorfsdk/ Сборки SNAPSHOT доступны: https://jitpack.io/#jalexpr/JMorfSdk

Начало работы с библиотекой

Загрузка библиотеки:

JMorfSdk jMorfSdk = JMorfSdkFactory.loadFullLibrary();
Пример получения словоформ:
List<IOmoForm> characteristics5 = jMorfSdk.getAllCharacteristicsOfForm("мыл");
characteristics5.forEach((form) -> {
    System.out.println(form);
});
Пример получения форм слова с заданными морфологическими характеристками:
jMorfSdk.getAllCharacteristicsOfForm("дорогой").forEach((form) -> {
    //Пример поиска формы в родительном падеже
    if (form.getTheMorfCharacteristics(MorfologyParameters.Case.IDENTIFIER) == MorfologyParameters.Case.GENITIVE) {
        System.out.println("Форма в родительном падеже " + form);
    }

    if (form.getTypeOfSpeech() == MorfologyParameters.TypeOfSpeech.VERB) {
        System.out.println("Форма с глаголом найдена " + form);
    }
});

jMorfSdk.getAllCharacteristicsOfForm("дорогой").forEach(form -> {
    if (form.getTypeOfSpeech() == MorfologyParameters.TypeOfSpeech.NOUN) {
        System.out.println(form);
    }
});

Вывод
initialFormString = дорогой, typeOfSpeech = 18, morfCharacteristics = 4264
initialFormString = дорога, typeOfSpeech = 17, morfCharacteristics = 363
Пример фильтрации слов по морфологической характеристике:
List<String> words = Arrays.asList("осенний", "осенней", "площадь", "стол", "играть", "конференций", "на", "бежала");
for (String word : words) {
    jMorfSdk.getAllCharacteristicsOfForm(word).forEach(form -> {
        if (form.getTheMorfCharacteristics(MorfologyParameters.Gender.class) == MorfologyParameters.Gender.FEMININ) {
            System.out.println(form + " - " + word);
        }
    });
}
Вывод
initialFormString = площадь, typeOfSpeech = 17, morfCharacteristics = 107 - площадь
initialFormString = площадь, typeOfSpeech = 17, morfCharacteristics = 555 - площадь
initialFormString = стол, typeOfSpeech = 17, morfCharacteristics = 103 - стол
initialFormString = стол, typeOfSpeech = 17, morfCharacteristics = 551 - стол
initialFormString = конференция, typeOfSpeech = 17, morfCharacteristics = 187 - конференций
Пример генерации словоформ
JMorfSdk jMorfSdk = JMorfSdkFactory.loadFullLibrary();
List<String> forms = jMorfSdk.getDerivativeForm("дерево",
		MorfologyParameters.TypeOfSpeech.NOUN,
		MorfologyParameters.Numbers.SINGULAR);
forms.forEach(System.out::println);
Вывод:

дерева дерева дереву дереву дерево дерево деревом деревом дереве дереве

Дополнительные пример работы с библиотекой описаны в Running.java

Возможные проблемы

  1. Библиотека не находит словари, для этого разархивируйте файлы из JMorfSdk/dictionary/* в папку %temp%/dictionary

Версии библиотеки

v 2.10.8

  1. Реализован Singleton для JMorfsdk с ленивой, потокобезопасной инициализацией

v 2.10.7

  1. зависимость от MS теперь не локальная, а от https://jitpack.io

v 2.10.6

  1. Исправлен баг хэш-кода, теперь он рассчитывается на основе byte[] от String.getBytes("UTF-8")

v 2.10.5 от 12.03.2018

  1. Исправлен баг связанных с хэш-кодом:
    а) Добавлен новый алгоритм получения хэш-кода.
    b) Добавлена двойная проверка соответствия формы и строкового представления искомых формы.
  2. Все повторяющиеся обертки классов вынесены в проект TemplateWrapperClasses (https://github.com/jalexpr/TemplateWrapperClasses), для уменьшения повторяющихся строк кода.


    =======

    v 2.10.4 от 04.03.2018
  3. Полностью переработана конвертация исходного в словарь в формы JMorfSdk, что значительно фиксит ошибки и небольшие баги, которые оставались при предыдущем способе конвертации.
  4. Незначительно изменился интерфейс с библиотекой, поэтому старые методы могут стать красным, но скорее всего нет. Также добавлены методы упрощающие работы с получением, обработкой и выводом морф. характеристик слова. (методы находятся в классах JMorfSdk и MorfologyParametersHelper.
  5. Добавлена усовершенствованная архивация БД и файлов. Для переноса библиотека весит до 43МБ, но при первом запуске будет разворачиваться, поэтому первая загрузка будет чуть дольше. Рабочий размер JMorfSdk 148МБ.

    NB! Было замечено, что встречаются слова с буквой е вместо ё. Такие слова JMorfSdk не распознает, поэтому не стоит пугаться, если не будет найдено слово "пошел".


    v 2.10.3 от 24.02.2018
  6. Добавил методы упрощающие получения характеристик: теперь достаточно указать класс (или классы) и библиотека сама сгенерирует маску, а также можно передать индикаторы или создать маску самому
  7. Вывод характеристик теперь осмысленный (т.е. выводится имя характеристики), а не численный (при условии, что выводится одна характеристика).


    v 2.10.2 от 30.12.2017
  1. Перенес морф. параметров (MorphologyParameters) из JMorfSdk в проект MorphologicalStructures.
  2. БД dictionary.initialFormString и dictionary.wordFormString, которые хранят стринговое представление начальной и производных формы слова, соответственно, перенесены в проект MorphologicalStructures. Теперь сохранив ключ, полученный входе работы JMorfSdk, можно не хранить стринговое представление в ОП и, когда оно понадобится, получить представление из БД (через проект MorphologicalStructures) при помощи ключа.


    v 2.10.1 от 30.12.2017
  1. Символьное представление словоформы теперь храниться в базе данных (для начальной формы в dictionary.initialFormString.db, для производной формы в dictionary.wordFormString.db, что уменьшает издержки в ОП.
  2. База данных символьного представления и морфологические параметры хранятся в отдельные сборки MorphologicalStructures, что позволяет обрабатывать промежуточные результаты без JMorfSdk.
  3. Добавлен режим генерации словоформе по начальной форме и наборы морф. характеристик.
  4. JMorfSdk стала потокобезопасной. Теперь получать морф. характеристики можно одновременно с нескольких потоков, причем потоки не мешают друг другу и не блокируют библиотеку.
  5. Появилась поддержка цифр, теперь число "1945" корректно распознается, как словоформа числа.
  6. Теперь слова через дефис распознаются как слово, например, "что-то", "кто-то".
  7. Все методы для работы с библиотекой возвращают Exception в случае, если слово не было найдено в словаре или случилось иная ошибка.
  8. LoadJMorfSdk переименован в JMorfSdkLoad.
  9. Если не нужна генерация слова, то можно удалить базу dictionary.wordFormString.db, но тогда загружать библиотеку следует с помощью JMorfSdkLoad.loadInAnalysisMode

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages