001 package org.maltparser.parser; 002 003 import org.maltparser.core.exception.MaltChainedException; 004 import org.maltparser.core.syntaxgraph.DependencyStructure; 005 import org.maltparser.parser.guide.ClassifierGuide; 006 import org.maltparser.parser.guide.OracleGuide; 007 import org.maltparser.parser.guide.SingleGuide; 008 import org.maltparser.parser.history.GuideHistory; 009 import org.maltparser.parser.history.action.GuideDecision; 010 import org.maltparser.parser.history.action.GuideUserAction; 011 /** 012 * @author Johan Hall 013 * 014 */ 015 public class BatchTrainer extends Trainer { 016 private OracleGuide oracleGuide; 017 private int parseCount; 018 019 public BatchTrainer(DependencyParserConfig manager) throws MaltChainedException { 020 super(manager); 021 ((SingleMalt)manager).addRegistry(org.maltparser.parser.Algorithm.class, this); 022 setManager(manager); 023 initParserState(1); 024 setGuide(new SingleGuide(manager, (GuideHistory)parserState.getHistory(), ClassifierGuide.GuideMode.BATCH)); 025 oracleGuide = parserState.getFactory().makeOracleGuide(parserState.getHistory()); 026 } 027 028 public DependencyStructure parse(DependencyStructure goldDependencyGraph, DependencyStructure parseDependencyGraph) throws MaltChainedException { 029 parserState.clear(); 030 parserState.initialize(parseDependencyGraph); 031 currentParserConfiguration = parserState.getConfiguration(); 032 if (diagnostics == true) { 033 writeToDiaFile("ParseCount: " + ++parseCount + "\n"); 034 } 035 while (!parserState.isTerminalState()) { 036 GuideUserAction action = parserState.getTransitionSystem().getDeterministicAction(parserState.getHistory(), currentParserConfiguration); 037 if (action == null) { 038 action = oracleGuide.predict(goldDependencyGraph, currentParserConfiguration); 039 try { 040 classifierGuide.addInstance((GuideDecision)action); 041 } catch (NullPointerException e) { 042 throw new MaltChainedException("The guide cannot be found. ", e); 043 } 044 } else if (diagnostics == true) { 045 writeToDiaFile("*"); 046 } 047 if (diagnostics == true) { 048 writeToDiaFile(parserState.getTransitionSystem().getActionString(action)); 049 writeToDiaFile("\n"); 050 } 051 parserState.apply(action); 052 } 053 copyEdges(currentParserConfiguration.getDependencyGraph(), parseDependencyGraph); 054 parseDependencyGraph.linkAllTreesToRoot(); 055 oracleGuide.finalizeSentence(parseDependencyGraph); 056 if (diagnostics == true) { 057 writeToDiaFile("\n"); 058 } 059 return parseDependencyGraph; 060 } 061 062 public OracleGuide getOracleGuide() { 063 return oracleGuide; 064 } 065 066 public void train() throws MaltChainedException { } 067 public void terminate() throws MaltChainedException { 068 if (diagnostics == true) { 069 closeDiaWriter(); 070 } 071 } 072 }