[英]NLTK: conllstr2tree does not work properly (Python3)
可以在http://www.nltk.org/book/ch07.html的第3.1部分中说明我正在尝试做的示例
本质上是这样的:
import nltk
text = " ..... " #Whatever the text should be
nltk.chunk.conllstr2tree(text, chunk_types=['NP']).draw()
这将根据给定的text
生成树。
我编写的代码试图使用文本文件中的输入。 因此,在打开它之后,我使用readlines
获取它的String版本。
import nltk, re, pprint
f = open('sample.txt', 'r')
f1 = f.read().strip()
f2 = ' '.join(f1.split())
nltk.chunk.conllstr2tree(f2, chunk_types=['NP']).draw()
我得到的错误是:
---------------------------------------------------------------------------
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华尔街日报),该格式应如下所示(不带斜杠):
token / POS Tag / IOB-Chunk Type
因此,您将需要几个额外的步骤:
提供一个示例代码片段(对于一个SO问题)是不合理的,因为这需要大量工作,但是希望这可以为您指明正确的方向!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.