NLTK 将树转换为数组?

NLTK Convert Tree to Array?

首先我把树变成了一个列表: 您插入一个已经标记化的句子,它 returns 一棵树。

def LanguageCreateTree(tokenizedSentence):
    cp = nltk.RegexpParser(GRAMMAR)
    result = cp.parse(tokenizedSentence)
    result = str(result)
    print(result)

>>> A red cat with a hat
(S A/DT (VP red/VBN (NP cat/NN)) with/IN a/DT hat/JJ)

我将如何根据这个字符串制作一个包含列表的列表? 我需要它才能制作这样的列表:

[['A','DT'], ['VP', ['red','VBN'], ['NP', ['cat','NN']]], ['with','IN'], ['a','DT'], ['hat','JJ']]]

这比你想象的要容易得多:-) NLTK的Tree class 一个列表(更具体地说,它是从列表 class)。它具有您所追求的结构。只需对 cp.parse() 的结果使用普通列表方法即可。这是一个大概的例子(动态构建树以供说明):

>>> from nltk import Tree
>>> t = Tree.fromstring("(S A/DT (VP red/VBN (NP cat/NN)) with/IN a/DT hat/JJ)")

>>> print(t[1])
(VP red/VBN (NP cat/NN))
>>> print(t[1][0])   # Element 0 of the subtree at index 1
red/VBN

在这个例子中,我没有从 POS 标签中拆分单词;你的树会看起来不一样。另请注意 Tree 有很好的打印方式,但您可以使用 repr():

查看真实结构
>>> print(repr(t[1]))
Tree('VP', ['red/VBN', Tree('NP', ['cat/NN'])])