2011-04-26 106 views
18

Python的NLTK book的第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調用默認惡搞,它採用了全套的標籤。在本章後面介紹simplified set of tags

如何使用這個簡化的詞性標籤集標記句子?

我也正確理解了標記器,也就是說,我可以更改標記器使用的標記集,或者我應該將它返回的標記映射到簡化集,還是應該創建新的標記器來自一個新的,簡單標記的語料庫?

回答

18

爲了簡化從默認惡搞標籤,你可以使用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] 
+0

非常感謝。 – 2011-04-26 20:40:13

22

更新,在任何情況下,在同樣的問題上運行。 NLTK已經升級爲「通用」標記集,來源here。標記完文字後,使用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')] 
+2

我的天啊,謝謝你! – 2015-10-20 22:09:06