tre-1 / tools /maltparser-1.9.2 /src /org /maltparser /parser /DeterministicParser.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.SingleGuide;
import org.maltparser.parser.history.action.GuideDecision;
import org.maltparser.parser.history.action.GuideUserAction;
/**
* @author Johan Hall
*
*/
public class DeterministicParser extends Parser {
private final FeatureModel featureModel;
public DeterministicParser(DependencyParserConfig manager, SymbolTableHandler symbolTableHandler) throws MaltChainedException {
super(manager,symbolTableHandler);
registry.setAlgorithm(this);
setGuide(new SingleGuide(this, ClassifierGuide.GuideMode.CLASSIFY));
String featureModelFileName = manager.getOptionValue("guide", "features").toString().trim();
if (manager.isLoggerInfoEnabled()) {
manager.logDebugMessage(" Feature model : " + featureModelFileName+"\n");
manager.logDebugMessage(" Classifier : " + manager.getOptionValueString("guide", "learner")+"\n");
}
String dataSplitColumn = manager.getOptionValue("guide", "data_split_column").toString().trim();
String dataSplitStructure = manager.getOptionValue("guide", "data_split_structure").toString().trim();
featureModel = manager.getFeatureModelManager().getFeatureModel(SingleGuide.findURL(featureModelFileName, manager), 0, getParserRegistry(), dataSplitColumn, dataSplitStructure);
}
public DependencyStructure parse(DependencyStructure parseDependencyGraph) throws MaltChainedException {
parserState.clear();
parserState.initialize(parseDependencyGraph);
currentParserConfiguration = parserState.getConfiguration();
TransitionSystem ts = parserState.getTransitionSystem();
while (!parserState.isTerminalState()) {
GuideUserAction action = ts.getDeterministicAction(parserState.getHistory(), currentParserConfiguration);
if (action == null) {
action = predict();
}
parserState.apply(action);
}
// copyEdges(currentParserConfiguration.getDependencyGraph(), parseDependencyGraph);
// copyDynamicInput(currentParserConfiguration.getDependencyGraph(), parseDependencyGraph);
parseDependencyGraph.linkAllTreesToRoot();
return parseDependencyGraph;
}
private GuideUserAction predict() throws MaltChainedException {
GuideUserAction currentAction = parserState.getHistory().getEmptyGuideUserAction();
try {
classifierGuide.predict(featureModel,(GuideDecision)currentAction);
while (!parserState.permissible(currentAction)) {
if (classifierGuide.predictFromKBestList(featureModel,(GuideDecision)currentAction) == false) {
currentAction = getParserState().getTransitionSystem().defaultAction(parserState.getHistory(), currentParserConfiguration);
break;
}
}
} catch (NullPointerException e) {
throw new MaltChainedException("The guide cannot be found. ", e);
}
return currentAction;
}
public void terminate() throws MaltChainedException { }
}