tre-1 / tools /maltparser-1.9.2 /src /org /maltparser /parser /BatchTrainerWithDiagnostics.java
rain1024's picture
update
6f3ebfa
package org.maltparser.parser;
import org.maltparser.core.exception.MaltChainedException;
import org.maltparser.core.feature.FeatureModel;
import org.maltparser.core.symbol.SymbolTableHandler;
import org.maltparser.core.syntaxgraph.DependencyStructure;
import org.maltparser.parser.guide.ClassifierGuide;
import org.maltparser.parser.guide.OracleGuide;
import org.maltparser.parser.guide.SingleGuide;
import org.maltparser.parser.history.action.GuideDecision;
import org.maltparser.parser.history.action.GuideUserAction;
public class BatchTrainerWithDiagnostics extends Trainer {
private final Diagnostics diagnostics;
private final OracleGuide oracleGuide;
private int parseCount;
private final FeatureModel featureModel;
public BatchTrainerWithDiagnostics(DependencyParserConfig manager, SymbolTableHandler symbolTableHandler) throws MaltChainedException {
super(manager,symbolTableHandler);
this.diagnostics = new Diagnostics(manager.getOptionValue("singlemalt", "diafile").toString());
registry.setAlgorithm(this);
setGuide(new SingleGuide(this, ClassifierGuide.GuideMode.BATCH));
String featureModelFileName = manager.getOptionValue("guide", "features").toString().trim();
if (manager.isLoggerInfoEnabled()) {
manager.logDebugMessage(" Feature model : " + featureModelFileName+"\n");
manager.logDebugMessage(" Learner : " + manager.getOptionValueString("guide", "learner").toString()+"\n");
}
String dataSplitColumn = manager.getOptionValue("guide", "data_split_column").toString().trim();
String dataSplitStructure = manager.getOptionValue("guide", "data_split_structure").toString().trim();
this.featureModel = manager.getFeatureModelManager().getFeatureModel(SingleGuide.findURL(featureModelFileName, manager), 0, getParserRegistry(), dataSplitColumn, dataSplitStructure);
manager.writeInfoToConfigFile("\nFEATURE MODEL\n");
manager.writeInfoToConfigFile(featureModel.toString());
oracleGuide = parserState.getFactory().makeOracleGuide(parserState.getHistory());
}
public DependencyStructure parse(DependencyStructure goldDependencyGraph, DependencyStructure parseDependencyGraph) throws MaltChainedException {
parserState.clear();
parserState.initialize(parseDependencyGraph);
currentParserConfiguration = parserState.getConfiguration();
parseCount++;
diagnostics.writeToDiaFile(parseCount + "");
TransitionSystem transitionSystem = parserState.getTransitionSystem();
while (!parserState.isTerminalState()) {
GuideUserAction action = transitionSystem.getDeterministicAction(parserState.getHistory(), currentParserConfiguration);
if (action == null) {
action = oracleGuide.predict(goldDependencyGraph, currentParserConfiguration);
try {
classifierGuide.addInstance(featureModel,(GuideDecision)action);
} catch (NullPointerException e) {
throw new MaltChainedException("The guide cannot be found. ", e);
}
} else {
diagnostics.writeToDiaFile(" *");
}
diagnostics.writeToDiaFile(" " + transitionSystem.getActionString(action));
parserState.apply(action);
}
copyEdges(currentParserConfiguration.getDependencyGraph(), parseDependencyGraph);
parseDependencyGraph.linkAllTreesToRoot();
oracleGuide.finalizeSentence(parseDependencyGraph);
diagnostics.writeToDiaFile("\n");
return parseDependencyGraph;
}
public OracleGuide getOracleGuide() {
return oracleGuide;
}
public void train() throws MaltChainedException { }
public void terminate() throws MaltChainedException {
diagnostics.closeDiaWriter();
}
}