Skip to content
Snippets Groups Projects
Commit c1c2761c authored by Franck Dary's avatar Franck Dary
Browse files

Added option mean to printResults

parent 29a2cb33
No related branches found
No related tags found
No related merge requests found
#! /usr/bin/env python3
import argparse
import glob
import sys
import math
import copy
################################################################################
if __name__ == "__main__" :
parser = argparse.ArgumentParser()
parser.add_argument("dir", type=str, default="",
help="Directory containing the .stdout (scores) files.")
parser.add_argument("--score", "-s", type=str, default="F1",
help="Name of the score to report (F1,L1,L2,R2).")
parser.add_argument("--metrics", type=str, default="Sentences,LAS,UAS,Lemmas,UFeats,UPOS,Words,Tokens",
help="Comma separated list of metrics.")
parser.add_argument("--mean", "-m", default=False, action="store_true",
help="compute the mean of metrics.")
args = parser.parse_args()
scoreTypes = {
"F1" : ["F1.score","%",-1,"%.2f"],
"R2" : ["","",-3,"%.4f"],
......@@ -14,15 +27,17 @@ if __name__ == "__main__" :
"L2" : ["L2","",-2,"%.2f"],
}
scoreType = scoreTypes["F1"] if len(sys.argv) < 3 else scoreTypes[sys.argv[2].upper()]
scoreType = scoreTypes[args.score.upper()]
metrics = ["Sentences","LAS","UAS","Lemmas","UFeats","UPOS","Words","Tokens"]
metrics = args.metrics.split(',')
usedMetrics = []
mean = args.mean
output = []
outputByModelScore = dict()
filenamesErr = glob.iglob((sys.argv[1]+"/"if len(sys.argv) > 1 else "") + '*stderr')
filenamesOut = glob.iglob((sys.argv[1]+"/"if len(sys.argv) > 1 else "") + '*stdout')
filenamesErr = glob.iglob((args.dir+"/"if len(args.dir) > 1 else "") + '*stderr')
filenamesOut = glob.iglob((args.dir+"/"if len(args.dir) > 1 else "") + '*stdout')
for pathToFile in filenamesErr :
for line in open(pathToFile, "r") :
......@@ -46,10 +61,31 @@ if __name__ == "__main__" :
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[scoreType[2]], model])
if metric not in outputByModelScore[corpus][model] :
outputByModelScore[corpus][model][metric] = []
if metric not in usedMetrics :
usedMetrics.append(metric)
outputByModelScore[corpus][model][metric].append([corpus, metric, splited[scoreType[2]], model])
for metric in metrics :
if metric not in usedMetrics :
print("WARNING : Unused metric '%s'"%metric, file=sys.stderr)
if mean :
metricName = ",".join(metrics)
for corpus in outputByModelScore :
for model in outputByModelScore[corpus] :
nbRedo = len((list(outputByModelScore[corpus][model].values())[0]))
newMetrics = copy.deepcopy(list(outputByModelScore[corpus][model].values())[0])
for elem in newMetrics :
elem[2] = 0
elem[1] = metricName
for redo in range(nbRedo) :
for metric in outputByModelScore[corpus][model] :
newMetrics[redo][2] += float(outputByModelScore[corpus][model][metric][redo][2])
newMetrics[redo][2] /= len(metrics)
outputByModelScore[corpus][model] = {metricName : newMetrics}
for corpus in outputByModelScore :
for model in outputByModelScore[corpus] :
......@@ -73,7 +109,7 @@ if __name__ == "__main__" :
score = score.replace('-','')
output.append(outputByModelScore[corpus][model][metric][0])
output[-1][2] = score
output[-1] = [output[-1][0]] + [metrics.index(output[-1][1])] + [output[-1][1]] + [baseScore] + output[-1][2:]
output[-1] = [output[-1][0]] + ([0] if mean else [metrics.index(output[-1][1])]) + [output[-1][1]] + [baseScore] + output[-1][2:]
if len(output) == 0 :
print("ERROR : Output length is 0", file=sys.stderr)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment