def read_tree(self, line_parents, line_label, line_words, line_relations): parents = list(map(int, line_parents.split())) if line_label: labels = list(map(self.parse_label, line_label.split())) else: labels = None words = line_words.split() relations = line_relations.split() trees = dict() root = None for i in range(1, len(parents) + 1): if i not in trees.keys(): idx = i prev = None while True: parent = parents[idx - 1] tree = Tree() if prev: tree.add_child(prev) trees[idx] = tree tree.idx = idx if labels: tree.gold_label = labels[idx - 1] else: tree.gold_label = None tree.word = words[idx - 1] tree.relation = relations[idx - 1] if parent in trees.keys(): trees[parent].add_child(tree) break elif parent == 0: root = tree break else: prev = tree idx = parent # helper for visualization root._viz_all_children = trees root._viz_sentence = words root._viz_relations = relations root._viz_labels = labels return root
def read_tree(self, line): """ Parse tree Return: Tree """ parents = list(map(int, line.split())) # sanity check assert max(parents) <= len( parents), 'Index should be smaller than length! {}'.format( ' '.join(parents)) trees = dict() root = None for i in range(1, len(parents) + 1): if i - 1 not in trees.keys() and parents[i - 1] != -1: idx = i prev = None while True: parent = parents[idx - 1] if parent == -1: break tree = Tree() if prev is not None: tree.add_child(prev) trees[idx - 1] = tree tree.idx = idx - 1 if parent - 1 in trees.keys(): trees[parent - 1].add_child(tree) break elif parent == 0: root = tree break else: prev = tree idx = parent return root