Работа с тегами¶
Для того, чтоб проверить, есть ли в данном теге отдельная граммема
(или все граммемы из указанного множества), используйте оператор in:
>>> p.tag OpencorporaTag('VERB,perf,intr plur,past,indc') >>> 'NOUN' in p.tag # то же самое, что и {'NOUN'} in p.tag False >>> 'VERB' in p.tag True >>> {'VERB'} in p.tag True >>> {'plur', 'past'} in p.tag True >>> {'NOUN', 'plur'} in p.tag False
Кроме того, у каждого тега есть атрибуты, через которые можно получить
часть речи, число и другие характеристики:
>>> p.tag OpencorporaTag('VERB,perf,intr plur,past,indc') >>> p.tag.POS # Part of Speech, часть речи 'VERB' >>> p.tag.animacy # одушевленность None >>> p.tag.aspect # вид: совершенный или несовершенный 'perf' >>> p.tag.case # падеж None >>> p.tag.gender # род (мужской, женский, средний) None >>> p.tag.involvement # включенность говорящего в действие None >>> p.tag.mood # наклонение (повелительное, изъявительное) 'indc' >>> p.tag.number # число (единственное, множественное) 'plur' >>> p.tag.person # лицо (1, 2, 3) None >>> p.tag.tense # время (настоящее, прошедшее, будущее) 'past' >>> p.tag.transitivity # переходность (переходный, непереходный) 'intr' >>> p.tag.voice # залог (действительный, страдательный) None
Если запрашиваемая характеристика для данного тега не определена,
то возвращается None.
В написании граммем достаточно просто ошибиться; для борьбы с ошибками
pymorphy2 выкидывает исключение, если встречает недопустимую граммему:
>>> 'foobar' in p.tag Traceback (most recent call last): ... ValueError: Grammeme is unknown: foobar >>> {'NOUN', 'foo', 'bar'} in p.tag Traceback (most recent call last): ... ValueError: Grammemes are unknown: {'bar', 'foo'}
Это работает и для атрибутов:
«Разделенные» (причастие)
Морфологический разбор причастия
- I Часть речи: причастие;
- IIНачальная форма: разделить;
-
IIIМорфологические признаки:
- А. Постоянные признаки:
- страдательное
- невозвратное
- переходное
- прошедшее время
- совершенный вид
- Б. Непостоянные признаки:
-
- множественное число, полная форма
- именительный или винительный падеж
- А. Постоянные признаки:
- IV Синтаксическая роль:
определение
Полная и краткая форма страдательных причастий (совершенный вид)
полная | Какой?разделенный | Какое?разделенное | Какая?разделенная | Какие?разделенные |
краткая | Каков?разделен | Каково?разделено | Какова?разделена | Каковы?разделены |
Падежи страдательных причастий (совершенный вид)
именительный | Какой?разделенный | Какое?разделенное | Какая?разделенная | Какие?разделенные |
родительный | Какого?разделенного | Какого?разделенного | Какой?разделенной | Каких?разделенных |
дательный | Какому?разделенному | Какому?разделенному | Какой?разделенной | Каким?разделенным |
винительный | Какого? Какой?разделенного, разделенный | Какого? Какое?разделенное | Какую?разделенную | Каких? Какие?разделенные, разделенных |
творительный | Каким?разделенным | Каким?разделенным | Какой?разделенною, разделенной | Каким?разделенными |
предложный | О каком?разделенном | О каком?разделенном | О какой?разделенной | О каких?разделенных |
Разобрать другое слово
Введите слово для разбора:
Причастия совершенного вида образуются от глаголов совершенного вида и обозначают завершённое действие.
Совершенного вида могут быть и действительные, и страдательные причастия прошедшего времени:
- действительное: дедушка, починивший машину — дедушка, который (что сделал?) починил машину;
- страдательное: игрушка, купленная в магазине — игрушка, которую (что сделали?) купили в магазине.
Невозвратные причастия образуются от невозвратных глаголов (без постфикса -ся (-сь)). Могут быть:
- переходными и непереходными: мама, одевающая дочку (перех.); собака, идущая на поводке (неперех.);
- действительными и страдательными: дети, гуляющие в парке (действ.); обед, приготовленный бабушкой (страд.).
Переходные причастия образуются от переходных глаголов, обозначают, что действие направлено на другой объект. Могут сочетаться с существительными и местоимениями в винительном падеже (вопросы «кого?», «что?») без предлога.
Страдательные причастия обозначают признак предмета, над которым совершил действие кто-то другой.
Могут быть:
- прошедшего и настоящего времени: мороженое, купленное мамой (прош. вр.); звук, слышимый издалека (наст. вр.);
- совершенного (только в прошедшем времени) и несовершенного вида: чемодан, собранный в поездку (сов.); чемодан, собираемый в поездку (несов.);
- полными и краткими: посуда (какая?), вымытая дочкой (полн.); посуда (какова?) вымыта дочкой (крат.).
Страдательные причастия образуются только от переходных глаголов.
Полные причастия отвечают на вопросы «какой?», «какая?», «какое?», «какие?», бывают страдательными и действительными:
- действительные: папа (какой?), объясняющий задачу; бабушка (какая?), читавшая газету; дети (какие?), играющие в догонялки;
- страдательные: клубника (какая?), выращенная на грядке; трава (какая?), скошенная газонокосилкой; девочки (какие?), одетые нарядно; звук (какой?) слышимый издалека.
Морфологический анализ¶
Морфологический анализ — это определение характеристик слова
на основе того, как это слово пишется. При морфологическом анализе
не используется информация о соседних словах.
В pymorphy2 для морфологического анализа слов есть
класс .
>>> import pymorphy2 >>> morph = pymorphy2.MorphAnalyzer()
По умолчанию используется словарь для русского языка; чтобы вместо русского
включить украинский словарь, с помощью установите пакет
и используйте
>>> morph = pymorphy2.MorphAnalyzer(lang='uk')
Экземпляры класса обычно занимают порядка
15Мб оперативной памяти (т.к. загружают в память словари, данные
для предсказателя и т.д.); старайтесь организовать свой код так,
чтобы создавать экземпляр заранее и работать
с этим единственным экземпляром в дальнейшем.
С помощью метода можно разобрать отдельное слово:
>>> morph.parse('стали')
Note
если используете Python 2.x, то будьте внимательны — юникодные
строки пишутся как .
Метод возвращает один или несколько
объектов типа с информацией о том, как слово может быть
разобрано.
В приведенном примере слово “стали” может быть разобрано и как глагол
(“они стали лучше справляться”), и как существительное
(“кислородно-конверторный способ получения стали”).
На основе одной лишь информации о том, как слово пишется,
понять, какой разбор правильный, нельзя, поэтому анализатор может
возвращать несколько вариантов разбора.
У каждого разбора есть :
>>> p = morph.parse('стали')[ >>> p.tag OpencorporaTag('VERB,perf,intr plur,past,indc')
Тег — это набор , характеризующих данное слово.
Например, тег означает,
что слово — глагол () совершенного вида (),
непереходный (), множественного числа (),
прошедшего времени (), изъявительного наклонения ().
Доступные граммемы описаны тут: .
Кроме того, у каждого разбора есть ,
которую можно получить, обратившись к атрибутам
или :
>>> p.normal_form 'стать' >>> p.normalized Parse(word='стать', tag=OpencorporaTag('INFN,perf,intr'), normal_form='стать', score=1.0, methods_stack=((<DictionaryAnalyzer>, 'стать', 884, 0),))
Note
См. также: .
pymorphy2 умеет разбирать не только словарные слова; для несловарных слов
автоматически задействуется . Например,
попробуем разобрать слово “бутявковедами” — pymorphy2 поймет, что это
форма творительного падежа множественного числа существительного
“бутявковед”, и что “бутявковед” — одушевленный и мужского рода:
План морфологического разбора существительного
I. Часть речи. Общее грамматическое значение.
II. Морфологические признаки
а) постоянные признаки:
- собственное или нарицательное;
- одушевленное или неодушевленное;
- по значению конкретное или абстрактное, вещественное, собирательное;
- род
- число (у существительных только единственного или множественного числа);
- склонение
б) непостоянные признаки:
- падеж
- число
III. Синтаксическая роль
Источник изображения: http://razum.myinsales.ru
В предложении может быть несколько существительных. То существительное, которое требуется разобрать как часть речи, указывается цифрой 3 справа над ним. Приведем примеры морфологического разбора существительного.
Склонение слов¶
pymorphy2 умеет склонять (ставить в какую-то другую форму) слова.
Чтобы просклонять слово, нужно сначала понять, в какой форме оно
стоит в настоящий момент и какая у него .
Другими словами, нужно сперва разобрать слово и выбрать из предложенных
вариантов разбора правильный.
Для примера разберем слово “бутявка” и возьмем первый вариант разбора:
>>> butyavka = morph.parse('бутявка')[ >>> butyavka Parse(word='бутявка', tag=OpencorporaTag('NOUN,inan,femn sing,nomn'), normal_form='бутявка', score=1.0, methods_stack=((<DictionaryAnalyzer>, 'явка', 8, 0), (<UnknownPrefixAnalyzer>, 'бут')))
Получив объект , можно просклонять слово, используя
его метод :
>>> butyavka.inflect({'gent'}) # нет кого? (родительный падеж) Out: Parse(word='бутявки', tag=OpencorporaTag('NOUN,inan,femn sing,gent'), normal_form='бутявка', score=1.0, methods_stack=((<DictionaryAnalyzer>, 'явки', 8, 1), (<UnknownPrefixAnalyzer>, 'бут'))) >>> butyavka.inflect({'plur', 'gent'}) # кого много? Parse(word='бутявок', tag=OpencorporaTag('NOUN,inan,femn plur,gent'), normal_form='бутявка', score=1.0, methods_stack=((<DictionaryAnalyzer>, 'явок', 8, 8), (<UnknownPrefixAnalyzer>, 'бут')))
С помощью атрибута можно получить лексему слова: