在nltk树中插入子节点

时间:2015-04-03 15:57:42

标签: python tree nltk

假设我可以使用以下代码读取和编辑所有树的叶子标签:

for leaf in t.treepositions('leaves'):
  t[leaf] = new_value

我如何添加一个新叶作为实际叶t [leaf]的子元素?可能是一个愚蠢的问题,但我对nltk没有太多经验。

1 个答案:

答案 0 :(得分:1)

您是否一定要使用treepositions方法?如果不;如果你只是循环遍历树的所有子树(如果需要的话递归),你可以在任何点插入一些东西(nltk树实际上只是'只是列表表示)。

这是一个将修饰符添加到VP的示例(没有明确的原因:)):

import nltk
t = nltk.tree.Tree.fromstring("(S (NP I) (VP (V saw) (NP him)))")
print(t)
for index, st in enumerate(t.subtrees()):
    if st.label() == 'VP':
        st.insert(index, nltk.tree.Tree('ADV', ['yesterday']))
print(t)

输出:

(S (NP I) (VP (V saw) (NP him)))
(S (NP I) (VP (V saw) (NP him) (ADV yesterday)))

希望这有帮助。