3.1 读取 IOB 格式与 CoNLL2000 语料库
使用corpus
模块,我们可以加载已经标注并使用 IOB 符号划分词块的《华尔街日报》文本。这个语料库提供的词块类型有NP
,VP
和PP
。正如我们已经看到的,每个句子使用多行表示,如下所示:
he PRP B-NP
accepted VBD B-VP
the DT B-NP
position NN I-NP
...
我们可以使用 NLTK 的 corpus 模块访问较大量的已经划分词块的文本。CoNLL2000 语料库包含 27 万词的《华尔街日报文本》,分为“训练”和“测试”两部分,标注有词性标记和 IOB 格式词块标记。我们可以使用nltk.corpus.conll2000
访问这些数据。下面是一个读取语料库的“训练”部分的第 100 个句子的例子:
>>> from nltk.corpus import conll2000
>>> print(conll2000.chunked_sents('train.txt')[99])
(S
(PP Over/IN)
(NP a/DT cup/NN)
(PP of/IN)
(NP coffee/NN)
,/,
(NP Mr./NNP Stone/NNP)
(VP told/VBD)
(NP his/PRP$ story/NN)
./.)
正如你看到的,CoNLL2000 语料库包含三种词块类型:NP
词块,我们已经看到了;VP
词块如 has already delivered;PP
块如 because of。因为现在我们唯一感兴趣的是NP
词块,我们可以使用chunk_types
参数选择它们:
>>> print(conll2000.chunked_sents('train.txt', chunk_types=['NP'])[99])
(S
Over/IN
(NP a/DT cup/NN)
of/IN
(NP coffee/NN)
,/,
(NP Mr./NNP Stone/NNP)
told/VBD
(NP his/PRP$ story/NN)
./.)