-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathevaluate.py
More file actions
143 lines (115 loc) · 4.83 KB
/
Copy pathevaluate.py
File metadata and controls
143 lines (115 loc) · 4.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
import argparse
from nltk.translate import chrf_score, bleu_score
from nltk.metrics import precision, recall, f_measure
from jiwer import wer, cer
parser = argparse.ArgumentParser()
parser.add_argument('--original')
parser.add_argument('--corrected')
parser.add_argument('--transformed')
args = parser.parse_args()
def read_file(file, for_precis=False):
with open(file, 'r', encoding='utf-8') as infile:
for line in infile:
if for_precis:
yield line.rstrip()
else:
yield line.rstrip()
def read_file_as_string(file):
with open(file, 'r', encoding='utf-8') as infile:
return infile.read()
def evaluate_chrf(original_file, corrected_file, transformed_file):
original = list(read_file(original_file))
corrected = list(read_file(corrected_file))
transformed = list(read_file(transformed_file))
met_corr = set(read_file(corrected_file, for_precis=True))
met_trans = set(read_file(transformed_file, for_precis=True))
precis = precision(met_corr, met_trans)
rec = recall(met_corr, met_trans)
f_meas = f_measure(met_corr, met_trans)
orig_corr_chrf = round(chrf_score.corpus_chrf(corrected, original), 7)
corr_trns_chrf = round(chrf_score.corpus_chrf(corrected, transformed), 7)
scores = {
'Original/Corrected CHRF:': orig_corr_chrf,
'Corrected/Transformed CHRF:': corr_trns_chrf,
'Improvement:': round((corr_trns_chrf - orig_corr_chrf), 7),
'Prop improv:': round((corr_trns_chrf - orig_corr_chrf)/(1 - orig_corr_chrf), 7),
'F-Measure': round(f_meas, 7),
'Precision': round(precis, 7),
'Recall': round(rec, 7)
}
return scores
def evaluate_bleu(original_file, corrected_file, transformed_file):
scores = {
}
#original_file = list([sent] for sent in original_file)
#original = list(original_file)
#corrected_file = list(corrected_file)
original_file = list(original_file)
corrected_file = list([sent] for sent in corrected_file)
original_corrected_score = bleu_score.corpus_bleu(corrected_file, original_file)
#corrected_file = [[sent] for sent in corrected_file]
transformed_file = list(transformed_file)
corrected_transformed_score = bleu_score.corpus_bleu(corrected_file, transformed_file)
scores['Original/Corrected'] = round(original_corrected_score, 7)
scores['Corrected/Transformed'] = round(corrected_transformed_score, 7)
scores['Improvement:'] = round((corrected_transformed_score - original_corrected_score), 7)
scores['Prop improv:'] = round((corrected_transformed_score - original_corrected_score)/(1 - original_corrected_score), 7)
return scores
def evaluate_wer(original_file, corrected_file, transformed_file):
scores = {
}
original_file = list([sent if sent else '#' for sent in original_file])
corrected_file = list([sent if sent else '#' for sent in corrected_file])
transformed_file = list([sent if sent else '#' for sent in transformed_file])
original_corrected_wer = wer(corrected_file, original_file)
corrected_transformed_wer = wer(corrected_file, transformed_file)
scores['Original/Corrected WER'] = original_corrected_wer
scores['Corrected/Transformed WER'] = corrected_transformed_wer
scores['WERR'] = round(1-(corrected_transformed_wer/original_corrected_wer), 7)
return scores
def evaluate_cer(original_file, corrected_file, transformed_file):
scores = {
}
original_file = list([sent if sent else '#' for sent in original_file])
corrected_file = list([sent if sent else '#' for sent in corrected_file])
transformed_file = list([sent if sent else '#' for sent in transformed_file])
print(corrected_file)
original_corrected_cer = cer(corrected_file, original_file)
corrected_transformed_cer = cer(corrected_file, transformed_file)
scores['Original/Corrected CER'] = original_corrected_cer
scores['Corrected/Transformed CER'] = corrected_transformed_cer
scores['CERR'] = round(1-(corrected_transformed_cer/original_corrected_cer), 7)
return scores
if __name__=='__main__':
chrf = """
########
# CHRF #
########
"""
bleu = """
########
# BLEU #
########
"""
_cer = """
#######
# CER #
#######
"""
_wer = """
#######
# WER #
#######
"""
print(chrf)
for i in evaluate_chrf(args.original, args.corrected, args.transformed).items():
print(i)
print(bleu)
for i in evaluate_bleu(read_file(args.original), read_file(args.corrected), read_file(args.transformed)).items():
print(i)
print(_wer)
for i in evaluate_wer(read_file(args.original), read_file(args.corrected), read_file(args.transformed)).items():
print(i)
print(_cer)
for i in evaluate_cer(read_file(args.original), read_file(args.corrected), read_file(args.transformed)).items():
print(i)