NLTK中的pos_tag不能正确标记句子

时间:2011-12-03 04:36:31

标签: nltk

我使用过这段代码:

# Step 1 : TOKENIZE
from nltk.tokenize import *
words = word_tokenize(text)

# Step 2 : POS DISAMBIG
from nltk.tag import *
tags = pos_tag(words)

标记两句话: 约翰非常好。约翰非常好吗?

第一句中的约翰是NN,而第二句中是约翰!那么,如何在不训练后退标记的情况下纠正pos_tag函数呢?

修改后的问题:

我在这里看到了NLTK标记器的演示http://text-processing.com/demo/tag/。当我尝试选择“English Taggers& Chunckers:Treebank”或“Brown Tagger”时,我会得到正确的标签。那么如何使用Brown Tagger而不进行培训呢?

2 个答案:

答案 0 :(得分:5)

简短的回答:你做不到。答案稍长:您可以使用手动创建的UnigramTagger覆盖特定单词。有关此方法的详细信息,请参阅我对custom tagging with nltk的回答。

答案 1 :(得分:0)

我尝试使用NLTK v3.0重现该错误。我认为现在nltk.pos_tag()是固定的。正如#Jacob所提到的,你可以使用Brown Corpus来训练一个tagger(在python中的nltk),如下所示;

from nltk.corpus import brown
train_sents = brown.tagged_sents()
unigram_tagger = nltk.UnigramTagger(train_sents)
tokens=nltk.word_tokenize("Is John very nice?")
tagged=unigram_tagger.tag(tokens)
tagged

但请注意,标签集取决于用于训练标记器的语料库。 nltk.pos_tag()的默认标记使用Penn Treebank Tag Set

相关问题