// e.g."if a snippet contains token X, it also contains token Y"; // returns an iterator of NLA blocks (one for each possible mapping) static ItIt ai_pronounResolvedToNLA(S s) { AI_PronounResolver1 resolver = new(s); resolver.run(); print("nounPhrases", resolver.nounPhrases); print("pronouns", resolver.pronouns); // mapping: pronoun -> noun phrase ret mapI(resolver.allMappings(), mapping -> { L pwt = replaceElementsUsingMap(resolver.pwt, (Map) mapping); pnl(pwt); CountingVarMaker varMaker = new("entity"); new LS lines; new Map entityNames; for (ParsedWithTokens p : values(mapping)) { S name = varMaker!; entityNames.put(p, name); //lines.add("there is " + getVar_rec(p) + " " + name); lines.add("there is " + name); lines.add(name + " is " + getVar_rec(p)); } S prop = joinMap(pwt, p -> str(or(entityNames.get(p), getVar_rec(p)))); lines.add(prop); ret lines(lines); }); }