我是nltk和python的新手。我试图使用评估功能来测试我阅读的文本文档的准确性。这是我到目前为止所做的。
from nltk.tag import UnigramTagger
from nltk.corpus import treebank
from nltk.tokenize import word_tokenize
train_sents = treebank.tagged_sents()
tagger = UnigramTagger(train_sents)
text1 = "This is the first sentence. Now this is another one!
How many do you plan to write?"
words = word_tokenize(text1)
value = tagger.tag(words)
accuracy = tagger.evaluate(words)
我无法使用此计算精确度。我收到以下错误。
ValueError:需要多于1个值才能解包。
我不知道如何纠正这个问题。谢谢。
答案 0 :(得分:0)
使用NLTK训练和使用UnigramTagger
:
>>> from nltk.tag import UnigramTagger
>>> from nltk.corpus import treebank
>>> from nltk import word_tokenize
>>> sent1 = "This is the first sentence."
>>> train_sents = treebank.tagged_sents()
>>> tagger = UnigramTagger(train_sents)
>>> tagger.tag(word_tokenize(sent1))
[('This', u'DT'), ('is', u'VBZ'), ('the', u'DT'), ('first', u'JJ'), ('sentence', u'NN'), ('.', u'.')]
要评估标记器,您需要使用带注释的句子来验证标记器中的标记。 UnigramTagger.evaluate()
的输入是元组列表,其中元组中的第一项是单词,元组中的第二项是POS(即与UnigramTagger.train()
函数相同的输入类型) 。
。
参见https://github.com/nltk/nltk/blob/develop/nltk/tag/api.py#L53 因此,让我们首先将树库句子分成两部分,90%和10%:
>>> train_sents = treebank.tagged_sents()
>>> treebank_sents = treebank.tagged_sents()
>>> len(treebank_sents)
3914
>>> int(0.9 * len(treebank_sents))
3522
>>> train_sents = treebank.tagged_sents()[:3522]
>>> test_sents = treebank.tagged_sents()[3522:]
>>> tagger = UnigramTagger(train_sents)
>>> tagger.evaluate(test_sents)
0.8647328244274809