NLTK: conllstr2tree 在 Python3 中无法正常工作

说明我尝试做的事情的例子可以在 http://www.nltk.org/book/ch07.html 的第3.1部分找到。

其本质内容如下:

这将根据给定的text生成树。
我编写的代码试图使用来自文本文件的输入。因此,在打开文件后,我使用readlines获取其字符串版本。

我遇到的错误是:

---------------------------------------------------------------------------ValueError                                Traceback (most recent call last)<ipython-input-17-768af8cd2f77> in <module>()      3 f1 = f.read().strip()      4 f2 = ' '.join(f1.split())----> 5 nltk.chunk.conllstr2tree(f2, chunk_types=['NP']).draw()/usr/local/lib/python3.4/dist-packages/nltk/chunk/util.py in conllstr2tree(s, chunk_types, root_label)    380         match = _LINE_RE.match(line)    381         if match is None:--> 382             raise ValueError('Error on line %d' % lineno)    383         (word, tag, state, chunk_type) = match.groups()    384 ValueError: Error on line 0

回答:

您从sample.txt传递了原始字符串数据,修剪了空白字符f1,然后按空格进行分词f2

如果您查看NTLK书中的示例,其中提到了分块方法,

nltk.chunk.conllstr2tree(text, chunk_types=['NP']).draw()

text变量是一系列IOB标记的数据,如下所示:

text = """   he PRP B-NP   accepted VBD B-VP   the DT B-NP   position NN I-NP   of IN B-PP   vice NN B-NP   chairman NN I-NP   of IN B-PP   Carlyle NNP B-NP   Group NNP I-NP   , , O   a DT B-NP   merchant NN I-NP   banking NN I-NP   concern NN I-NP   . . O"""

根据源代码文档,conllstr2tree方法:

返回一个单句的分块结构,该句子以给定的CONLL 2000风格字符串编码。此函数将CoNLL IOB字符串转换为树。它使用指定的分块类型(默认为NP、PP和VP),并创建一个以S节点(默认)为根的树。

问题在于您传递的格式(CoNLL 2000 Wall Street Journal)不正确,应该如下所示(不带斜杠):

token / POS Tag / IOB-Chunk Type

因此,您需要进行几个额外的步骤:

  1. 为每个单词找到可能的词性标签。
  2. 找到分块类型
  3. 添加适当的IOB标签。

对于一个SO问题来说,提供一个示例代码片段是不合理的,因为这需要大量的工作,但希望这能为您指明正确的方向!

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注