package edu.stanford.nlp.sempre; import fig.basic.*; import fig.exec.Execution; import java.io.*; import java.util.*; /** * Output examples in various forms. * * @author Percy Liang */ public final class ExampleUtils { private ExampleUtils() { } // Output JSON file with just the basic input/output. public static void writeJson(List<Example> examples) { PrintWriter out = IOUtils.openOutHard(Execution.getFile("examples.json")); for (Example ex : examples) out.println(ex.toJson()); out.close(); } public static void writeJson(List<Example> examples, String outPath) throws IOException { PrintWriter out = IOUtils.openOutHard(outPath); out.println("["); for (int i = 0; i < examples.size(); ++i) { Example ex = examples.get(i); out.print(ex.toJson()); out.println(i < examples.size() - 1 ? "," : ""); } out.println("]"); out.close(); } private static String escapeSpace(String s) { return s.replaceAll(" ", " "); } // Output examples in Simple Dataset Format (Ranking). public static void writeSDF(int iter, String group, Evaluation evaluation, List<Example> examples, boolean outputPredDerivations) { String basePath = "preds-iter" + iter + "-" + group + ".examples"; String outPath = Execution.getFile(basePath); if (outPath == null || examples.size() == 0) return; LogInfo.begin_track("Writing examples to %s", basePath); PrintWriter out = IOUtils.openOutHard(outPath); LispTree p = LispTree.proto; out.println("# SDF version 1.1"); out.println("# " + p.L(p.L("iter", iter), p.L("group", group), p.L("numExamples", examples.size()), p.L("evaluation", evaluation.toLispTree()))); for (Example ex : examples) { out.println(""); out.println("example " + ex.id); out.println("description " + p.L(p.L("utterance", ex.utterance), p.L("targetValue", ex.targetValue.toLispTree()), p.L("evaluation", ex.evaluation.toLispTree()))); if (outputPredDerivations) { for (Derivation deriv : ex.predDerivations) { StringBuilder buf = new StringBuilder(); buf.append("item"); LispTree description = p.newList(); if (deriv.canonicalUtterance != null) description.addChild(p.L("canonicalUtterance", deriv.canonicalUtterance)); description.addChild(p.L("formula", deriv.formula.toLispTree())); description.addChild(p.L("value", deriv.value.toLispTree())); buf.append("\t" + description); buf.append("\t" + deriv.compatibility); Map<String, Double> features = deriv.getAllFeatureVector(); buf.append("\t"); boolean first = true; for (Map.Entry<String, Double> e : features.entrySet()) { if (!first) buf.append(' '); first = false; buf.append(e.getKey() + ":" + e.getValue()); } out.println(buf.toString()); } } } out.close(); LogInfo.end_track(); } public static void writeParaphraseSDF(int iter, String group, Example ex, boolean outputPredDerivations) { String basePath = "preds-iter" + iter + "-" + group + ".examples"; String outPath = Execution.getFile(basePath); if (outPath == null) return; PrintWriter out = IOUtils.openOutAppendHard(outPath); out.println("example " + ex.id); if (outputPredDerivations) { int i = 0; for (Derivation deriv : ex.predDerivations) { if (deriv.canonicalUtterance != null) out.println("Pred@" + i + ":\t" + ex.utterance + "\t" + deriv.canonicalUtterance + "\t" + deriv.compatibility + "\t" + deriv.formula + "\t" + deriv.prob); i++; } } out.close(); } public static void writeEvaluationSDF(int iter, String group, Evaluation evaluation, int numExamples) { String basePath = "preds-iter" + iter + "-" + group + ".examples"; String outPath = Execution.getFile(basePath); if (outPath == null) return; PrintWriter out = IOUtils.openOutAppendHard(outPath); LispTree p = LispTree.proto; out.println(""); out.println("# SDF version 1.1"); out.println("# " + p.L(p.L("iter", iter), p.L("group", group), p.L("numExamples", numExamples), p.L("evaluation", evaluation.toLispTree()))); out.close(); } //read lisptree and write json public static void main(String[] args) { Dataset dataset = new Dataset(); Pair<String, String> pair = Pair.newPair("train", args[0]); Dataset.opts.splitDevFromTrain = false; dataset.readFromPathPairs(Collections.singletonList(pair)); List<Example> examples = dataset.examples("train"); try { writeJson(examples, args[1]); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } } }