Skip to content
No description, website, or topics provided.
Java
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
dictionary
src/main
.gitignore
Attribution-NonCommercial-ShareAlike 3.0.pdf
CHANGELOG.md
README.md
pom.xml
Шкала v2.txt

README.md

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 = JMorfSdkLoad.loadFullLibrary();

Пример получения словоформ:

List<OmoForm> characteristics5 = jMorfSdk.getAllCharacteristicsOfForm("мыл");
characteristics5.forEach((form) -> {
    System.out.println(form);
});

Пример получения форм слова с заданными морфологическими характеристками:

jMorfSdk.getAllCharacteristicsOfForm("мыла").forEach((form) -> {
    //Пример поиска формы в родительном падеже
    if (form.getTheMorfCharacteristics(Case.IDENTIFIER) == Case.GENITIVE) {
        System.out.println("Форма в родительном падеже " + form);
    }
    
    if (form.getTypeOfSpeech() == TypeOfSpeech.VERB) {
        System.out.println("Форма с глаголом найдена " + form);
    }
});

Пример фильтрации слов по морфологической характеристике:

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);
        }
    });
}

Дополнительные пример работы с библиотекой описаны в 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
1) Полностью переработана конвертация исходного в словарь в формы JMorfSdk, что значительно фиксит ошибки и небольшие баги, которые оставались при предыдущем способе конвертации.
2) Незначительно изменился интерфейс с библиотекой, поэтому старые методы могут стать красным, но скорее всего нет. Также добавлены методы упрощающие работы с получением, обработкой и выводом морф. характеристик слова. (методы находятся в классах JMorfSdk и MorfologyParametersHelper.
3) Добавлена усовершенствованная архивация БД и файлов. Для переноса библиотека весит до 43МБ, но при первом запуске будет разворачиваться, поэтому первая загрузка будет чуть дольше. Рабочий размер JMorfSdk 148МБ.

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


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


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.bd, для производной формы в dictionary.wordFormString.bd, что уменьшает издержки в ОП.
2) База данных символьного представления и морфологические параметры хранятся в отдельные сборки MorphologicalStructures, что позволяет обрабатывать промежуточные результаты без JMorfSdk.
3) Добавлен режим генерации словоформе по начальной форме и наборы морф. характеристик.
4) JMorfSdk стала потокобезопасной. Теперь получать морф. характеристики можно одновременно с нескольких потоков, причем потоки не мешают друг другу и не блокируют библиотеку.
5) Появилась поддержка цифр, теперь число "1945" корректно распознается, как словоформа числа.
6) Теперь слова через дефис распознаются как слово, например, "что-то", "кто-то".
7) Все методы для работы с библиотекой возвращают Exception в случае, если слово не было найдено в словаре или случилось иная ошибка.
8) LoadJMorfSdk переименован в JMorfSdkLoad.
9) Если не нужна генерация слова, то можно удалить базу dictionary.wordFormString.bd, но тогда загружать библиотеку следует с помощью JMorfSdkLoad.loadInAnalysisMode
You can’t perform that action at this time.