static LinkedHashSet ai_parseTree_simplifiedTexts(PTElement e) { new LinkedHashSet out; ai_parseTree_simplifiedTexts_collect(e, out); ret out; } svoid ai_parseTree_simplifiedTexts_collect(PTElement e, LinkedHashSet out) { if (e == null) ret; PTElement ee = ai_parseTree_descendToComposite(e); if (ee == null) ret with out.add(e.text()); e = ee; if (e instanceof ChoosePart) { ai_Reconstructed r = e/ChoosePart.reconstruction; WeightedProduction prod = r.production; //print("Hint: " + prod.simplificationHint + " in prod: " + sfu(prod)); //if (eq(prod.simplificationHint, "L")) out.add(r.a.text()); //else if (eq(prod.simplificationHint, "R")) out.add(r.b.text()); PTElement e1 = first(e.children), e2 = second(e.children); L a = asList(ai_parseTree_simplifiedTexts(e1)); L b = asList(ai_parseTree_simplifiedTexts(e2)); S hint = prod.simplificationHint; if (eqOneOf(hint, "L", "B")) insertFirst(b, ""); /*else XXX*/ if (eqOneOf(hint, "R", "B")) insertFirst(a, ""); //print("L " + className(e1) + " " + className(ai_parseTree_descendToComposite(e1)) + " " + r.a.text() + " => " + a); //print("R " + className(e2) + " " + className(ai_parseTree_descendToComposite(e2)) + " " + r.b.text() + " => " + b); /*for (S aa : a) for (S bb : b) out.add(trim(aa + " " + bb));*/ for (PairS p : combineZigZag(a, b)) out.add(trim(p.a + " " + p.b)); // Add full text too out.add(e/ChoosePart.word.text()); } }