All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jmaxent.Trainer Maven / Gradle / Ivy

Go to download

HeidelTime is a multilingual cross-domain temporal tagger that extracts temporal expressions from documents and normalizes them according to the TIMEX3 annotation standard.

There is a newer version: 2.2.1
Show newest version
/*
 Copyright (C) 2010 by
 * 
 * 	Cam-Tu Nguyen 
 *  [email protected] or [email protected]
 *
 *  Xuan-Hieu Phan  
 *  [email protected] 
 *
 *  College of Technology, Vietnamese University, Hanoi
 * 	Graduate School of Information Sciences, Tohoku University
 *
 * JVnTextPro-v.2.0 is a free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published
 * by the Free Software Foundation; either version 2 of the License,
 * or (at your option) any later version.
 *
 * JVnTextPro-v.2.0 is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with  JVnTextPro-v.2.0); if not, write to the Free Software Foundation,
 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
 */

package jmaxent;

import java.io.*;

// TODO: Auto-generated Javadoc
/**
 * The Class Trainer.
 */
public class Trainer {
    
    /**
     * The main method.
     *
     * @param args the arguments
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public static void main(String[] args) throws IOException {
	if (!checkArgs(args)) {
	    displayHelp();
	    return;
	}
	
	String modelDir = args[2];
	boolean isAll = (args[0].compareToIgnoreCase("-all") == 0);
	boolean isTrn = (args[0].compareToIgnoreCase("-trn") == 0);
	boolean isTst = (args[0].compareToIgnoreCase("-tst") == 0);
	boolean isCont = (args[0].compareToIgnoreCase("-cont") == 0); //TUNC
	
	// create option object
	Option option = new Option(modelDir);
	
	option.optionFile = args[4];
	
	option.readOptions();
	
	Data data = null;
	Dictionary dict = null;
	FeatureGen feaGen = null;
	Train train = null;
	Inference inference = null;
	Evaluation evaluation = null;
	Model model = null;
	
	PrintWriter foutModel = null;
	BufferedReader finModel = null;
	
	if (isAll) {
	    // both training and testing
	    
	    PrintWriter flog = option.openTrainLogFile();
	    if (flog == null) {
		System.out.println("Couldn't create training log file");
		return;
	    }
	    
	    foutModel = option.createModelFile();
	    if (foutModel == null) {
		System.out.println("Couldn't create model file");
		return;
	    }	    	    
	    
	    data = new Data(option);
	    data.readTrnData(option.modelDir + File.separator + option.trainDataFile);	    
	    data.readTstData(option.modelDir + File.separator + option.testDataFile);	    	    
	    
	    dict = new Dictionary(option, data);
	    dict.generateDict();
	    
	    feaGen = new FeatureGen(option, data, dict);
	    feaGen.generateFeatures();
	    
	    data.writeCpMaps(dict, foutModel);
	    data.writeLbMaps(foutModel);	    
	    
	    train = new Train();
	    inference = new Inference();
	    evaluation = new Evaluation();
	    
	    model = new Model(option, data, dict, feaGen, train, inference, evaluation);
	    model.doTrain(flog);	    	    
	    
	    model.doInference(model.data.tstData);
	    model.evaluation.evaluate(flog);
	    
	    dict.writeDict(foutModel);
	    feaGen.writeFeatures(foutModel);
	    
	    foutModel.close();
	}
	
	if (isTrn) {
	    // training only
	    
	    PrintWriter flog = option.openTrainLogFile();
	    if (flog == null) {
		System.out.println("Couldn't create training log file");
		return;
	    }	    

	    foutModel = option.createModelFile();
	    if (foutModel == null) {
		System.out.println("Couldn't create model file");
		return;
	    }
	    
	    data = new Data(option);
	    data.readTrnData(option.modelDir + File.separator + option.trainDataFile);	    
	    
	    dict = new Dictionary(option, data);
	    dict.generateDict();
	    
	    feaGen = new FeatureGen(option, data, dict);
	    feaGen.generateFeatures();
	    
	    data.writeCpMaps(dict, foutModel);
	    data.writeLbMaps(foutModel);	    	    

	    train = new Train();	    
	    
	    model = new Model(option, data, dict, feaGen, train, null, null);	    	    
	    model.doTrain(flog);	    
	    
	    dict.writeDict(foutModel);
	    feaGen.writeFeatures(foutModel);
	    
	    foutModel.close();
	}
	
	if (isTst) {
	    // testing only
	    
	    finModel = option.openModelFile();
	    if (finModel == null) {
		System.out.println("Couldn't open model file");
		return;
	    }	    
	    
	    data = new Data(option);
	    data.readCpMaps(finModel);
	    data.readLbMaps(finModel);	    
	    data.readTstData(option.modelDir + File.separator + option.testDataFile);	    
	
	    dict = new Dictionary(option, data);	    
	    dict.readDict(finModel);
	    
	    feaGen = new FeatureGen(option, data, dict);
	    feaGen.readFeatures(finModel);
	    
	    inference = new Inference();
	    evaluation = new Evaluation();
	    
	    model = new Model(option, data, dict, feaGen, null, inference, evaluation);	    
	    
	    model.doInference(model.data.tstData);
	    model.evaluation.evaluate(null);
	    
	    finModel.close();	    
	}	
	
	if (isCont){ //continue last training
		PrintWriter flog = option.openTrainLogFile(); //append
	    if (flog == null) {
		System.out.println("Couldn't create training log file");
		return;
	    }	 
		    
		finModel = option.openModelFile();
	    if (finModel == null) {
		System.out.println("Couldn't open model file");
		return;
	    }	    
	    
	    data = new Data(option);
	    data.readCpMaps(finModel);
	    data.readLbMaps(finModel);	    
	    data.readTstData(option.modelDir + File.separator + option.testDataFile);	    
	
	    dict = new Dictionary(option, data);	    
	    dict.readDict(finModel);
	    
	    feaGen = new FeatureGen(option, data, dict);
	    feaGen.readFeatures(finModel);
	    
	    inference = new Inference();
	    evaluation = new Evaluation();
	    
	    foutModel = option.createModelFile(); //overwrite the old model file
	    if (foutModel == null) {
			System.out.println("Couldn't create model file");
			return;
		    }
	    
	    model = new Model(option, data, dict, feaGen, train, inference, evaluation);
	    model.doTrain(flog);	    	    
	    
	    model.doInference(model.data.tstData);
	    model.evaluation.evaluate(flog);	
	    
	    foutModel.close();
	}
    } // end of the main method
    
    /**
     * Check args.
     *
     * @param args the args
     * @return true, if successful
     */
    public static boolean checkArgs(String[] args) {
	if (args.length < 5) {
	    return false;
	}
	
	if (!(args[0].compareToIgnoreCase("-all") == 0 ||
		    args[0].compareToIgnoreCase("-trn") == 0 ||
		    args[0].compareToIgnoreCase("-tst") == 0) || 
		    args[0].compareToIgnoreCase("-cont") == 0) {
	    return false;
	}
	
	if (args[1].compareToIgnoreCase("-d") != 0) {
	    return false;
	}
	
	if (args[3].compareToIgnoreCase("-o") != 0)
		return false; 
	
	return true;
    }
    
    /**
     * Display help.
     */
    public static void displayHelp() {
	System.out.println("Usage:");
	System.out.println("\tTrainer -all/-trn/-tst -d  -o ");	
    }
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy