假设我可以使用以下代码读取和编辑所有树的叶子标签:
for leaf in t.treepositions('leaves'):
t[leaf] = new_value
我如何添加一个新叶作为实际叶t [leaf]的子元素?可能是一个愚蠢的问题,但我对nltk没有太多经验。
答案 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)))
希望这有帮助。