def read_tree(self, line, label_line):
# FIXED: tree.idx, also tree dict() use base 1 as it was in dataset
# parents is list base 0, keep idx-1
# labels is list base 0, keep idx-1
parents = map(int,line.split()) # split each number and turn to int
trees = dict() # this is dict
root = None
labels = map(self.parse_dlabel_token, label_line.split())
for i in xrange(1,len(parents)+1):
#if not trees[i-1] and parents[i-1]!=-1:
if i 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] = tree
tree.idx = idx # -1 remove -1 here to prevent embs[tree.idx -1] = -1 while tree.idx = 0
tree.gold_label = labels[idx-1] # add node label
#if trees[parent-1] is not None:
if parent in trees.keys():
trees[parent].add_child(tree)
break
elif parent==0:
root = tree
break
else:
prev = tree
idx = parent
return root
评论列表
文章目录