186320032004
import pymorphy2
morph = pymorphy2.MorphAnalyzer()
class WordParsing():
def __init__(self, smt, word, x):
self.word = word
self.mrp = smt[x]
if self.part_of_speech() == 'существительное':
self.s_parsing()
elif self.part_of_speech() == 'глагол':
self.gl_parsing()
def mood(self):
if 'indc' in self.mrp.tag:
return 'Изъявительное'
else:
return 'Повелительное'
def pere(self):
if 'tran' in self.mrp.tag:
return 'переходный'
else:
return 'непероходный'
def viev(self):
if 'perf' in self.mrp.tag:
return 'Совершенный'
else:
return "Несовершенный"
def spry(self):
if self.mrp.inflect({'pres', '2per'})[-3] == 'и':
return 'II'
else:
return 'I'
def gl_parsing(self):
print(f'I.{self.word} - {self.part_of_speech()}')
print(f'II.Начальная форма - {self.normalform()}')
print(
f'Постоянные признаки: {self.viev()} вид, {self.pere()}, {self.spry()} спряжение.')
print(
f'Непостоянные признаки: {self.mood()} наклонение, {self.num()} число')
if
print(
f'III.Может быть различным членом предложения, смотрите по контексту.')
def s_parsing(self):
print(f'I.{self.word} - {self.part_of_speech()}')
print(f'II.Начальная форма - {self.normalform()}')
print(
f'Постоянные признаки: {self.proper_or_common()}, {self.anim()}, {self.gender()} род, {self.declination()}.')
print(f'Непостоянные признаки: {self.case()} падеж, {self.num()} число')
print(
f'III.Может быть различным членом предложения, смотрите по контексту.')
def part_of_speech(self):
if 'NOUN' in self.mrp.tag:
return 'существительное'
if 'ADJF' in self.mrp.tag or 'ADJS' in self.mrp.tag or 'COMP' in self.mrp.tag:
return 'прил.'
if 'VERB' in self.mrp.tag or 'INFN' in self.mrp.tag:
return 'глагол'
if 'PRTF' in self.mrp.tag or 'PRTS' in self.mrp.tag:
return 'прич.'
if 'GRND' in self.mrp.tag:
return 'дееприч.'
if 'NUMR' in self.mrp.tag or "Anum" in self.mrp.tag:
return 'числ.'
if 'NPRO' in self.mrp.tag:
return 'мест.'
def normalform(self):
return self.mrp.normal_form
def anim(self):
if 'anim' in self.mrp.tag:
return 'одушевлённое'
else:
return 'неодушевлённое'
def proper_or_common(self):
if 'Name' in self.mrp.tag:
return 'собственное'
elif 'Surn' in self.mrp.tag:
return 'собственное'
elif 'Patr' in self.mrp.tag:
return 'собственное'
elif 'Geox' in self.mrp.tag:
return 'собственное'
elif 'Orgn' in self.mrp.tag:
return 'собственное'
elif 'Trad' in self.mrp.tag:
return 'собственное'
else:
return 'нарицательное'
def gender(self):
if 'masc' in self.mrp.tag:
return 'мужской'
elif 'femn' in self.mrp.tag:
return 'женский'
elif 'neut' in self.mrp.tag:
return 'средний'
else:
return 'общий'
def declination(self):
if (self.gender() == 'мужской' or self.gender() == 'женский') and (
self.normalform()[-1] == 'а' or self.normalform()[-1] == 'я'):
return '1 склонение'
elif (self.gender() == 'мужской') or (
self.gender() == 'средний' and self.normalform()[
-1] == 'о') or (
self.gender() == 'средний' and self.normalform()[-1] == 'е'):
return '2 склонение'
else:
return '3 склонение'
def case(self):
if 'nomn' in self.mrp.tag:
return 'Именительный'
elif 'gent' in self.mrp.tag:
return 'Родительный'
elif 'datv' in self.mrp.tag:
return 'Дательный'
elif 'accs' in self.mrp.tag:
return 'Винительный'
elif 'ablt' in self.mrp.tag:
return 'Творительный'
elif 'loct' in self.mrp.tag:
return 'Предложный'
def num(self):
if 'sing' in self.mrp.tag:
return 'Единственное'
else:
return 'Множественное'
word = input()
if len(morph.parse(word)) > 1:
print(
f"Примечание. Слово '{word}' имеет различные морфологические признаки в зависимости от контекста "
f"словосочетания или предложения, в которое слово входит. Помимо подробного анализа ниже, возможно ещё "
f"несколько вариантов морфологических признаков слова '{word}'.")
print()
for i in range(len(morph.parse(word))):
print(i + 1, "разбор: ")
WordParsing(morph.parse(word), word, i)
print()
print(morph.parse(word))