package edu.cmu.minorthird.ui;
import java.io.IOException;
import edu.cmu.minorthird.classify.Dataset;
import edu.cmu.minorthird.classify.experiments.ClassifiedDataset;
import edu.cmu.minorthird.classify.experiments.Evaluation;
import edu.cmu.minorthird.text.learn.ClassifierAnnotator;
import edu.cmu.minorthird.util.CommandLineProcessor;
import edu.cmu.minorthird.util.IOUtil;
import edu.cmu.minorthird.util.JointCommandLineProcessor;
import edu.cmu.minorthird.util.gui.SmartVanillaViewer;
import edu.cmu.minorthird.util.gui.ViewerFrame;
/**
* Test an existing text classifier.
*
* @author William Cohen
*/
public class TestClassifier extends UIMain{
// private data needed to test a classifier
private CommandLineUtil.SaveParams save=new CommandLineUtil.SaveParams();
private CommandLineUtil.ClassificationSignalParams signal=
new CommandLineUtil.ClassificationSignalParams(base);
private CommandLineUtil.TestClassifierParams test=
new CommandLineUtil.TestClassifierParams();
private Object result=null;
// for gui
public CommandLineUtil.SaveParams getSaveParameters(){
return save;
}
public void setSaveParameters(CommandLineUtil.SaveParams p){
save=p;
}
public CommandLineUtil.ClassificationSignalParams getSignalParameters(){
return signal;
}
public void setSignalParameters(CommandLineUtil.ClassificationSignalParams p){
signal=p;
}
public CommandLineUtil.TestClassifierParams getAdditionalParameters(){
return test;
}
public void setAdditionalParameters(CommandLineUtil.TestClassifierParams p){
test=p;
}
public String getTestClassifierHelp(){
return "<A HREF=\"http://minorthird.sourceforge.net/tutorials/TestClassifier%20Tutorial.htm\">TestClassifier Tutorial</A></html>";
}
@Override
public CommandLineProcessor getCLP(){
return new JointCommandLineProcessor(new CommandLineProcessor[]{gui,base,
save,signal,test});
}
//
// load and test a classifier
//
@Override
public void doMain(){
// check that inputs are valid
if(test.loadFrom==null)
throw new IllegalArgumentException("-loadFrom must be specified");
// load the classifier
ClassifierAnnotator ann=null;
try{
ann=(ClassifierAnnotator)IOUtil.loadSerialized(test.loadFrom);
}catch(IOException ex){
throw new IllegalArgumentException("can't load annotator from "+
test.loadFrom+": "+ex);
}
// do the testing and show the result
Dataset d=
CommandLineUtil.toDataset(base.labels,ann.getFE(),signal.spanProp,
signal.spanType,signal.candidateType);
Evaluation evaluation=null;
if(test.showData)
new ViewerFrame("Dataset",d.toGUI());
if(test.showClassifier)
new ViewerFrame("Classifier",new SmartVanillaViewer(ann.getClassifier()));
evaluation=new Evaluation(d.getSchema());
evaluation.extend(ann.getClassifier(),d,0);
if(test.showTestDetails){
result=new ClassifiedDataset(ann.getClassifier(),d);
}else{
result=evaluation;
}
if(base.showResult){
new ViewerFrame("Result",new SmartVanillaViewer(result));
}
if(save.saveAs!=null){
try{
IOUtil.saveSerialized(evaluation,save.saveAs);
}catch(IOException e){
throw new IllegalArgumentException("can't save to "+save.saveAs+": "+e);
}
}
evaluation.summarize();
}
@Override
public Object getMainResult(){
return result;
}
public static void main(String args[]){
new TestClassifier().callMain(args);
}
}