Подтвердить что ты не робот

Python NLTK: как помечать предложения с упрощенным набором тегов части речи?

Глава 5 Python Книга NLTK дает этот пример тегирования слов в предложении:

>>> text = nltk.word_tokenize("And now for something completely different")
>>> nltk.pos_tag(text)
[('And', 'CC'), ('now', 'RB'), ('for', 'IN'), ('something', 'NN'), ('completely', 'RB'), ('different', 'JJ')]

nltk.pos_tag вызывает теггер по умолчанию, который использует полный набор тегов. Позже в главе представлен упрощенный набор тегов.

Как я могу пометить предложения с помощью этого упрощенного набора тегов части речи?

Также я правильно понял теггер, т.е. могу ли я изменить набор тегов, который использует теггер, как я прошу, или мне следует сопоставить теги, которые он возвращает, на упрощенном наборе, или мне нужно создать новый теггер из новый, просто помеченный корпус?

4b9b3361

Ответ 1

Чтобы упростить теги от тега по умолчанию, вы можете использовать nltk.tag.simplify.simplify_wsj_tag, например:

>>> import nltk
>>> from nltk.tag.simplify import simplify_wsj_tag
>>> tagged_sent = nltk.pos_tag(tokens)
>>> simplified = [(word, simplify_wsj_tag(tag)) for word, tag in tagged_sent]

Ответ 2

Обновлено, если кто-то сталкивается с одной и той же проблемой. С тех пор NLTK обновлен до "универсального" набора тегов, источника здесь. После того, как вы отметили свой текст, используйте map_tag для упрощения тегов.

import nltk
from nltk.tag import pos_tag, map_tag

text = nltk.word_tokenize("And now for something completely different")
posTagged = pos_tag(text)
simplifiedTags = [(word, map_tag('en-ptb', 'universal', tag)) for word, tag in posTagged]
print(simplifiedTags)
# [('And', u'CONJ'), ('now', u'ADV'), ('for', u'ADP'), ('something', u'NOUN'), ('completely', u'ADV'), ('different', u'ADJ')]