<p><strong>解决方案:</strong>来自模块<code>nltk</code>的<code>Tree</code>类</p>
<p>(又名自然语言工具包)</p>
<p><strong>进行实际分析</p>
<p>这是您的输入:</p>
<pre><code>input = '( Root ( AB ( ABC ) ( CBA ) ) ( CD ( CDE ) ( FGH ) ) )'
</code></pre>
<p>你可以简单地分析它:</p>
<pre><code>from nltk import Tree
t = Tree.fromstring(input)
</code></pre>
<p><strong>玩解析树</strong></p>
<pre><code>>>> t.label()
'Root'
>>> len(t)
2
>>> t[0]
Tree('AB', [Tree('ABC', []), Tree('CBA', [])])
>>> t[1]
Tree('CD', [Tree('CDE', []), Tree('FGH', [])])
>>> t[0][0]
Tree('ABC', [])
>>> t[0][1]
Tree('CBA', [])
>>> t[1][0]
Tree('CDE', [])
>>> t[1][1]
Tree('FGH', [])
</code></pre>
<p>如您所见,您可以将每个节点视为子树列表。</p>
<p><strong>漂亮地打印树</strong></p>
<pre><code>>>> t.pretty_print()
Root
_______|________
AB CD
___|___ ___|___
ABC CBA CDE FGH
| | | |
... ... ... ...
</code></pre>
<p><strong>获得想要的输出</strong></p>
<pre><code>from sys import stdout
def showtree(t):
if (len(t) == 0):
return
stdout.write(t.label() + ' ->')
for c in t:
stdout.write(' ' + c.label())
stdout.write('\n')
for c in t:
showtree(c)
</code></pre>
<p><strong>用法:</strong></p>
<pre><code>>>> showtree(t)
Root -> AB CD
AB -> ABC CBA
CD -> CDE FGH
</code></pre>
<p><strong>安装模块</p>
<pre><code>pip install nltk
</code></pre>
<p>(如果需要,请使用<code>sudo</code>)</p>