import java.io.File; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.util.*; public class javaAccuracyCalculator{ //Read in log.txt, grab first item in array of each line //Counter for everytime have readline //Calculate accuracy rate public static void main(String[] args) { try { if (args.length != 3) { System.out.println("Usage: imageClassifier "); } else { Date d = new Date(); String inputFilename = args[0]; String classifierType = args[1]; String outputFilename = args[2]; FileReader fileReader = new FileReader(inputFilename); BufferedReader buf = new BufferedReader(fileReader); FileWriter fw = new FileWriter(outputFilename,true); String line = null; String[] item; float trueAccuracyRate =0; float falseAccuracyRate =0; float overallAccuracyRate=0; String notApplicable = "N/A"; // int sheetMusicCount = 0; int notSheetMusicCount = 0; // int truePositive = 0; int trueNegative = 0; // int falsePositive = 0; int falseNegative = 0; //Splits into each record, since readLine splits by "\n" while ((line = buf.readLine()) != null) { item = line.split("\t"); //Calculate AccuracyRates if(item[1].contains("/SheetMusic/")){ sheetMusicCount++; if(item[3].equals("true")){ truePositive++; } else if(item[3].equals("false") || item[3].equals("null")){ falseNegative++; } else { System.err.println("Error log file"); } } if(item[1].contains("/NotSheetMusic/")){ notSheetMusicCount++; if(item[3].equals("true")){ falsePositive++; } else if(item[3].equals("false")|| item[3].equals("null")){ trueNegative++; } else{ System.err.println("Error log file"); } } } //Correctly identified SheetMusic as SheetMusic //TruthAccuracyRate if(sheetMusicCount != 0){ trueAccuracyRate = ((float)truePositive/(float)sheetMusicCount)*(float)100; } else { trueAccuracyRate = 0; } //FalseAccuracyRate if(notSheetMusicCount != 0){ //Amount of Correctly identified NotSheetSheetMusic as NotSheetMusic falseAccuracyRate = ((float)trueNegative/(float)notSheetMusicCount)*(float)100; } else { falseAccuracyRate = 0; } //Overall accuaracy if(notSheetMusicCount != 0 && sheetMusicCount != 0) { overallAccuracyRate = (truePositive + trueNegative)/(float)(sheetMusicCount+notSheetMusicCount)*(float)100; } else if (sheetMusicCount == 0) { trueAccuracyRate = -1; overallAccuracyRate = falseAccuracyRate; } else if(notSheetMusicCount == 0) { falseAccuracyRate = -1; overallAccuracyRate = trueAccuracyRate; } else { overallAccuracyRate = -1; System.out.println("There is nothing to compare"); } if(falseAccuracyRate ==-1){ fw.write("Date: " + d.toString() + '\n' + "Classifier: " + classifierType + '\n' + "truePositive: " + truePositive + '\n' + "falseNegative: " + falseNegative + '\n' + "falsePositve: " + falsePositive + '\n' + "trueNegative: " + trueNegative + '\n' + "SheetMusicAccuracyRate: " + trueAccuracyRate + "%" + '\n' + "NotSheetMusicAccuracyRate: " + notApplicable + '\n' + "OverallAccuracyRate: " + overallAccuracyRate + "%" + '\n'); } else if(trueAccuracyRate == -1){ fw.write("Date: " + d.toString() + '\n' + "Classifier: " + classifierType + '\n' + "truePositive: " + truePositive + '\n' + "falseNegative: " + falseNegative + '\n' + "falsePositve: " + falsePositive + '\n' + "trueNegative: " + trueNegative + '\n' + "SheetMusicAccuracyRate: " + notApplicable + '\n' + "NotSheetMusicAccuracyRate: " + falseAccuracyRate + "%" + '\n' + "OverallAccuracyRate: " + overallAccuracyRate + "%" + '\n'); } else{ fw.write("Date: " + d.toString() + '\n' + "Classifier: " + classifierType + '\n' + "truePositive: " + truePositive + '\n' + "falseNegative: " + falseNegative + '\n' + "falsePositve: " + falsePositive + '\n' + "trueNegative: " + trueNegative + '\n' + "SheetMusicAccuracyRate: " + trueAccuracyRate + "%" + '\n' + "NotSheetMusicAccuracyRate: " + falseAccuracyRate + "%" + '\n' + "OverallAccuracyRate: " + overallAccuracyRate + "%" + '\n'); } buf.close(); fw.close(); } } catch(Exception e){ System.err.println(e); } } }