Select Git revision
print_results.py
Franck Dary authored
print_results.py 2.96 KiB
#! /usr/bin/env python3
import glob
import sys
import math
if __name__ == "__main__" :
metrics = ["LAS","UAS","Tokens","Words","Sentences","UPOS","UFeats","Lemmas"]
output = []
outputByModelScore = dict()
for pathToFile in glob.iglob("" + '*stderr') :
for line in open(pathToFile, "r") :
if "Error" in line or "ERROR" in line or "error" in line :
print(pathToFile,":", file=sys.stderr)
print("\t"+line,end="", file=sys.stderr)
for pathToFile in glob.iglob("" + '*stdout') :
model = pathToFile.split('.')[0]
corpus = (".".join(pathToFile.split('.')[1:])).split('.')[0]
index = (".".join(pathToFile.split('.')[1:])).split('.')[1]
if corpus not in outputByModelScore :
outputByModelScore[corpus] = dict()
for line in open(pathToFile, "r") :
for metric in metrics :
if metric in line and metric[0] == line[0]:
splited = line.strip().replace("|","").split()
if model not in outputByModelScore[corpus] :
outputByModelScore[corpus][model] = dict()
if splited[0] not in outputByModelScore[corpus][model] :
outputByModelScore[corpus][model][splited[0]] = []
outputByModelScore[corpus][model][splited[0]].append([corpus, splited[0], splited[3], model])
for corpus in outputByModelScore :
for model in outputByModelScore[corpus] :
for metric in outputByModelScore[corpus][model] :
score = 0.0
for exp in outputByModelScore[corpus][model][metric] :
score += float(exp[2])
score /= len(outputByModelScore[corpus][model][metric])
standardDeviation = 0.0
if len(outputByModelScore[corpus][model][metric]) > 1 :
for exp in outputByModelScore[corpus][model][metric] :
standardDeviation += (float(exp[2])-score)**2
standardDeviation /= len(outputByModelScore[corpus][model][metric])
standardDeviation = math.sqrt(standardDeviation)
if standardDeviation > 0 :
score = "%.2f[±%.2f]%%"%(score,standardDeviation)
else :
score = "%.2f%%"%score
output.append(outputByModelScore[corpus][model][metric][0])
output[-1][2] = score
if len(output) == 0 :
print("ERROR : Output length is 0", file=sys.stderr)
print(" did you run evaluate.sh ?", file=sys.stderr)
exit(1)
maxColLens = [0 for _ in range(len(output[0]))]
output = [["Corpus","Metric","F1.score","Model"]] + output
for line in output :
for i in range(len(line)) :
maxColLens[i] = max(maxColLens[i], len(line[i]))
output = output[1:]
output.sort()
output = [["Corpus","Metric","F1.score","Model"]] + output
dashLine = '-' * 80
for i in range(len(output)) :
if i > 0 and output[i][0] != output[i-1][0] :
print(dashLine)
elif i > 0 and output[i][1] != output[i-1][1] :
print("")
for j in range(len(output[i])) :
padding = (' '*(maxColLens[j]-len(output[i][j])))+" "*3
print(output[i][j], end=padding)
print("")