簡體   English   中英

更改NLTK樹葉中的POS標簽的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM