在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)))
希望对您有所帮助。
假设我可以使用以下代码读取和编辑所有树叶标签:
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)))
希望对您有所帮助。