在nltk树中插入子节点

Insert child node in nltk tree

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

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

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

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

这是一个向 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)))

希望对您有所帮助。