2011-04-26 7 views
18

Rozdział 5 Pythonie NLTK book daje ten przykład tagowania słów w zdaniu:Python NLTK: Jak oznaczać zdania za pomocą uproszczonego zestawu znaczników części mowy?

>>> 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 wywołuje domyślny Taggera który wykorzystuje pełen zestaw znaczników. W dalszej części rozdziału wprowadzono kod simplified set of tags.

Jak mogę oznaczyć zdania za pomocą tego uproszczonego zestawu znaczników części mowy?

Również zrozumiałem tagger poprawnie, tj. Czy mogę zmienić zestaw znaczników, którego tagger używa, jak pytam, czy powinienem odwzorować znaczniki, które zwraca do uproszczonego zestawu, czy też powinienem utworzyć nowego znacznika z nowego, po prostu otagowanego korpusu?

Odpowiedz

18

Aby uprościć tagi z domyślnym Taggera można użyć nltk.tag.simplify.simplify_wsj_tag, tak:

>>> 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] 
+0

Świetne, dzięki. –

22

Zaktualizowany, w przypadku gdy ktoś biegnie w poprzek tego samego problemu. Od tego czasu NLTK został uaktualniony do "uniwersalnego" zestawu tagów, źródło here. Po otagowaniu tekstu użyj parametru map_tag, aby uprościć tagi.

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')] 
+2

Mój Boże, dziękuję za to! –

Powiązane problemy