在Python NLTK树中实现自底向上搜索算法

在Python NLTK树中实现自底向上搜索算法,python,algorithm,tree,nltk,Python,Algorithm,Tree,Nltk,我正在使用NLTK父树结构来访问父节点和左右兄弟节点 在第一步中,我必须以自下而上的方式遍历节点:我总是从V(动词)开始,然后遍历树,直到到达根(SENT) 在每个父节点(VN和SENT)上,我都必须检查它们的子节点是否以***结尾。图中树的VN没有任何子节点,因此我继续向上。SENT有两个以***\结尾的子级,因此我创建了一个新树(左边的那个) 因此,我想做的(iteritavely)是: 从V标记开始,将结构从叶子生长到根(添加父节点) 在每个点(每个父节点)检查子节点是否有以***结尾的

我正在使用NLTK父树结构来访问父节点和左右兄弟节点

在第一步中,我必须以自下而上的方式遍历节点:我总是从V(动词)开始,然后遍历树,直到到达根(SENT)

在每个父节点(VN和SENT)上,我都必须检查它们的子节点是否以***结尾。图中树的VN没有任何子节点,因此我继续向上。SENT有两个以***\结尾的子级,因此我创建了一个新树(左边的那个)

因此,我想做的(iteritavely)是:

  • 从V标记开始,将结构从叶子生长到根(添加父节点)
  • 在每个点(每个父节点)检查子节点是否有以***结尾的标签。如果是这样,请创建一个新的树来表示我们刚才搜索的动词和标签。这些标签保持顺序:注意NP-S***在NP-O之前***
  • 我一直在想什么是蟒蛇式的方法来做这件事,如果我能用父母的树来做的话

    Parented Tree一直告诉我无法插入已具有父级的树。有没有其他方法可以接触父母和兄弟姐妹

    这是我试过的东西。离我要创建的树还很远-

    def CreateVerbTree(tree):
        for tree in tree.subtrees(filter=lambda t: t.height()==2):
            if tree.label()=="V":
            newtree = ParentedTree(tree.parent().label(), [tree.copy()])
            print(newtree.parent())
            print([x for x in newtree.subtrees()])
            return newtree
    
    Test:
    VerbTree(tr)
    
    None
    [ParentedTree('VN', [ParentedTree('V', ['read'])]), ParentedTree('V', ['read'])]
    
    (VN (V read)) 
    

    如果有人告诉我他提取左边那棵树的方法,我会非常感激。提前谢谢你

    谢谢你的编辑,Mayur你好,我正在寻找解决方案。只是想指出,您的左树遗漏了PONCT子树,这是故意的吗?还是你忘了加上?非常感谢!是的,这是故意的,因为标签没有以***结尾?有什么想法吗?谢谢你的编辑,Mayur嗨,我正在寻找解决办法。只是想指出,您的左树遗漏了PONCT子树,这是故意的吗?还是你忘了加上?非常感谢!是的,这是故意的,因为标签没有以***结尾?有什么想法吗?