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'])])
首先我把树变成了一个列表: 您插入一个已经标记化的句子,它 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'])])