Нестор — библиотека для работы со словоформами на русском языке. Аналог pymorphy2
, но для C#. Основана на словаре словоформ М.Хагена.
- Поиск леммы и грамматического описания слова по словоформе
- Постановка слова в заданную форму
- Токенизация и лемматизация строк
- Информация об ударениях
Install-Package Nestor -Version 0.5.2
using Nestor;
var nMorph = new NestorMorph(); // загрузка библиотеки занимает некоторое время
Word[] words = nMorph.WordInfo("стали");
В words
будет массив объектов Word
со всеми вариантами слова (слова считаются разными, если у них разные леммы — то есть нормальные формы). Например, для слова стали это два варианта: существительное сталь и глагол стать.
string Stem; // неизменяемая часть слова
WordForm[] Forms; // список всех форм слова
WordForm Lemma; // нормальная форма слова
Tag Tag; // тег — грамматическое описание нормальной формы слова (см. ниже)
string Word; // строковое представление текущей формы слова
int Stress; // номер слога, на который приходится ударение, начиная с 1
Tag Tag; // тег — грамматическое описание формы (см. ниже)
string[] Grammemes; // граммемы словоформы в сыром виде из словаря
Описание значений перечислений приведены ниже
Pos Pos; // часть речи
Gender Gender; // род
Number Number; // число
Case Case; // падеж
Tense Tense; // время
Person Person; // лицо
Часть речи | Значение |
---|---|
Отсутствует* | Pos.None |
Имя существительное | Pos.Noun |
Имя прилагательное | Pos.Adjective |
Глагол | Pos.Verb |
Наречие | Pos.Adverb |
Имя числительное | Pos.Numeral |
Причастие | Pos.Participle |
Деепричастие | Pos.Transgressive |
Местоимение | Pos.Pronoun |
Предлог | Pos.Preposition |
Союз | Pos.Conjunction |
Частица | Pos.Particle |
Междометие | Pos.Interjection |
Предикатив | Pos.Predicative |
Вводное слово | Pos.Parenthesis |
* при нормальной работе слов без части речи не должно быть
Падеж | Значение |
---|---|
Отсутствует | Case.None |
Именительный | Case.Nominative |
Родительный | Case.Genitive |
Дательный | Case.Dative |
Винительный | Case.Accusative |
Творительный | Case.Instrumental |
Предложный | Case.Prepositional |
Местный (на мосту) | Case.Locative |
Частичный/партитив (чаю) | Case.Partitive |
Звательный (старче) | Case.Vocative |
Род | Значение |
---|---|
Отсутствует | Gender.None |
Мужской | Gender.Masculine |
Женский | Gender.Feminine |
Средний | Gender.Neuter |
Общий (коллега) | Gender.Common |
Число | Значение |
---|---|
Отсутствует | Number.None |
Единственное | Number.Singular |
Множественное | Number.Plural |
Время | Значение |
---|---|
Отсутствует | Tense.None |
Прошедшее | Tense.Past |
Настоящее | Tense.Present |
Будущее | Tense.Future |
Инфинитив | Tense.Infinitive |
Лицо | Значение |
---|---|
Отсутствует | Person.None |
Первое | Person.First |
Второе | Person.Second |
Третье | Person.Third |
const string w = "красивый";
var info = _nMorph.WordInfo(w)[0];
var f = info.ClosestForm(gender: Gender.Feminine, @case: Case.Accusative, number: Number.Singular);
Console.WriteLine(f.Word); // красивую
const string w = "красить";
var info = _nMorph.WordInfo(w)[0];
var f = info.ClosestForm(gender: Gender.Feminine, number: Number.Singular, tense: Tense.Past);
Console.WriteLine(f.Word); // красила
Документация дополняется
Данный проект использует для хранения словоформ ациклический граф с помощью библиотеки DawgSharp. По условиям лицензии данной библиотеки Нестор тоже попадает под GPL. Но если вы напишете свою релизацию Dawg, мою часть кода можете брать по MIT.