package edu.stanford.nlp.sempre.overnight; import edu.stanford.nlp.io.IOUtils; import fig.basic.LispTree; import fig.basic.LogInfo; import java.io.IOException; import java.io.PrintWriter; import java.util.Iterator; /** * Created by joberant on 2/22/15. * Takes a file with lisp trees of original and canonical utterances * and creates the input for the berkley aligner */ public final class CreateBerkeleyAlignerInputFromLispTree { private CreateBerkeleyAlignerInputFromLispTree() { } //args[0]: lisp tree file //args[1] output directory public static void main(String[] args) { Iterator<LispTree> trees = LispTree.proto.parseFromFile(args[0]); try { PrintWriter writerOriginal = IOUtils.getPrintWriter(args[1] + ".e"); PrintWriter writerUtterance = IOUtils.getPrintWriter(args[1] + ".f"); LogInfo.logs("output directory=%s", args[1]); int i = 0; while (trees.hasNext()) { i++; LispTree tree = trees.next(); LispTree utteranceTree = tree.child(1); LispTree originalTree = tree.child(2); if (!utteranceTree.child(0).value.equals("utterance")) throw new RuntimeException("First child is not an utterance " + utteranceTree); if (!originalTree.child(0).value.equals("original")) throw new RuntimeException("second child is not the original " + originalTree); String uttearnce = utteranceTree.child(1).value; if (uttearnce.endsWith("?") || uttearnce.endsWith(".")) uttearnce = uttearnce.substring(0, uttearnce.length() - 1); String original = originalTree.child(1).value; writerOriginal.println(original); writerUtterance.println(uttearnce); } LogInfo.logs("Numebr of trees=%s", i); writerOriginal.close(); writerUtterance.close(); } catch (IOException e) { e.printStackTrace(); } } }