// 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.Arrays;
import java.util.Collection;
import marmot.util.FileUtils;
import experimental.analyzer.Analyzer;
import experimental.analyzer.AnalyzerInstance;
import experimental.analyzer.AnalyzerReading;
import experimental.analyzer.AnalyzerTrainer;
import experimental.analyzer.TreebankAnalyzerResult;
import experimental.analyzer.simple.SimpleAnalyzer;
import experimental.analyzer.simple.SimpleEvaluator;
public class TreebankAnnotator {
public static void main(String[] args) {
String model_file = args[0];
Analyzer analyzer = FileUtils.loadFromFile(model_file);
for (int i = 1; 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);
}
}
public static void annotate(Analyzer analyzer, String test_file,
String pred_file) {
Collection<AnalyzerInstance> instances = AnalyzerInstance.getTreebankInstances(test_file);
try {
Writer writer = FileUtils.openFileWriter(pred_file);
for (AnalyzerInstance instance : instances) {
if (analyzer.isUnknown(instance)) {
Collection<AnalyzerReading> readings = analyzer
.analyze(instance);
writer.write(instance.getForm());
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
.getTreebankInstances(train_file);
Analyzer analyzer = trainer.train(training_instances);
return analyzer;
}
public static void test(Analyzer analyzer, String test_file) {
TreebankAnalyzerResult.logResult(analyzer, test_file);
if (analyzer instanceof SimpleAnalyzer) {
SimpleAnalyzer sanalyzer = (SimpleAnalyzer) analyzer;
SimpleEvaluator evaluator = new SimpleEvaluator();
evaluator.eval(sanalyzer, AnalyzerInstance.getTreebankInstances(test_file), Arrays.asList(1.0, 1.5, 2.0, 2.5, 5.0));
}
}
}