static L ai_extractEntities_v1(S input) { if (startsWith(input, "!")) ret emptyList(); // skip commands input = ai_lookupCurlyCheatSheet(input); ret ai_extractEntities_v1(ai_parseToCulledTree(input)); } static L ai_extractEntities_v1(PTElement tree) { new HashSet toSkip; new L out; for (PTElement e : ai_scanParseTreeForCategory(tree, "")) { if (toSkip.contains(e)) continue; //print("Entity found: " + e.text()); out.add(e); PTElement ee = ai_parseTree_simplifyNode(e); if (ee != null && ee != e) toSkip.add(ee); } ret out; }