为什么 ConllChunkCorpusReader 中的 'chunk_types' 参数不起作用?

Why isn't working 'chunk_types' parameter in ConllChunkCorpusReader?

在NLTK的ConllChunkCorpusReaderclass中,有一个参数chunk_types。 我预计它会 return 来自给定文本的相对块,但我不知道这个 chunk_types 到底是干什么用的。

text = '''
Mr. NNP B-NP
Meador NNP I-NP
had VBD B-VP
been VBN I-VP
executive JJ B-NP
vice NN I-NP
president NN I-NP
of IN B-PP
Balcor NNP B-NP
. . O'''

ConllChunkCorpusReader 加载为 reader 后,我得到如下结果。

>>> reader.chunked_sents(chunk_types='NP')
[Tree('S', [Tree('NP', [('Mr.', 'NNP'), ('Meador', 'NNP')]), ('had', 'VBD'),
('been', 'VBN'), Tree('NP', [('executive', 'JJ'), ('vice', 'NN'), ('president', 'NN')]), 
('of', 'IN'), Tree('NP', [('Balcor', 'NNP')]), ('.', '.')])]

但我正在寻找只有 NP 块的输出,如下所示。

>>> reader.chunked_sents(chunk_types='NP')
[Tree('NP', [('Mr.', 'NNP'), ('Meador', 'NNP')]),
 Tree('NP', [('executive', 'JJ'), ('vice', 'NN'), ('president', 'NN')]),
 Tree('NP', [('Balcor', 'NNP')]), ('.', '.')])]

分块树是一棵最多三层的树:树的根(节点 S),其子节点是 个词项或块;每个块又是一棵深度为 1 的树,其子项为词汇项。

如果你仔细看,你会发现你的输入有一个 VP 块已经消失了:树的顶部直接连接到词汇项 ('had', 'VBD')('been', 'VBN')。这就是 chunk_types 所做的。

您可以通过打印或调用其 draw() 方法来可视化 reader 返回的树:

>>> trees = reader.chunked_sents(chunk_types='NP')
>>> print(t[0])
(S
  (NP Mr./NNP Meador/NNP)
  had/VBD
  been/VBN
  (NP executive/JJ vice/NN president/NN)
  of/IN
  (NP Balcor/NNP)
  ./.)