package edu.stanford.nlp.sempre.overnight;
import edu.stanford.nlp.io.IOUtils;
import edu.stanford.nlp.sempre.StringValue;
import fig.basic.LispTree;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* Created by joberant on 2/24/15.
* This converts
* (targetValue (list (name fb:en.place.walton_county)))
* to
* (targetValue (string [(name fb:en.place.walton_county)]))
* This has nothing to do with 'paraphrase', it's just here for no reason
*/
public final class ConvertTargetValueFromListToString {
private ConvertTargetValueFromListToString() { }
public static void main(String[] args) {
try {
PrintWriter writer = IOUtils.getPrintWriter(args[1]);
Iterator<LispTree> trees = LispTree.proto.parseFromFile(args[0]);
while (trees.hasNext()) {
LispTree tree = trees.next();
LispTree outTree = LispTree.proto.newList();
outTree.addChild("example");
outTree.addChild(tree.child(1));
List<String> output = new ArrayList<>();
LispTree targetValue = tree.child(3);
if (!targetValue.child(0).value.equals("targetValue"))
throw new RuntimeException("Expected a target value as second child: " + targetValue);
LispTree list = targetValue.child(1);
if (!list.child(0).value.equals("list"))
throw new RuntimeException("Expected a list as first child: " + list);
for (int i = 1; i < list.children.size(); ++i)
output.add(list.child(i).toString());
StringValue newTargetValue = new StringValue(output.toString());
LispTree newTargetValueTree = LispTree.proto.newList();
newTargetValueTree.addChild("targetValue");
newTargetValueTree.addChild(newTargetValue.toLispTree());
outTree.addChild(newTargetValueTree);
outTree.print(120, 120, writer);
writer.println();
}
writer.close();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}