使用nltk.chunk.tagstr2tree
,“我们可以将一串带括号的标记文本分成块和未分块的标记,然后生成一个树。”:
>>> s = "[ Pierre/NNP Vinken/NNP ] ,/, [ 61/CD years/NNS ] old/JJ ,/, will/MD join/VB [ the/DT board/NN ] ./."
>>> t = nltk.chunk.tagstr2tree(s, chunk_label='NP')
>>> t.pprint()
(S
(NP Pierre/NNP Vinken/NNP)
,/,
(NP 61/CD years/NNS)
old/JJ
,/,
will/MD
join/VB
(NP the/DT board/NN)
./.)
而不是上面的浅层解析结构,假设我们现在在下面有一个完整解析的树。
>>> print(treebank.parsed_sents()[0])
(S
(NP-SBJ
(NP (NNP Pierre) (NNP Vinken)) # want to add some NE info, namely "NAME".
(, ,)
(ADJP (NP (CD 61) (NNS years)) (JJ old)) # "AGE"
(, ,))
(VP
(MD will)
(VP
(VB join)
(NP (DT the) (NN board)) # "Organization"
(PP-CLR (IN as) (NP (DT a) (JJ nonexecutive) (NN director)))
(NP-TMP (NNP Nov.) (CD 29))))
(. .))
现在我想在Pierre Vinken
,61 years old
和the board
的相应令牌上添加一些信息,即“姓名”,“年龄”和“组织”。
所以它基本上类似于第一个例子的分块任务,但区别在于我想在已经完全分配的树上注释自定义NE标签。
有没有方便的方法(像NLTK中的语料库阅读器这样的工具)在这个已解析的树上添加NE标签?我想手动完成此操作。
也许this paper的数字1很好地说明了我的需求。 它说“知道一个短语是一个命名实体,以及实体的类型,可能有助于使实体的结构背景和内部结构正确”, 因此它试图“使用命名实体信息扩充解析树,以输入我们的学习算法”。
我想在FULL-PARSED树上手动注释我的自定义NE标签,因为我也相信它有助于理解NE的语法结构,并且对将来训练NER chunker很有用。
任何提示或相关工具/参考将不胜感激。 非常感谢你!