首先,我将树变成了一个列表: 您插入一个已经标记化的句子,它会返回一棵树。
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
类是 一个列表(更具体地说,它派生自列表类)。它具有您所追求的结构。只需对 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'])])
关于python - NLTK 将树转换为数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32548732/