Python NLTK: как помечать предложения с помощью упрощенного набора меток части речи? - PullRequest
24 голосов
/ 26 апреля 2011

Глава 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 вызывает тег по умолчанию, который использует полный набор тегов,Позже в этой главе будет представлен упрощенный набор тегов * 1007. *.

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

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

Ответы [ 3 ]

27 голосов
/ 17 ноября 2014

Обновлено, если кто-то сталкивается с той же проблемой. С тех пор 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')]
20 голосов
/ 26 апреля 2011

Чтобы упростить теги из тегера по умолчанию, вы можете использовать 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]
3 голосов
/ 15 марта 2018

Вы можете просто установить атрибут tagset в 'универсальный' в методе pos_tag.

In [39]: from nltk import word_tokenize, pos_tag
...: 
...: text = word_tokenize("Here is a simple way of doing this")
...: tags = pos_tag(text, tagset='universal')
...: print(tags)
...: 
[('Here', 'ADV'), ('is', 'VERB'), ('a', 'DET'), ('simple', 'ADJ'), ('way', 'NOUN'), ('of', 'ADP'), ('doing', 'VERB'), ('this', 'DET')]
...