2011-12-03 41 views
4

我已經使用這個代碼:pos_tag在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,而在第二個是VB!那麼,我們如何校正pos_tag函數而不需要訓練補償標記器呢?

修改問題:

我看到NLTK標註器在這裏http://text-processing.com/demo/tag/的示範。當我試圖選擇「英文標記加註& Chunckers:樹庫」或「布朗標註器」,我得到正確的標籤。那麼如何在沒有訓練的情況下使用Brown Tagger?

+0

參見http://stackoverflow.com/questions/30821188/python-ntlk-pos-tag-not-returnig-the-correct-pos – alvas

回答

4

簡短的回答:你不能。稍長的答案:您可以使用手動創建的UnigramTagger覆蓋特定的單詞。有關此方法的詳細信息,請參閱我的回答custom tagging with nltk

+0

我使用train_tagger.py訓練了text-processing.com上的所有標記器來自https://github.com/japerk/nltk-trainer的腳本。因此,您可以自己培訓標籤工,或者如果您有興趣購買標籤器,請通過http://text-processing.com/contact/與我聯繫。 – Jacob

0

我試圖用NLTK v3.0重現這個bug。我認爲現在nltk.pos_tag()是固定的。作爲#Jacob提到的,你可以用布朗語料庫訓練捉(NLTK在Python)如下:

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