package edu.stanford.nlp.parser.shiftreduce; import edu.stanford.nlp.io.RuntimeIOException; import edu.stanford.nlp.parser.common.ParserQuery; import edu.stanford.nlp.parser.metrics.ParserQueryEval; import edu.stanford.nlp.trees.Tree; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; /** * Outputs either binarized or debinarized trees to a given filename. * Useful for seeing the intermediate results of the ShiftReduceParser * * @author John Bauer */ public class TreeRecorder implements ParserQueryEval { public enum Mode { BINARIZED, DEBINARIZED }; private final Mode mode; private final BufferedWriter out; public TreeRecorder(Mode mode, String filename) { this.mode = mode; try { out = new BufferedWriter(new FileWriter(filename)); } catch (IOException e) { throw new RuntimeIOException(e); } } public void evaluate(ParserQuery query, Tree gold, PrintWriter pw) { if (!(query instanceof ShiftReduceParserQuery)) { throw new IllegalArgumentException("This evaluator only works for the ShiftReduceParser"); } ShiftReduceParserQuery srquery = (ShiftReduceParserQuery) query; try { switch (mode) { case BINARIZED: out.write(srquery.getBestBinarizedParse().toString()); break; case DEBINARIZED: out.write(srquery.debinarized.toString()); break; default: throw new IllegalArgumentException("Unknown mode " + mode); } out.newLine(); } catch (IOException e) { throw new RuntimeIOException(e); } } public void display(boolean verbose, PrintWriter pw) { try { out.close(); } catch (IOException e) { throw new RuntimeIOException(e); } } }