5.1 一元标注

一元标注器基于一个简单的统计算法:对每个标识符分配这个独特的标识符最有可能的标记。例如,它将分配标记JJ给词 frequent 的所有出现,因为 frequent 用作一个形容词(例如 a frequent word)比用作一个动词(例如 I frequent this cafe)更常见。一个一元标注器的行为就像一个查找标注器(4),除了有一个更方便的建立它的技术,称为训练。在下面的代码例子中,我们训练一个一元标注器,用它来标注一个句子,然后评估:

  1. >>> from nltk.corpus import brown
  2. >>> brown_tagged_sents = brown.tagged_sents(categories='news')
  3. >>> brown_sents = brown.sents(categories='news')
  4. >>> unigram_tagger = nltk.UnigramTagger(brown_tagged_sents)
  5. >>> unigram_tagger.tag(brown_sents[2007])
  6. [('Various', 'JJ'), ('of', 'IN'), ('the', 'AT'), ('apartments', 'NNS'),
  7. ('are', 'BER'), ('of', 'IN'), ('the', 'AT'), ('terrace', 'NN'), ('type', 'NN'),
  8. (',', ','), ('being', 'BEG'), ('on', 'IN'), ('the', 'AT'), ('ground', 'NN'),
  9. ('floor', 'NN'), ('so', 'QL'), ('that', 'CS'), ('entrance', 'NN'), ('is', 'BEZ'),
  10. ('direct', 'JJ'), ('.', '.')]
  11. >>> unigram_tagger.evaluate(brown_tagged_sents)
  12. 0.9349006503968017

我们训练一个UnigramTagger,通过在我们初始化标注器时指定已标注的句子数据作为参数。训练过程中涉及检查每个词的标记,将所有词的最可能的标记存储在一个字典里面,这个字典存储在标注器内部。