import json from tools.framenet.naive_identifier import FrameIdentifier test_file_path = '/home/gqin2/data/framenet/full/test.jsonl' test_sentences = [ json.loads(line) for line in open(test_file_path) ] test_set = [] for ann in test_sentences: for fr in ann['frame']: test_set.append((fr['name'], ann['text'][fr['target'][0]: fr['target'][-1]+1], fr['lu'])) fi = FrameIdentifier() tp = fp = fn = 0 fails = [] for frame, target_words, lu in test_set: pred = fi(target_words) if frame in pred: tp += 1 fp += len(pred) - 1 else: fp += len(pred) fn += 1 fails.append((frame, target_words, pred, lu)) fails.sort(key=lambda x: x[0]) for frame, target_words, pred, lu in fails: print(frame, ' '.join(target_words), ' '.join(pred), lu, sep='\t') print(f'tp={tp}, fp={fp}, fn={fn}') print(f'precision={tp/(tp+fp)}') print(f'recall={tp/(tp+fn)}')