diff --git a/UD_any/print_results.py b/UD_any/print_results.py index e4ac9cad3ecca5f72ed6c5bcdd09168b8ff2b787..7b1abe3c5e74a63fd765567edb6d1df63657a0ff 100755 --- a/UD_any/print_results.py +++ b/UD_any/print_results.py @@ -2,29 +2,57 @@ import glob import sys +import math if __name__ == "__main__" : metrics = ["LAS","UAS","Tokens","Sentences","UPOS","UFeats","Lemmas"] output = [] + outputByModelScore = dict() for pathToFile in glob.iglob("" + '*stdout') : - model = pathToFile.split(".")[0].split("_UD_")[0] - corpus = pathToFile.split(".")[0].split("_UD_")[1] + model = pathToFile.split("_UD_")[0] + corpus = pathToFile.split("_UD_")[1].split('.')[0] for line in open(pathToFile, "r") : for metric in metrics : if metric in line and metric[0] == line[0]: splited = line.strip().replace("|","").split() - output.append([corpus, splited[0], splited[3], model]) + + model = model.split('.')[0] + + if model not in outputByModelScore : + outputByModelScore[model] = dict() + if splited[0] not in outputByModelScore[model] : + outputByModelScore[model][splited[0]] = [] + + outputByModelScore[model][splited[0]].append([corpus, splited[0], splited[3], model]) + + for model in outputByModelScore : + for metric in outputByModelScore[model] : + score = 0.0 + standardDeviation = 0.0 + for exp in outputByModelScore[model][metric] : + score += float(exp[2]) + score /= len(outputByModelScore[model][metric]) + for exp in outputByModelScore[model][metric] : + standardDeviation += (float(exp[2])-score)**2 + standardDeviation /= len(outputByModelScore[model][metric])-1 + standardDeviation = math.sqrt(standardDeviation) + score = "%.2f[±%.2f]%%"%(score,standardDeviation) + output.append(outputByModelScore[model][metric][0]) + output[-1][2] = score 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