2011-04-26 115 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