• 3.1 读取 IOB 格式与 CoNLL2000 语料库

    3.1 读取 IOB 格式与 CoNLL2000 语料库

    使用corpus模块,我们可以加载已经标注并使用 IOB 符号划分词块的《华尔街日报》文本。这个语料库提供的词块类型有NPVPPP。正如我们已经看到的,每个句子使用多行表示,如下所示:

    1. he PRP B-NP
    2. accepted VBD B-VP
    3. the DT B-NP
    4. position NN I-NP
    5. ...

    tree_images/ch07-tree-2.png

    我们可以使用 NLTK 的 corpus 模块访问较大量的已经划分词块的文本。CoNLL2000 语料库包含 27 万词的《华尔街日报文本》,分为“训练”和“测试”两部分,标注有词性标记和 IOB 格式词块标记。我们可以使用nltk.corpus.conll2000访问这些数据。下面是一个读取语料库的“训练”部分的第 100 个句子的例子:

    1. >>> from nltk.corpus import conll2000
    2. >>> print(conll2000.chunked_sents('train.txt')[99])
    3. (S
    4. (PP Over/IN)
    5. (NP a/DT cup/NN)
    6. (PP of/IN)
    7. (NP coffee/NN)
    8. ,/,
    9. (NP Mr./NNP Stone/NNP)
    10. (VP told/VBD)
    11. (NP his/PRP$ story/NN)
    12. ./.)

    正如你看到的,CoNLL2000 语料库包含三种词块类型:NP词块,我们已经看到了;VP词块如 has already delivered;PP块如 because of。因为现在我们唯一感兴趣的是NP词块,我们可以使用chunk_types参数选择它们:

    1. >>> print(conll2000.chunked_sents('train.txt', chunk_types=['NP'])[99])
    2. (S
    3. Over/IN
    4. (NP a/DT cup/NN)
    5. of/IN
    6. (NP coffee/NN)
    7. ,/,
    8. (NP Mr./NNP Stone/NNP)
    9. told/VBD
    10. (NP his/PRP$ story/NN)
    11. ./.)