public int getPositionAmongParentsChildren() { if (this.isRoot()) return 0; return this.parent.getChildren().indexOf(this); }
public static boolean isPreTerminal(Tree t) { List<Tree> kids = t.getChildren(); return (kids.size() == 1) && (kids.get(0).isLeaf()); }
public int getPositionAmongParentsChildren() { if (this.isRoot()) return 0; return this.parent.getChildren().indexOf(this); }
public static boolean isPreTerminal(Tree t) { List<Tree> kids = t.getChildren(); return (kids.size() == 1) && (kids.get(0).isLeaf()); }
private List<String> getUniqueList(Tree<String> tree) { List<String> f = new ArrayList<>(); f.add(tree.getLabel()); for (Tree<String> child : tree.getChildren()) { f.add(child.toString().replaceAll("\\s+", " ")); } Collections.sort(f); return f; }
private List<String> getUniqueList(Tree<String> tree) { List<String> f = new ArrayList<>(); f.add(tree.getLabel()); for (Tree<String> child : tree.getChildren()) { f.add(child.toString().replaceAll("\\s+", " ")); } Collections.sort(f); return f; }
public static <T, S> Tree<S> mapTreePostfix(Tree<T> tree, ITransformer<Tree<T>, S> transformer) { List<Tree<S>> children = new ArrayList<>(); for (Tree<T> child : tree.getChildren()) { children.add(mapTreePostfix(child, transformer)); } Tree<S> newTree = new Tree<>(transformer.transform(tree)); for (Tree<S> child : children) { newTree.addSubtree(child); } return newTree; }
public static <T, S> Tree<S> mapTreePostfix(Tree<T> tree, ITransformer<Tree<T>, S> transformer) { List<Tree<S>> children = new ArrayList<>(); for (Tree<T> child : tree.getChildren()) { children.add(mapTreePostfix(child, transformer)); } Tree<S> newTree = new Tree<>(transformer.transform(tree)); for (Tree<S> child : children) { newTree.addSubtree(child); } return newTree; }
public static <T, S> Tree<S> mapTreePostfixConditional(Tree<T> tree, ITransformer<Tree<T>, S> transformer, ITransformer<Tree<T>, Boolean> predicate) { List<Tree<S>> children = new ArrayList<>(); for (Tree<T> child : tree.getChildren()) { children.add(mapTreePostfixConditional(child, transformer, predicate)); } Tree<S> newTree = new Tree<>(transformer.transform(tree)); for (int i = 0; i < children.size(); i++) { Tree<S> child = children.get(i); Tree<T> originalChild = tree.getChild(i); if (predicate.transform(originalChild)) newTree.addSubtree(child); } return newTree; }
public static <T, S> Tree<S> mapTreePostfixConditional(Tree<T> tree, ITransformer<Tree<T>, S> transformer, ITransformer<Tree<T>, Boolean> predicate) { List<Tree<S>> children = new ArrayList<>(); for (Tree<T> child : tree.getChildren()) { children.add(mapTreePostfixConditional(child, transformer, predicate)); } Tree<S> newTree = new Tree<>(transformer.transform(tree)); for (int i = 0; i < children.size(); i++) { Tree<S> child = children.get(i); Tree<T> originalChild = tree.getChild(i); if (predicate.transform(originalChild)) newTree.addSubtree(child); } return newTree; }
public static <T, S> Tree<S> mapTree(final Tree<T> tree, final ITransformer<Tree<T>, S> transformer) { Tree<S> t = new Tree<>(transformer.transform(tree)); for (Tree<T> treeChild : tree.getChildren()) { t.addSubtree(mapTree(treeChild, transformer)); } return t; }
public static <T, S> Tree<S> mapTree(final Tree<T> tree, final ITransformer<Tree<T>, S> transformer) { Tree<S> t = new Tree<>(transformer.transform(tree)); for (Tree<T> treeChild : tree.getChildren()) { t.addSubtree(mapTree(treeChild, transformer)); } return t; }
public static Predicate<Constituent> generateQuery(Tree<String> tree, Constituent c, Map<String, String> variables) throws EdisonException { String label = tree.getLabel(); switch (label) { case "and": return and(tree.getChildren(), c, variables); case "or": return or(tree.getChildren(), c, variables); case "not": if (tree.getNumberOfChildren() != 1) { throw new EdisonException("Negation can take only one argument"); } return not(tree.getChild(0), c, variables); default: return knownQuery(tree, c, variables); } }
public static <T, S> Tree<S> conditionalMapTree(Tree<T> tree, ITransformer<Tree<T>, S> transformer, ITransformer<Tree<T>, Boolean> predicate) { Tree<S> t = new Tree<>(transformer.transform(tree)); for (Tree<T> treeChild : tree.getChildren()) { if (predicate.transform(treeChild)) t.addSubtree(conditionalMapTree(treeChild, transformer, predicate)); } return t; }
public static <T, S> Tree<S> conditionalMapTree(Tree<T> tree, ITransformer<Tree<T>, S> transformer, ITransformer<Tree<T>, Boolean> predicate) { Tree<S> t = new Tree<>(transformer.transform(tree)); for (Tree<T> treeChild : tree.getChildren()) { if (predicate.transform(treeChild)) t.addSubtree(conditionalMapTree(treeChild, transformer, predicate)); } return t; }
private Tree<Constituent> getConstituentSubTree(Tree<Pair<String, IntPair>> parseTree) { Pair<String, IntPair> rootLabel = parseTree.getLabel(); Constituent root = createConstituent(rootLabel); Tree<Constituent> constituentTree = new Tree<>(root); for (Tree<Pair<String, IntPair>> child : parseTree.getChildren()) { if (child.isLeaf()) continue; constituentTree.addSubtree(getConstituentSubTree(child)); } return constituentTree; }
private Tree<Constituent> getConstituentSubTree(Tree<Pair<String, IntPair>> parseTree) { Pair<String, IntPair> rootLabel = parseTree.getLabel(); Constituent root = createConstituent(rootLabel); Tree<Constituent> constituentTree = new Tree<>(root); for (Tree<Pair<String, IntPair>> child : parseTree.getChildren()) { if (child.isLeaf()) continue; constituentTree.addSubtree(getConstituentSubTree(child)); } return constituentTree; }
private static boolean createSnippedTree(Tree<String> original, Tree<String> newTree) { assert original.getLabel().equals(newTree.getLabel()); if (original.isLeaf()) return true; boolean addedChild = false; for (Tree<String> child : original.getChildren()) { String label = child.getLabel(); if (ParseTreeProperties.isNullLabel(label)) continue; Tree<String> newChild = new Tree<>(label); if (!createSnippedTree(child, newChild)) continue; newTree.addSubtree(newChild); addedChild = true; } return addedChild; }
/** * We need to adjust the tree span offsets, they are relative to the start of the sentence, * we will make them relative to the start of the text. * @param tree the label, span intpair pairs of pairs of pairs. * @param offset the amount to advance the spans. */ private void adjustTree(Tree<Pair<String, IntPair>> tree, int offset) { IntPair span = tree.getLabel().getSecond(); span.setFirst(span.getFirst()+offset); span.setSecond(span.getSecond()+offset); for (Tree<Pair<String, IntPair>> child : tree.getChildren()) { adjustTree(child, offset); } }
/** * We need to adjust the tree span offsets, they are relative to the start of the sentence, * we will make them relative to the start of the text. * @param tree the label, span intpair pairs of pairs of pairs. * @param offset the amount to advance the spans. */ private void adjustTree(Tree<Pair<String, IntPair>> tree, int offset) { IntPair span = tree.getLabel().getSecond(); span.setFirst(span.getFirst()+offset); span.setSecond(span.getSecond()+offset); for (Tree<Pair<String, IntPair>> child : tree.getChildren()) { adjustTree(child, offset); } }