186320032004

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))


Report Page