0

我想更改 NLTK 中已解析树对象中叶子的值。我使用以下代码。

t = Tree(line)
chomsky_normal_form(t, horzMarkov=2, vertMarkov=1, childChar = "|", parentChar = "^")
print t

for leaf in t.leaves():
    if leaf==k[0][1]:
        leaf = "newValue"
 print t

因为现在两个'print t'给出了树的完全相同的输出。我认为可以以这种方式为叶子设置一个值,但似乎我错了。我应该如何更新叶子的值?每个叶子的类是str。因此可以更改它们,但更新树中的对象似乎没有更新。

4

2 回答 2

2

您可以使用treepositions('leaves')( docs ) 获取树叶在树中的位置并直接在树中更改它。

t = Tree(line)
chomsky_normal_form(t, horzMarkov=2, vertMarkov=1, childChar = "|", parentChar = "^")

for leafPos in t.treepositions('leaves'):
    if t[leafPos] == k[0][1]:
        t[leafPos] = "newValue"
 print t
于 2014-12-03T14:41:35.033 回答
1

我以前没有使用 Tree 的经验,并且类文档没有建议改变叶子的明显方法。但是,查看叶子方法的来源,它似乎只是一种修饰形式的列表。我在控制台中摆弄了一分钟,我认为这可能会让你朝着正确的方向前进:

>>> t = Tree("(s (dp (d the) (np dog)) (vp (v chased) (dp (d the) (np cat))))")
>>> t.leaves()
['the', 'dog', 'chased', 'the', 'cat']
>>> t[0][0][0] = "newValue"
>>> t.leaves()
['newValue', 'dog', 'chased', 'the', 'cat']
于 2013-05-02T21:14:37.563 回答