// Copyright 2015 Thomas Müller // This file is part of MarMoT, which is licensed under GPLv3. package experimental.analyzer.cmd; import java.io.IOException; import java.io.Writer; import java.util.Collection; import experimental.analyzer.Analyzer; import experimental.analyzer.AnalyzerInstance; import experimental.analyzer.AnalyzerReading; import experimental.analyzer.AnalyzerResult; import experimental.analyzer.AnalyzerTrainer; import marmot.util.FileUtils; public class Trainer { public static void main(String[] args) { String model_type = args[0]; String options_string = args[1]; String output_file = args[2]; String train_file = args[3]; Analyzer analyzer = train(model_type, options_string, train_file); for (int i=3; i < args.length; i += 2) { String test_file = args[i]; String pred_file = args[i + 1]; System.err.println("File:" + test_file); test(analyzer, test_file); annotate(analyzer, test_file, pred_file); } FileUtils.saveToFile(analyzer, output_file); } private static void annotate(Analyzer analyzer, String test_file, String pred_file) { Collection<AnalyzerInstance> instances = AnalyzerInstance.getInstances(test_file); try { Writer writer = FileUtils.openFileWriter(pred_file); for (AnalyzerInstance instance : instances) { Collection<AnalyzerReading> readings = analyzer.analyze(instance); writer.write(instance.getForm()); writer.write('\t'); writer.write(analyzer.represent(instance)); writer.write('\t'); writer.write(readings.toString()); writer.write('\n'); } writer.close(); } catch (IOException e) { throw new RuntimeException(e); } } public static Analyzer train(String model_type, String options_string, String train_file) { AnalyzerTrainer trainer; try { Class<?> trainer_class = Class.forName(model_type); trainer = (AnalyzerTrainer) trainer_class.newInstance(); } catch (Exception e) { throw new RuntimeException(e); } trainer.setOptions(options_string); Collection<AnalyzerInstance> training_instances = AnalyzerInstance.getInstances(train_file); Analyzer analyzer = trainer.train(training_instances); return analyzer; } public static void test(Analyzer analyzer, String test_file) { AnalyzerResult.logResult(analyzer, test_file); } }