Beispiel #1
0
    def foreachChunk(self, dtree, chunk):
        bTree = None
        bChildTree = None
        if hasattr(chunk[0], "form") == True:
            i = 0
        else:
            i = len(chunk) - 1
        while i >= 0:
            if hasattr(chunk[i], "form") == True:
                bChildTree = self.buildBranch(chunk, self.key)
                self.key += bChildTree.size + 1
            else:
                bChildTree = self.foreachChunk(dtree, chunk[i])

            if bTree is None:
                bTree = bChildTree
            else:
                tempTree = BTree()
                # can be difine CCG here for node
                treeNode = TreeNode(self.key, NodeInfo("", ccgtag=[]))
                self.key += 1
                treeNode.parent = None
                tempTree.put(treeNode)
                tempTree.putTree(bTree, treeNode, 1)
                tempTree.putTree(bChildTree, treeNode, 0)

                bTree = tempTree
                bChildTree = None
            i -= 1
        return bTree
        ''' #non delete
Beispiel #2
0
    def buildBranchWithFirstChunk(self, cluster, key):
        primaryElement = cluster[0]
        cluster = sorted(cluster, key=lambda element: int(element.id))
        btreeChild = BTree()
        sizeCluster = len(cluster)
        if sizeCluster == 1:  # Btree with one noeud
            element = cluster[0]
            nodeInfo = NodeInfo(element.form,
                                element=element,
                                ccgtag=[],
                                dependency=element.deprel,
                                cluster=[int(element.id),
                                         int(element.id)])
            treeNode = TreeNode(key, nodeInfo)
            btreeChild.put(treeNode)
            key += 1
        elif len(cluster) >= 2:
            for i in range(0, sizeCluster):
                if btreeChild.length() < 2:

                    nodeInfo = NodeInfo("ccg", ccgtag=[])
                    treeNode = TreeNode(key, nodeInfo)
                    key = key + 1
                    btreeChild.put(treeNode)  # left: 0 root right:1
                    if cluster[i] is primaryElement:
                        element = cluster[i]
                        elementHead = self.findSmallestHeadinChunk(cluster)
                        elementId = self.findSmallestIdinChunk(cluster)
                        if int(element.id) == int(elementId.id) and int(
                                element.head) == int(elementHead.head):
                            nodeInfoLeaf = NodeInfo(element.form,
                                                    ccgtag=[],
                                                    element=element,
                                                    dependency=element.deprel,
                                                    cluster=[
                                                        int(element.id),
                                                        int(elementHead.head)
                                                    ])
                        elif int(element.id) != int(elementId.id) and int(
                                element.head) == int(elementHead.head):
                            nodeInfoLeaf = NodeInfo(element.form,
                                                    ccgtag=[],
                                                    element=element,
                                                    dependency=element.deprel,
                                                    cluster=[
                                                        int(elementId.id),
                                                        int(elementHead.head)
                                                    ])
                        elif int(element.id) == int(elementId.id) and int(
                                element.head) != int(elementHead.head):
                            nodeInfoLeaf = NodeInfo(element.form,
                                                    ccgtag=[],
                                                    element=element,
                                                    dependency=element.deprel,
                                                    cluster=[
                                                        int(elementId.id),
                                                        int(elementHead.head)
                                                    ])
                        else:
                            nodeInfoLeaf = NodeInfo(element.form,
                                                    ccgtag=[],
                                                    element=element,
                                                    dependency=element.deprel)
                    else:
                        nodeInfoLeaf = NodeInfo(cluster[i].form,
                                                ccgtag=[],
                                                element=cluster[i],
                                                dependency=None)
                    treeNodeLeaf = TreeNode(key, nodeInfoLeaf, parent=treeNode)
                    key += 1
                    btreeChild.put(treeNodeLeaf, position=0)

                else:
                    btreeChildTemp = BTree()
                    nodeInfo = NodeInfo("ccg", ccgtag=[])
                    treeNode = TreeNode(key, nodeInfo)
                    key += 1
                    btreeChildTemp.put(treeNode)  # left: 0 root right:1
                    if cluster[i] is primaryElement:
                        element = cluster[i]
                        elementHead = self.findSmallestHeadinChunk(cluster)
                        elementId = self.findSmallestIdinChunk(cluster)
                        if int(element.id) == int(elementId.id) and int(
                                element.head) == int(elementHead.head):
                            nodeInfoLeaf = NodeInfo(element.form,
                                                    ccgtag=[],
                                                    element=element,
                                                    dependency=element.deprel,
                                                    cluster=[
                                                        int(element.id),
                                                        int(elementHead.head)
                                                    ])
                        elif int(element.id) != int(elementId.id) and int(
                                element.head) == int(elementHead.head):
                            nodeInfoLeaf = NodeInfo(element.form,
                                                    ccgtag=[],
                                                    element=element,
                                                    dependency=element.deprel,
                                                    cluster=[
                                                        int(elementId.id),
                                                        int(elementHead.head)
                                                    ])
                        elif int(element.id) == int(elementId.id) and int(
                                element.head) != int(elementHead.head):
                            nodeInfoLeaf = NodeInfo(element.form,
                                                    ccgtag=[],
                                                    element=element,
                                                    dependency=element.deprel,
                                                    cluster=[
                                                        int(elementId.id),
                                                        int(elementHead.head)
                                                    ])
                        else:
                            nodeInfoLeaf = NodeInfo(element.form,
                                                    ccgtag=[],
                                                    element=element,
                                                    dependency=element.deprel)

                    else:
                        nodeInfoLeaf = NodeInfo(cluster[i].form,
                                                ccgtag=[],
                                                element=cluster[i],
                                                dependency=None)
                    treeNodeLeaf = TreeNode(key, nodeInfoLeaf, parent=treeNode)
                    key += 1
                    btreeChildTemp.put(treeNodeLeaf, position=0)
                    btreeChild.putTree(btreeChildTemp,
                                       btreeChild.getExtremeRightNode(),
                                       position=1)
        return btreeChild