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