package edu.cmu.minorthird.ui; import java.io.IOException; import java.io.Serializable; import edu.cmu.minorthird.text.Annotator; import edu.cmu.minorthird.text.learn.AnnotatorTeacher; import edu.cmu.minorthird.text.learn.TextLabelsAnnotatorTeacher; 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.Viewer; import edu.cmu.minorthird.util.gui.ViewerFrame; /** * Train a named-entity extractor. * * @author William Cohen */ public class TrainExtractor extends UIMain{ // private data needed to train a extractor private CommandLineUtil.SaveParams save=new CommandLineUtil.SaveParams(); private CommandLineUtil.ExtractionSignalParams signal= new CommandLineUtil.ExtractionSignalParams(base); private CommandLineUtil.TrainExtractorParams train= new CommandLineUtil.TrainExtractorParams(); private Annotator ann=null; // for gui public CommandLineUtil.SaveParams getSaveParameters(){ return save; } public void setSaveParameters(CommandLineUtil.SaveParams p){ save=p; } public CommandLineUtil.TrainExtractorParams getAdditionalParameters(){ return train; } public void setAdditionalParameters(CommandLineUtil.TrainExtractorParams p){ train=p; } public CommandLineUtil.ExtractionSignalParams getSignalParameters(){ return signal; } public void setSignalParameters( CommandLineUtil.ExtractionSignalParams newSignal){ this.signal=newSignal; } public String getTrainExtractorHelp(){ return "<A HREF=\"http://minorthird.sourceforge.net/tutorials/TrainExtractor%20Tutorial.htm\">TrainExtractor Tutorial</A></html>"; } @Override public CommandLineProcessor getCLP(){ return new JointCommandLineProcessor(new CommandLineProcessor[]{gui,base, save,signal,train}); } // // do the experiment // @Override public void doMain(){ // check that inputs are valid if(train.learner==null){ throw new IllegalArgumentException("-learner must be specified"); } if(train.fe!=null){ train.learner.setSpanFeatureExtractor(train.fe); } train.learner.setAnnotationType(train.output); // do the training AnnotatorTeacher teacher= new TextLabelsAnnotatorTeacher(base.labels,signal.spanType,signal.spanProp); ann=teacher.train(train.learner); if(base.showResult){ Viewer av=new SmartVanillaViewer(); av.setContent(ann); new ViewerFrame("Extractor",av); } if(save.saveAs!=null){ try{ IOUtil.saveSerialized((Serializable)ann,save.saveAs); }catch(IOException e){ throw new IllegalArgumentException("can't save to "+save.saveAs+": "+e); } } } @Override public Object getMainResult(){ return ann; } public static void main(String args[]){ new TrainExtractor().callMain(args); } }