Задача поиска морфосинтаксической категории слов в предложении называется тегом части речи (или PoS).
В вашем случае вам, вероятно, также необходимо сначала токенизировать ваш текст.
Для этого вы можете использовать nltk , spacy или Stanford NLP tagger (среди других инструментов).
Обратите внимание, что в зависимости от используемой вами модели, могут существовать несколько меток для существительных (существительные в единственном числе, существительные во множественном числе, имена собственные) и глаголов (в зависимости от времени и лица).
Пример с NLTK:
import nltk
description = "This description describes apps with words."
tokenized_description = nltk.word_tokenize(description)
tagged_description = nltk.pos_tag(tokenized_description)
#tagged_description:
# [('This', 'DT'), ('description', 'NN'), ('describes', 'VBZ'), ('apps', 'RP'), ('with', 'IN'), ('words', 'NNS'), ('.', '.')]
# map the tags to a smaller set of tags
universal_tags_description = [(word, nltk.map_tag("wsj", "universal", tag)) for word, tag in tagged_description]
# universal_tags_description:
# [('This', 'DET'), ('description', 'NOUN'), ('describes', 'VERB'), ('apps', 'PRT'), ('with', 'ADP'), ('words', 'NOUN'), ('.', '.')]
filtered = [(word, tag) for word, tag in universal_tags_description if tag in {'NOUN', 'VERB'}]
# filtered:
# [('description', 'NOUN'), ('describes', 'VERB'), ('words', 'NOUN')]