Отфильтровать существительные из текста при помощи mystem2
Я обрабатываю текст, мне нужно оставить в нем только существительные в нейтральной форме. В pymystem3 существует функция грамматического разбора, вызываемая командой analyze:
mystem.analyze("однажды в студеную зимнюю пору я из лесу вышел, был сильный мороз")
Выдает:
[{'analysis': [{'lex': 'однажды', 'wt': 1, 'gr': 'ADV='}], 'text': 'однажды'},
{'text': ' '},
{'analysis': [{'lex': 'в', 'wt': 0.9999917878, 'gr': 'PR='}], 'text': 'в'},
{'text': ' '},
{'analysis': [{'lex': 'студеный', 'wt': 1, 'gr': 'A=вин,ед,полн,жен'}],
'text': 'студеную'},
{'text': ' '},
{'analysis': [{'lex': 'зимний', 'wt': 1, 'gr': 'A=вин,ед,полн,жен'}],
'text': 'зимнюю'},
{'text': ' '},
{'analysis': [{'lex': 'пора', 'wt': 1, 'gr': 'S,жен,неод=вин,ед'}],
'text': 'пору'},
{'text': ' '},
{'analysis': [{'lex': 'я', 'wt': 0.9999716281, 'gr': 'SPRO,ед,1-л=им'}],
'text': 'я'},
{'text': ' '},
{'analysis': [{'lex': 'из', 'wt': 0.9999999775, 'gr': 'PR='}], 'text': 'из'},
{'text': ' '},
{'analysis': [{'lex': 'лес',
'wt': 0.995766539,
'gr': 'S,муж,неод=(дат,ед|парт,ед|местн,ед)'}],
'text': 'лесу'},
{'text': ' '},
{'analysis': [{'lex': 'выходить',
'wt': 0.9509142232,
'gr': 'V,нп=прош,ед,изъяв,муж,сов'}],
'text': 'вышел'},
{'text': ', '},
{'analysis': [{'lex': 'быть', 'wt': 1, 'gr': 'V,нп=прош,ед,изъяв,муж,несов'}],
'text': 'был'},
{'text': ' '},
{'analysis': [{'lex': 'сильный',
'wt': 1,
'gr': 'A=(вин,ед,полн,муж,неод|им,ед,полн,муж)'}],
'text': 'сильный'},
{'text': ' '},
{'analysis': [{'lex': 'мороз',
'wt': 0.9922846271,
'gr': 'S,муж,неод=(вин,ед|им,ед)'}],
'text': 'мороз'},
{'text': '\n'}]
Мне нужно отфильтровать этот результат, чтобы программа выдавала только текст значения "lex", если "gr" начинается с "S", то есть если слово является существительным.
Ответы (1 шт):
Автор решения: Владислав
→ Ссылка
Отфильтровать значения проще всего генератором. Должна сработать вот такая конструкция:
just_nouns = [x['text'] for x in analyse if 'analysis' in x and x['analysis'][0]['gr'].startswith('S')]
print (just_nouns)
Где analyse это ваша структура. Но не исключено, что если покопаться в документации библиотеки, то там найдутся готовые функции для подобных задач.