in src/pixparse/utils/json_utils.py [0:0]
def cal_f1(self, preds: List[dict], answers: List[dict]):
"""
Calculate global F1 accuracy score (field-level, micro-averaged) by counting all true positives, false negatives and false positives
"""
total_tp, total_fn_or_fp = 0, 0
for pred, answer in zip(preds, answers):
pred, answer = self.flatten(self.normalize_dict(pred)), self.flatten(self.normalize_dict(answer))
for field in pred:
if field in answer:
total_tp += 1
answer.remove(field)
else:
total_fn_or_fp += 1
total_fn_or_fp += len(answer)
return total_tp / (total_tp + total_fn_or_fp / 2)