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
- Библиотека не находит словари, для этого разархивируйте файлы из JMorfSdk/dictionary/* в папку %temp%/dictionary
v 2.10.8
- Реализован Singleton для JMorfsdk с ленивой, потокобезопасной инициализацией
v 2.10.7
- зависимость от MS теперь не локальная, а от https://jitpack.io
v 2.10.6
- Исправлен баг хэш-кода, теперь он рассчитывается на основе byte[] от String.getBytes("UTF-8")
v 2.10.5 от 12.03.2018
- Исправлен баг связанных с хэш-кодом:
а) Добавлен новый алгоритм получения хэш-кода.
b) Добавлена двойная проверка соответствия формы и строкового представления искомых формы. - Все повторяющиеся обертки классов вынесены в проект
TemplateWrapperClasses (https://github.com/jalexpr/TemplateWrapperClasses), для уменьшения повторяющихся строк
кода.
=======
v 2.10.4 от 04.03.2018 - Полностью переработана конвертация исходного в словарь в формы JMorfSdk, что значительно фиксит ошибки и небольшие
баги, которые оставались при предыдущем способе конвертации.
- Незначительно изменился интерфейс с библиотекой, поэтому старые методы могут стать красным, но скорее всего нет.
Также добавлены методы упрощающие работы с получением, обработкой и выводом морф. характеристик слова. (методы
находятся в классах JMorfSdk и MorfologyParametersHelper.
- Добавлена усовершенствованная архивация БД и файлов. Для переноса библиотека весит до 43МБ, но при первом запуске
будет разворачиваться, поэтому первая загрузка будет чуть дольше. Рабочий размер JMorfSdk 148МБ.
NB! Было замечено, что встречаются слова с буквой е вместо ё. Такие слова JMorfSdk не распознает, поэтому не стоит пугаться, если не будет найдено слово "пошел".
v 2.10.3 от 24.02.2018 - Добавил методы упрощающие получения характеристик: теперь достаточно указать класс (или классы) и библиотека сама
сгенерирует маску, а также можно передать индикаторы или создать маску самому
- Вывод характеристик теперь осмысленный (т.е. выводится имя характеристики), а не численный (при условии, что
выводится одна характеристика).
v 2.10.2 от 30.12.2017
- Перенес морф. параметров (MorphologyParameters) из JMorfSdk в проект MorphologicalStructures.
- БД dictionary.initialFormString и dictionary.wordFormString, которые хранят стринговое представление начальной и
производных формы слова, соответственно, перенесены в проект MorphologicalStructures. Теперь сохранив ключ,
полученный входе работы JMorfSdk, можно не хранить стринговое представление в ОП и, когда оно понадобится, получить
представление из БД (через проект MorphologicalStructures) при помощи ключа.
v 2.10.1 от 30.12.2017
- Символьное представление словоформы теперь храниться в базе данных (для начальной формы в
dictionary.initialFormString.db, для производной формы в dictionary.wordFormString.db, что уменьшает
издержки в ОП.
- База данных символьного представления и морфологические параметры хранятся в отдельные сборки
MorphologicalStructures, что позволяет обрабатывать промежуточные результаты без JMorfSdk.
- Добавлен режим генерации словоформе по начальной форме и наборы морф. характеристик.
- JMorfSdk стала потокобезопасной. Теперь получать морф. характеристики можно одновременно с нескольких потоков, причем
потоки не мешают друг другу и не блокируют библиотеку.
- Появилась поддержка цифр, теперь число "1945" корректно распознается, как словоформа числа.
- Теперь слова через дефис распознаются как слово, например, "что-то", "кто-то".
- Все методы для работы с библиотекой возвращают Exception в случае, если слово не было найдено в словаре или случилось
иная ошибка.
- LoadJMorfSdk переименован в JMorfSdkLoad.
- Если не нужна генерация слова, то можно удалить базу dictionary.wordFormString.db, но тогда загружать
библиотеку следует с помощью JMorfSdkLoad.loadInAnalysisMode