Словоизменение¶
Каждый разбор знает свою лексему - все формы слова с той же леммой. По разбору можно получить список форм, нужную форму по признакам UD или форму, согласованную с количеством. Лексема определяется леммой, поэтому следует соглашениям UD о леммах: у «Ивановой» лексема - женские формы фамилии «Иванова», у «важнейшего» - формы превосходной степени.
Словоформы - в написании словаря: в нижнем регистре и с буквой «ё», если она есть в словаре; о формах угаданных слов - в разделе Незнакомые слова.
Методы¶
Формы лексемы¶
forms()
Формы лексемы в порядке словаря - такие же разборы, как у analyze, с вероятностью 1. Варианты форм отличаются пометами: «кошкою» - V-oy, второй предложный падеж «в лесу» - loc2 (признак Case=Loc у него тот же, что у «о лесе»): «лес» с inflect(Case="Loc") дает «лесе», а «лесу» выбирается из forms() по помете loc2.
from rumorph import Analyzer
morph = Analyzer()
cat = morph.analyze("кошка")[0]
[form.word for form in cat.forms()]
form = cat.forms()[8]
form.word, form.feats
['кошка',
'кошки',
'кошке',
'кошку',
'кошкой',
'кошкою',
'кошке',
'кошки',
'кошек',
'кошкам',
'кошек',
'кошками',
'кошках']
('кошек', {'Animacy': 'Anim', 'Case': 'Gen', 'Gender': 'Fem', 'Number': 'Plur'})
Форма по признакам¶
inflect(**feats)
Форма лексемы с заданными признаками UD. Признаки, которые не названы, по возможности сохраняются: «кошка» в родительном падеже - «кошки», а не «кошек». Краткая форма, одушевленный винительный («нового») и инклюзив повелительного наклонения («сделаем») берутся, только если их просят: Variant="Short", Animacy="Anim", Person="1". Будущее время «быть» в SynTagRus - Tense=Pres с пометой futr: «будет» во множественном числе - «будут», а inflect(Tense="Fut") у «быть» бросает FormNotFoundError - будущее берется из forms() по помете futr.
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
**feats |
str |
- | Признаки UD и их значения: Case="Gen", Number="Plur" |
Исключения:
FormNotFoundError- у лексемы нет формы с такими признаками;ValueError- признака или значения нет в словаре (опечатка вродеCase="Genitive"), сообщение перечисляет допустимые;TypeError- значение признака, которое не строка.
cat.inflect(Case="Gen"), cat.inflect(Case="Gen", Number="Plur")
verb = morph.analyze("читал")[0]
verb.inflect(Gender="Fem"), verb.inflect(VerbForm="Inf")
verb.inflect(Tense="Pres", Person="3", Number="Plur")
morph.analyze("новый")[0].inflect(Degree="Cmp")
('кошки', 'кошек')
('читала', 'читать')
'читают'
'новее'
Согласование с количеством¶
agree(number)
Форма существительного, прилагательного, местоименного прилагательного или причастия, согласованная с количеством. Падеж разбора сохраняется: «рублях» с числом 2 - «рублях» («о 2 рублях»), винительный падеж одушевленных - «вижу двух котов». Прилагательные и существительные, которые склоняются как прилагательные, согласуются по роду: «две новые», «два новых», «два учёных», «две столовые». После числа берется счетная форма: «5 вольт», «5 лет», «5 человек». У слов без единственного числа берется множественное: «1 сутки», «2 суток». Женские фамилии на -ова, -ина согласуются как прилагательные: «две Ивановы», «пять Ивановых». Отрицательное количество согласуется как его модуль, дробное («1,5», Decimal("2.5"), Fraction(3, 2)) - родительный падеж единственного числа в любом падеже: «1,5 рубля», «о 2,5 рубля».
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
number |
int / float / Decimal / Fraction |
- | Количество; целое - любое число с __index__, а также Decimal и Fraction без дробной части |
Исключения:
FormNotFoundError- слово не согласуется с количеством (глагол, наречие) или у лексемы нет нужной формы («5 молока»);TypeError- количество, которое не число;ValueError- бесконечность или NaN.
ruble = morph.analyze("рубль")[0]
[f"{n} {ruble.agree(n)}" for n in (1, 2, 5, 21)]
morph.analyze("сутки")[0].agree(2)
['1 рубль', '2 рубля', '5 рублей', '21 рубль']
'суток'