package experiments.evaluation;
import java.io.File;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
import org.kohsuke.args4j.Option;
public class StartEvaluation {
@Option(name = "-s", usage = "outputfile of every single query (csv)")
public static String singleQueryFile;
@Option(name = "-csv", usage = "csv file")
public static String csvFile;
@Option(name = "-p", usage = "print every query")
public static boolean printEveryQuery;
@Option(name = "-qrels", usage = "filepath of qrels directory")
public static String qrels;
@Option(name = "-result", usage = "filepath of result directory")
public static String result;
@Option(name = "-m", usage = "Measures")
public static String measures;
private Output out;
public StartEvaluation() {
}
public void initialize() {
out = new Output();
if (measures.equalsIgnoreCase("all")) {
List<StatisticalMeasure> me = createMeasureList();
for (int i = 0; i < me.size(); i++) {
out.addMeasure(me.get(i));
}
out.printCSVHeader();
if(printEveryQuery) {
out.printSingleQueryHeader();
}
out.clearMeasures();
}
}
private List<StatisticalMeasure> createMeasureList() {
List<StatisticalMeasure> lst = new LinkedList<StatisticalMeasure>();
if (measures.equalsIgnoreCase("all")) {
lst.add(new M_ReciprocalRank());
lst.add(new M_Recall());
lst.add(new M_Precision());
lst.add(new M_MAP());
lst.add(new M_F1());
lst.add(new M_Accuracy2());
}
return lst;
}
public void process() {
File qrelDir = new File(qrels);
String[] qrelFiles = qrelDir.list();
for (int i = 0; i < qrelFiles.length; i++) {
File resFile = new File(result + "" + qrelFiles[i]);
if (!resFile.exists()) {
System.err.println("File " + result + "" + qrelFiles[i]
+ " not found!");
break;
}
WorkingChain chain = null;
if(printEveryQuery) {
chain = new WorkingChain(true, out);
} else {
chain = new WorkingChain(false);
}
List<StatisticalMeasure> me = createMeasureList();
for (int j = 0; j < me.size(); j++) {
chain.addMeasurement(me.get(j));
out.addMeasure(me.get(j));
}
try {
FilePreProcessing proc = new FilePreProcessing(qrels
+ qrelFiles[i], resFile.getAbsolutePath(), chain);
proc.process();
} catch (IOException e) {
e.printStackTrace();
} catch (LineParsingException e) {
e.printStackTrace();
}
out.printCSV(qrelFiles[i]);
}
out.close();
}
public static void main(String[] args) {
StartEvaluation eval = new StartEvaluation();
CmdLineParser parser = new CmdLineParser(eval);
parser.setUsageWidth(80);
try {
parser.parseArgument(args);
if (qrels == null || result == null || measures == null
|| csvFile == null
|| (printEveryQuery && singleQueryFile == null)) {
throw new CmdLineException(parser, "No argument is given");
}
} catch (CmdLineException e) {
System.err.println(e.getStackTrace());
System.err.println("java SampleMain [options...] arguments...");
parser.printUsage(System.err);
System.err.println();
return;
}
eval.initialize();
eval.process();
}
}