python - NLTK 将树转换为数组?

标签 python list tree nltk python-3.4

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

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/

相关文章:

Javascript - 从树中递归删除某种类型的节点,但重新附加并传播符合条件的子节点

Python 和 PyQt5 : Camera and Changing Screen

python - 随机行走 Pandas

python - 在 Python 中保存二维数组或列表的 CSV 文件的最佳方法?

javascript - IE 的列表方法的替代方案?

在Dart中列出take()与getRange()

python - 从一大组 python 列表中,找到具有最多共同元素的 2 个列表 - Python/Pandas

java - 数组/列表问题

algorithm - 在 LogSpace 中检测给定图是否为树

Java:使前缀树记住最后一个不为空的值