package edu.stanford.nlp.sempre.tables.alignment; import java.util.*; import edu.stanford.nlp.sempre.*; import fig.basic.*; /** * Preprocess examples for training an alignment model. * * @author ppasupat */ public class BitextData { public final List<BitextDataGroup> bitextDataGroups; public final Set<String> allTokens, allPredicates; public BitextData(List<Example> examples) { LogInfo.begin_track("Creating BitextData"); bitextDataGroups = new ArrayList<>(); for (Example ex : examples) { if (!ex.predDerivations.isEmpty()) bitextDataGroups.add(new BitextDataGroup(ex)); } // Collect all tokens and all predicates allTokens = new HashSet<>(); allPredicates = new HashSet<>(); for (BitextDataGroup group : bitextDataGroups) { allTokens.addAll(group.tokens); for (BitextDatum datum : group.bitextDatums) { allPredicates.addAll(datum.predicates); } } LogInfo.end_track(); } public static class BitextDataGroup { public final Example ex; public final String id; public final List<String> tokens; public final List<BitextDatum> bitextDatums; public BitextDataGroup(Example ex) { this.ex = ex; id = ex.id; tokens = new ArrayList<>(ex.languageInfo.tokens); bitextDatums = new ArrayList<>(); for (Derivation d : ex.predDerivations) { bitextDatums.add(new BitextDatum(this, d)); } } } public static class BitextDatum { public final BitextDataGroup group; public final Formula formula; public final List<String> predicates; public BitextDatum(BitextDataGroup group, Derivation d) { this.group = group; formula = d.formula; predicates = new ArrayList<>(); traversePredicates(formula.toLispTree()); } private void traversePredicates(LispTree t) { if (t.isLeaf()) { predicates.add(t.value); } else { for (LispTree child : t.children) traversePredicates(child); } } } }