如何使用NLTK获得更好的词性标注结果
我正在学习用Python的nltk库。我尝试对一些句子进行词性标注,但得到的结果不太准确。我该怎么做才能改善这些结果呢?
broke = NN
flimsy = NN
crap = NN
另外,我发现很多多余的词被错误地标记为名词(NN)。我该如何过滤掉这些词,以获得更好的结果呢?
1 个回答
10
给你一些背景,说明你是如何得到这些结果的。比如,我在处理短语“They broke flimsy crap”时,得到了不同的结果:
import nltk
text=nltk.word_tokenize("They broke flimsy crap")
nltk.pos_tag(text)
[('They', 'PRP'), ('broke', 'VBP'), ('flimsy', 'JJ'), ('crap', 'NN')]
无论如何,如果你觉得有很多词被错误地标记为'NN'(名词),你可以尝试其他方法,特别是针对那些被标记为'NN'的词。比如,你可以使用一些合适的标注语料库,并用三元组标注器进行分类。(实际上,作者在http://nltk.googlecode.com/svn/trunk/doc/book/ch05.html中也用二元组的方式做了类似的事情。)
大概是这样的:
pos_tag_results=nltk.pos_tag(your_text) #tagged sentences with pos_tag
trigram_tagger=nltk.TrigramTagger(tagged_corpora) #build trigram tagger based on your tagged_corpora
trigram_tag_results=trigram_tagger(your_text) #tagged sentences with trigram tagger
for i in range(0,len(pos_tag_results)):
if pos_tag_results[i][1]=='NN':
pos_tag_results[i][1]=trigram_tag_results[i][1]#for 'NN' take trigram_tagger instead
告诉我这样做是否能改善你的结果。