package edu.cmu.minorthird.ui; import java.io.IOException; import edu.cmu.minorthird.classify.OnlineBinaryClassifierLearner; import edu.cmu.minorthird.classify.OnlineClassifierLearner; import edu.cmu.minorthird.text.learn.OnlineBinaryTextClassifierLearner; import edu.cmu.minorthird.text.learn.OnlineTextClassifierLearner; import edu.cmu.minorthird.util.CommandLineProcessor; import edu.cmu.minorthird.util.IOUtil; import edu.cmu.minorthird.util.JointCommandLineProcessor; /** * Start an Online Learner * * @author Cameron Williams */ public class OnlineLearner extends UIMain{ // private data needed to train a classifier protected CommandLineUtil.OnlineBaseParams labeledData= new CommandLineUtil.OnlineBaseParams(); private CommandLineUtil.OnlineSignalParams signal= new CommandLineUtil.OnlineSignalParams(labeledData); private CommandLineUtil.TrainClassifierParams train= new CommandLineUtil.TrainClassifierParams(); private CommandLineUtil.TestClassifierParams test= new CommandLineUtil.TestClassifierParams(); OnlineTextClassifierLearner textLearner=null; //private Classifier classifier=null; public CommandLineUtil.OnlineBaseParams get_LabeledDataParameters(){ return labeledData; } public void set_LabeledDataParameters( CommandLineUtil.OnlineBaseParams labeledData){ this.labeledData=labeledData; } public CommandLineUtil.OnlineSignalParams getSignalParameters(){ return signal; } public void setSignalParameters(CommandLineUtil.OnlineSignalParams p){ signal=p; } public CommandLineUtil.TrainClassifierParams getAdditionalParameters(){ return train; } public void setAdditionalParameters(CommandLineUtil.TrainClassifierParams p){ train=p; } public CommandLineUtil.TestClassifierParams getTextLearnerParameters(){ return test; } public void setTextLearnerParameters(CommandLineUtil.TestClassifierParams p){ test=p; } @Override public CommandLineProcessor getCLP(){ return new JointCommandLineProcessor(new CommandLineProcessor[]{gui,base, labeledData,signal,train,test}); } // // do the experiment // @Override public void doMain(){ // check that inputs are valid if(train.learner==null) throw new IllegalArgumentException("-learner must be specified"); if(signal.spanType==null) throw new IllegalArgumentException("-spanType must be specified"); if(!(train.learner instanceof OnlineBinaryClassifierLearner)) throw new IllegalArgumentException( "The learner must be an OnlineBinaryClassifierLearner"); //String outputType=signal.getOutputType(train.output); if(test.loadFrom==null) textLearner= new OnlineBinaryTextClassifierLearner( (OnlineClassifierLearner)train.learner,signal.spanType, labeledData.labeledData,train.fe); else{ try{ OnlineBinaryTextClassifierLearner obtcl= (OnlineBinaryTextClassifierLearner)IOUtil .loadSerialized(test.loadFrom); textLearner=obtcl; }catch(IOException ex){ throw new IllegalArgumentException("can't load annotator from "+ test.loadFrom+": "+ex); } } // TextLabels annLabels; // annLabels=textLearner.annotatedCopy((TextLabels)base.labels); // OnlineLearnerEditor editor= // OnlineLearnerEditor.edit(annLabels,(MutableTextLabels)base.labels, // base.repositoryKey,textLearner); } @Override public Object getMainResult(){ return textLearner.getClassifier(); } public static void main(String args[]){ new OnlineLearner().callMain(args); } }