Skip to content
Snippets Groups Projects
Select Git revision
  • 0a29cc3d6544adff5c4eb33e1e1022aed71197d1
  • master default protected
2 results

print_results.py

Blame
  • 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("")