在Python NLTK Tree中实现自下而上的搜索算法

时间:2016-06-23 23:02:25

标签: python algorithm tree nltk

我正在使用NLTK Parented Tree结构来访问父节点以及左右兄弟。

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

Look at my tree

在每个父母(VN和SENT),我必须检查他们的孩子是否是以***结尾的节点。图像中树的VN没有任何孩子,所以我一直在上升。 SENT有两个孩子以*** \结尾,所以我创建了一个新树(左边的那个)。

所以,我想做的事情(iteritavely)是:

  1. 从V标签开始,将结构从叶子扩展到根(添加父节点)。
  2. 检查每个点(每个父节点)是否有子节点的标签以***结尾。如果是这样,请创建一个新树,代表动词和我们刚刚搜索过的标签。这些标签保持其顺序:注意NP-S ***在NP-O ***之前出现
  3. 我一直在想如何做到这一点的pythonic方式,如果我能用Parented Trees做到这一点。

    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)) 
    

    如果有人告诉我他在左边提取树的方法,我真的很感激。先感谢您!

0 个答案:

没有答案