in src/pixparse/utils/json_utils.py [0:0]
def cal_acc(self, pred: dict, answer: dict):
"""
Calculate normalized tree edit distance(nTED) based accuracy.
1) Construct tree from dict,
2) Get tree distance with insert/remove/update cost,
3) Divide distance with GT tree size (i.e., nTED),
4) Calculate nTED based accuracy. (= max(1 - nTED, 0 ).
"""
pred = self.construct_tree_from_dict(self.normalize_dict(pred))
answer = self.construct_tree_from_dict(self.normalize_dict(answer))
return max(
0,
1
- (
zss.distance(
pred,
answer,
get_children=zss.Node.get_children,
insert_cost=self.insert_and_remove_cost,
remove_cost=self.insert_and_remove_cost,
update_cost=self.update_cost,
return_operations=False,
)
/ zss.distance(
self.construct_tree_from_dict(self.normalize_dict({})),
answer,
get_children=zss.Node.get_children,
insert_cost=self.insert_and_remove_cost,
remove_cost=self.insert_and_remove_cost,
update_cost=self.update_cost,
return_operations=False,
)
),
)