Java библиотека для быстрого (!) получения леммы и морфологической информации по заданному слову русского языка. Реинкарнация aot-lematizier с удобным обновленным API, избавленная от closed-source зависимостей, упрощенная для сборки, и как следствие легко подключаемая в другие проекты с помощью репозитория Jitpack. Поддерживает все версии Java начиная с 8-ой версии, а также протестирована со всеми версиями Kotlin начиная с 1.5.*
- Определяет исходную форму слова согласно правилам русского языка, так называемую лемму (первое лицо, единственное число).
- Определяет всевозможные характеристики слова, такие как часть речи, род, падеж, число и т. д.
- Определяет всевозможные преобразования слова с их характеристиками (flexion).
- Различает слова с полным соответствием письменной формы, но разной морфологией, например замок (что? строение) и замок (что сделал? замок под дождем).
- Различает омонимии, то есть слова с полным соответствием и письменной формы и морфологии, но различным смыслом, например замок (что? строение) и замок (что? запор).
Вам понадобится Gradle или Maven, или другая система сборки.
import java.io.IOException;
import static java.lang.System.out;
import static com.github.demidko.aot.WordformMeaning.lookupForMeanings;
class Example {
public static void main(String[] args) throws IOException {
var meanings = lookupForMeanings("люди");
out.println(meanings.size());
/* 1 */
out.println(meanings.get(0).getMorphology());
/* [С, мр, им, мн] */
out.println(meanings.get(0).getLemma());
/* человек */
for (var t : meanings.get(0).getTransformations()) {
out.println(t.toString() + " " + t.getMorphology());
/*
* человек [С, мр, им, ед]
* человека [рд, С, мр, ед]
* человеку [С, мр, ед, дт]
* человека [С, мр, ед, вн]
* человеком [тв, С, мр, ед]
* человеке [С, мр, ед, пр]
* люди [С, мр, им, мн]
* людей [рд, С, мр, мн]
* человек [рд, С, мр, мн]
* людям [С, мр, мн, дт]
* человекам [С, мр, мн, дт]
* людей [С, мр, мн, вн]
* людьми [тв, С, мр, мн]
* человеками [тв, С, мр, мн]
* людях [С, мр, мн, пр]
* человеках [С, мр, мн, пр]
*/
}
}
}
За слова и морфологическую информацию спасибо проекту morph_dict. Из него и были взяты исходные mrd и tab файлы словарей. Документация для них лежит здесь. В нашей java-библиотеке, эти исходные словари скомпилированы в бинарный формат, более удобный для быстрой загрузки в память и поиска. В качестве общего стандарта для библиотеки и компилятора, используется библиотека aot-bytecode.