• 4.1 默认标注器

    4.1 默认标注器

    最简单的标注器是为每个词符分配同样的标记。这似乎是一个相当平庸的一步,但它建立了标注器性能的一个重要的底线。为了得到最好的效果,我们用最有可能的标记标注每个词。让我们找出哪个标记是最有可能的(现在使用未简化标记集):

    1. >>> tags = [tag for (word, tag) in brown.tagged_words(categories='news')]
    2. >>> nltk.FreqDist(tags).max()
    3. 'NN'

    现在我们可以创建一个将所有词都标注成NN的标注器。

    1. >>> raw = 'I do not like green eggs and ham, I do not like them Sam I am!'
    2. >>> tokens = word_tokenize(raw)
    3. >>> default_tagger = nltk.DefaultTagger('NN')
    4. >>> default_tagger.tag(tokens)
    5. [('I', 'NN'), ('do', 'NN'), ('not', 'NN'), ('like', 'NN'), ('green', 'NN'),
    6. ('eggs', 'NN'), ('and', 'NN'), ('ham', 'NN'), (',', 'NN'), ('I', 'NN'),
    7. ('do', 'NN'), ('not', 'NN'), ('like', 'NN'), ('them', 'NN'), ('Sam', 'NN'),
    8. ('I', 'NN'), ('am', 'NN'), ('!', 'NN')]

    不出所料,这种方法的表现相当不好。在一个典型的语料库中,它只标注正确了八分之一的标识符,正如我们在这里看到的:

    1. >>> default_tagger.evaluate(brown_tagged_sents)
    2. 0.13089484257215028

    默认的标注器给每一个单独的词分配标记,即使是之前从未遇到过的词。碰巧的是,一旦我们处理了几千词的英文文本之后,大多数新词都将是名词。正如我们将看到的,这意味着,默认标注器可以帮助我们提高语言处理系统的稳定性。我们将很快回来讲述这个。