【问题标题】:using the evaluate feature in nltk tagged documents在 nltk 标记文档中使用评估功能
【发布时间】:2016-04-05 22:54:01
【问题描述】:

我是 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 个值才能解压。

我不知道如何纠正这个问题。谢谢。

【问题讨论】:

  • 标记器评估输入是一个元组列表 =)

标签: python nlp nltk n-gram pos-tagger


【解决方案1】:

使用 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() 的输入是一个元组列表,其中元组中的第一项是单词,元组中的第二项是词性(即与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

【讨论】:

  • 感谢您的回复。我看到“评估”命令适用于语料库中已经存在的数据。我想知道是否有办法让它适用于我的句子,即语料库中不存在的数据。
  • 你必须手动注释你的语料库才能使用evaluate()
猜你喜欢
  • 1970-01-01
  • 2015-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多