[英]Change the value of the POS tag in NLTK Tree leaf
我有一個nltk.tree.Tree對象。
t = Tree('S', [Tree('NP', [('I','tag')]), Tree('VP', [Tree('V', [('saw','tag')]), Tree('NP', [('him','tag')])])])
我想使用下面的函數遍歷它,並更改每個葉子的POS標簽(即上例中的“標簽”)。
def traverse(tree):
try:
tree.label()
except AttributeError:
tree[-1] = ('another_tag')
print(tree)
else:
for child in tree:
traverse(child)
不幸的是,葉子中的每個POS標簽都不能更改,因為包括它的元組對象是不可變的。
如何在示例中更改POS標簽而不影響其原始樹結構?
我對這種樹結構還很陌生,請向您展示一些清晰的摘錄,介紹如何處理嵌套結構。
實際上,nltk樹只是一個列表。 使用枚舉,您可以遍歷它並為位置ia分配新值。 就像是:
def traverse(tree):
for index, subtree in enumerate(tree):
if type(subtree) == nltk.tree.Tree:
traverse(subtree)
elif type(subtree) == tuple:
newVal = (subtree[0], subtree[1].lower())
subtree = newVal
tree[index] = subtree
因為您要處理元組(不可變),所以不能僅替換POStag,而必須創建一個新的元組。 上面的代碼僅使標記變為小寫,但您可以將任何您喜歡的內容作為newVal元組的第二個元素。
希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.