package rainbownlp.analyzer.evaluation.classification; import java.util.ArrayList; import java.util.List; import rainbownlp.machinelearning.MLExample; import rainbownlp.util.SystemUtil; public class Evaluator { public static boolean saveResult = false; public static String evaluation_mode = "HybridTest"; public static ResultRow evaluateByClass(List<MLExample> pExamplesToTest, String exampleClassToEvaluate) { ResultRow rr = new ResultRow(); for(MLExample example : pExamplesToTest) { String expected_class = example.getExpectedClass(); String predicted_class = example.getPredictedClass(); if(exampleClassToEvaluate.equals(expected_class)) { if(expected_class.equals(predicted_class)) rr.TP++; else rr.FN++; } else { if(exampleClassToEvaluate.equals(predicted_class)) rr.FP++; else rr.TN++; } } return rr; } public static void evaluateDevelopementResult(String resultsRoot) { SystemUtil.runShellCommand("a2-evaluate.pl -g gold-devel "+resultsRoot+"/*.a2"); } public static EvaluationResult getEvaluationResult(List<MLExample> pExamplesToTest, String[] class_titles) { EvaluationResult result = new EvaluationResult(); for(Integer i=1;i<=class_titles.length;i++) { result.evaluationResultByClass.put(class_titles[i-1], evaluateByClass(pExamplesToTest, i.toString())); } return result; } public static EvaluationResult getEvaluationResult(List<MLExample> pExamplesToTest) { ArrayList<String> exampleClasses = new ArrayList<String>(); for(MLExample example : pExamplesToTest) { if(!exampleClasses.contains(example.getExpectedClass())) exampleClasses.add(example.getExpectedClass()); // if(example.getPredictedClass()!=null && !exampleClasses.contains(example.getPredictedClass())) // exampleClasses.add(example.getPredictedClass()); } EvaluationResult er = new EvaluationResult(); for(String exampleClass : exampleClasses) { er.evaluationResultByClass.put(exampleClass.toString(), evaluateByClass(pExamplesToTest, exampleClass)); } return er; } public static ResultRow getNoClassEvaluationResult(List<MLExample> pExamplesToTest) { ResultRow rr = new ResultRow(); for(MLExample example : pExamplesToTest) { String expected_class = example.getExpectedClass(); String predicted_class = example.getPredictedClass(); if(expected_class.equals(predicted_class)) rr.TP++; else rr.FN++; } return rr; } }