| 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)}') | |