package edu.stanford.nlp.sempre.tables.serialize; import java.io.*; import java.util.*; import edu.stanford.nlp.sempre.*; /** * Generate a TSV file for the dataset release. * * @author ppasupat */ public class TSVGenerator { protected PrintWriter out; protected void dump(String... stuff) { out.println(String.join("\t", stuff)); } protected static String serialize(String x) { if (x == null || x.isEmpty()) return ""; StringBuilder sb = new StringBuilder(); for (char y : x.toCharArray()) { if (y == '\n') sb.append("\\n"); else if (y == '\\') sb.append("\\\\"); else if (y == '|') sb.append("\\p"); else sb.append(y); } return sb.toString().replaceAll("\\s", " ").trim(); } protected static String serialize(List<String> xs) { List<String> serialized = new ArrayList<>(); for (String x : xs) serialized.add(serialize(x)); return String.join("|", serialized); } protected static String serialize(Value value) { if (value instanceof ListValue) { List<String> xs = new ArrayList<>(); for (Value v : ((ListValue) value).values) { xs.add(serialize(v)); } return String.join("|", xs); } else if (value instanceof DescriptionValue) { return serialize(((DescriptionValue) value).value); } else if (value instanceof NameValue) { return serialize(((NameValue) value).description); } else if (value instanceof NumberValue) { return "" + ((NumberValue) value).value; } else if (value instanceof DateValue) { return ((DateValue) value).isoString(); } else { throw new RuntimeException("Unknown value type: " + value); } } protected static String serializeId(Value value) { if (value instanceof ListValue) { List<String> xs = new ArrayList<>(); for (Value v : ((ListValue) value).values) { xs.add(serializeId(v)); } return String.join("|", xs); } else if (value instanceof NameValue) { return serialize(((NameValue) value).id); } else { throw new RuntimeException("Unknown value type: " + value); } } }