0
假設我可以閱讀和編輯所有樹的葉子標籤,使用下面的代碼:插入子節點
for leaf in t.treepositions('leaves'):
t[leaf] = new_value
我怎麼可以添加一個新的一頁作爲實際葉T的孩子[葉]?可能是一個愚蠢的問題,但我對nltk沒有太多的經驗。
假設我可以閱讀和編輯所有樹的葉子標籤,使用下面的代碼:插入子節點
for leaf in t.treepositions('leaves'):
t[leaf] = new_value
我怎麼可以添加一個新的一頁作爲實際葉T的孩子[葉]?可能是一個愚蠢的問題,但我對nltk沒有太多的經驗。
你一定會使用treepositions方法嗎?如果不;如果你只是循環遍歷樹的所有子樹(如果需要遞歸地),你可以在任何點插入一些東西(一棵樹實際上只是一個列表表示)。
下面是就將此改性的VP(因爲沒有apparant理由:))爲例:
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)))
希望這有助於。
是的!謝謝,這正是我正在尋找的。我還有一個相關的問題:我可以添加一個通用位置的子樹嗎?讓我們來舉個例子吧,比如說,在(V saw)左邊添加一個子樹,永遠是VP的一個子節點(所以我想添加一個left_sibling到「saw」節點)。那可能嗎? – 2015-04-07 14:47:29
是的,只是改變插入語句的位置(我通過在枚舉循環的索引處插入來欺騙了一下,但插入在子樹上,在這種情況下碰巧是正確的)。將插入行修改爲如下所示以插入到動詞的左側:st.insert(0,nltk.tree.Tree('ADV',['just'])) – Igor 2015-04-07 15:00:04