- 4.2 Trees
4.2 Trees
tree 是一组连接的加标签节点,从一个特殊的根节点沿一条唯一的路径到达每个节点。下面是一棵树的例子(注意它们标准的画法是颠倒的):
(S(NP Alice)(VP(V chased)(NP(Det the)(N rabbit))))
虽然我们将只集中关注语法树,树可以用来编码任何同构的超越语言形式序列的层次结构(如形态结构、篇章结构)。一般情况下,叶子和节点值不一定要是字符串。
在 NLTK 中,我们通过给一个节点添加标签和一系列的孩子创建一棵树:
>>> tree1 = nltk.Tree('NP', ['Alice'])>>> print(tree1)(NP Alice)>>> tree2 = nltk.Tree('NP', ['the', 'rabbit'])>>> print(tree2)(NP the rabbit)
我们可以将这些不断合并成更大的树,如下所示:
>>> tree3 = nltk.Tree('VP', ['chased', tree2])>>> tree4 = nltk.Tree('S', [tree1, tree3])>>> print(tree4)(S (NP Alice) (VP chased (NP the rabbit)))
下面是树对象的一些的方法:
>>> print(tree4[1])(VP chased (NP the rabbit))>>> tree4[1].label()'VP'>>> tree4.leaves()['Alice', 'chased', 'the', 'rabbit']>>> tree4[1][1][1]'rabbit'
复杂的树用括号表示难以阅读。在这些情况下,draw方法是非常有用的。它会打开一个新窗口,包含树的一个图形表示。树显示窗口可以放大和缩小,子树可以折叠和展开,并将图形表示输出为一个 postscript 文件(包含在一个文档中)。
>>> tree3.draw()

