3.6 复杂的键和值
我们可以使用具有复杂的键和值的默认字典。让我们研究一个词可能的标记的范围,给定词本身和它前一个词的标记。我们将看到这些信息如何被一个词性标注器使用。
>>> pos = defaultdict(lambda: defaultdict(int))
>>> brown_news_tagged = brown.tagged_words(categories='news', tagset='universal')
>>> for ((w1, t1), (w2, t2)) in nltk.bigrams(brown_news_tagged): ![[1]](/projects/nlp-py-2e-zh/Images/7a979f968bd33428b02cde62eaf2b615.jpg)
... pos[(t1, w2)][t2] += 1 ![[2]](/projects/nlp-py-2e-zh/Images/6ac827d2d00b6ebf8bbc704f430af896.jpg)
...
>>> pos[('DET', 'right')] ![[3]](/projects/nlp-py-2e-zh/Images/934b688727805b37f2404f7497c52027.jpg)
defaultdict(<class 'int'>, {'ADJ': 11, 'NOUN': 5})
这个例子使用一个字典,它的条目的默认值也是一个字典(其默认值是int()
,即 0)。请注意我们如何遍历已标注语料库的双连词,每次遍历处理一个词-标记对。每次通过循环时,我们更新字典pos
中的条目(t1, w2)
,一个标记和它 后面 的词。当我们在pos
中查找一个项目时,我们必须指定一个复合键,然后得到一个字典对象。一个词性标注器可以使用这些信息来决定词 right,前面是一个限定词时,应标注为ADJ
。