public void removeChildAt(int position) { this.numNodes -= this.getChild(position).numNodes; this.children.remove(position); this.heightChanged = true; this.yieldChanged = true; }
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> nodeTransformer, final ITransformer<T, S> edgeTransformer) { Tree<S> t = new Tree<>(nodeTransformer.transform(tree)); for (int i = 0; i < tree.getNumberOfChildren(); i++) { Tree<T> treeChild = tree.getChild(i); T edgeLabel = tree.getChildrenEdgeLabels().get(i); t.addSubtree(mapTree(treeChild, nodeTransformer, edgeTransformer), edgeTransformer.transform(edgeLabel)); } return t; }
public void removeChildAt(int position) { this.numNodes -= this.getChild(position).numNodes; this.children.remove(position); this.heightChanged = true; this.yieldChanged = true; }
public static <T, S> Tree<S> mapTree(final Tree<T> tree, final ITransformer<Tree<T>, S> nodeTransformer, final ITransformer<T, S> edgeTransformer) { Tree<S> t = new Tree<>(nodeTransformer.transform(tree)); for (int i = 0; i < tree.getNumberOfChildren(); i++) { Tree<T> treeChild = tree.getChild(i); T edgeLabel = tree.getChildrenEdgeLabels().get(i); t.addSubtree(mapTree(treeChild, nodeTransformer, edgeTransformer), edgeTransformer.transform(edgeLabel)); } return t; }
public static <T> List<Tree<T>> bottomUpBreadthFirstTraversal(Tree<T> tree) { List<Tree<T>> traversal = new ArrayList<>(); Queue<Tree<T>> queue = new LinkedList<>(); queue.add(tree); while (!queue.isEmpty()) { Tree<T> t = queue.remove(); traversal.add(t); for (int i = t.getNumberOfChildren() - 1; i >= 0; i--) { queue.add(t.getChild(i)); } } Collections.reverse(traversal); return traversal; }
public static <T> List<Tree<T>> bottomUpBreadthFirstTraversal(Tree<T> tree) { List<Tree<T>> traversal = new ArrayList<>(); Queue<Tree<T>> queue = new LinkedList<>(); queue.add(tree); while (!queue.isEmpty()) { Tree<T> t = queue.remove(); traversal.add(t); for (int i = t.getNumberOfChildren() - 1; i >= 0; i--) { queue.add(t.getChild(i)); } } Collections.reverse(traversal); return traversal; }
/** * Is a given tree a pre-terminal. This could be used to check for POS tag too, if the * convention is that pre-terminals are POS tags. */ public static boolean isPreTerminal(Tree<String> tree) { if (tree.isLeaf()) return false; return tree.getChild(0).isLeaf(); }
/** * Is a given tree a pre-terminal. This could be used to check for POS tag too, if the * convention is that pre-terminals are POS tags. */ public static boolean isPreTerminal(Tree<String> tree) { if (tree.isLeaf()) return false; return tree.getChild(0).isLeaf(); }
private List<String> getArgs(Tree<String> tree, Map<String, String> variables) throws EdisonException { List<String> args = new ArrayList<>(); if (tree.getNumberOfChildren() != nArgs) throw new EdisonException("Invalid syntax for '" + tree.getLabel() + "'. Expecting " + nArgs + " arguments, found + " + tree.getNumberOfChildren() + " instead.\n" + tree); for (int i = 0; i < nArgs; i++) { String label = tree.getChild(i).getLabel(); if (variables.containsKey(label)) label = variables.get(label); args.add(label); } return args; } }
private void getLeftYield(Tree<T> node, List<T> leftYield) { for (int leftChildId = 0; leftChildId < node.getPositionAmongParentsChildren(); leftChildId++) { List<Tree<T>> leftChildYield = node.getParent().getChild(leftChildId).getYield(); for (Tree<T> leftYieldItem : leftChildYield) { leftYield.add(leftYieldItem.getLabel()); } } }
private void getLeftYield(Tree<T> node, List<T> leftYield) { for (int leftChildId = 0; leftChildId < node.getPositionAmongParentsChildren(); leftChildId++) { List<Tree<T>> leftChildYield = node.getParent().getChild(leftChildId).getYield(); for (Tree<T> leftYieldItem : leftChildYield) { leftYield.add(leftYieldItem.getLabel()); } } }
public Tree<S> parse(String treeString) { tokens = tokenize(treeString); currentTokenId = 0; Tree<S> tree = parseExpr(new Tree<S>()); Tree<S> t1 = tree.getChild(0); t1.makeParentNull(); return t1; }
public Tree<S> parse(String treeString) { tokens = tokenize(treeString); currentTokenId = 0; Tree<S> tree = parseExpr(new Tree<S>()); Tree<S> t1 = tree.getChild(0); t1.makeParentNull(); return t1; }
private FeatureExtractor bigrams(Tree<String> tree, Map<String, FeatureExtractor> cf) throws EdisonException { String uniqueLabel = uniquify(tree); if (cf.containsKey(uniqueLabel)) return cf.get(uniqueLabel); if (tree.getNumberOfChildren() != 1) { throw new EdisonException("bigrams takes exactly one argument\n" + tree); } FeatureExtractor fex = NgramFeatureExtractor.bigrams(getWordFex(createFex(tree.getChild(0), cf))); CachedFeatureCollection cfx = new CachedFeatureCollection("", fex); cf.put(uniquify(tree), cfx); return cfx; }
private FeatureExtractor trigrams(Tree<String> tree, Map<String, FeatureExtractor> cf) throws EdisonException { String uniqueLabel = uniquify(tree); if (cf.containsKey(uniqueLabel)) return cf.get(uniqueLabel); if (tree.getNumberOfChildren() != 1) { throw new EdisonException("trigrams takes exactly one argument\n" + tree); } FeatureExtractor fex = NgramFeatureExtractor.trigrams(getWordFex(createFex(tree.getChild(0), cf))); CachedFeatureCollection cfx = new CachedFeatureCollection("", fex); cf.put(uniquify(tree), cfx); return cfx; }
private void getRightYield(Tree<T> node, List<T> rightYield) { for (int rightChildId = node.getPositionAmongParentsChildren() + 1; rightChildId < node .getParent().getNumberOfChildren(); rightChildId++) { List<Tree<T>> rightChildYield = node.getParent().getChild(rightChildId).getYield(); for (Tree<T> rightYieldItem : rightChildYield) { rightYield.add(rightYieldItem.getLabel()); } } }
private FeatureExtractor trigrams(Tree<String> tree, Map<String, FeatureExtractor> cf) throws EdisonException { String uniqueLabel = uniquify(tree); if (cf.containsKey(uniqueLabel)) return cf.get(uniqueLabel); if (tree.getNumberOfChildren() != 1) { throw new EdisonException("trigrams takes exactly one argument\n" + tree); } FeatureExtractor fex = NgramFeatureExtractor.trigrams(getWordFex(createFex(tree.getChild(0), cf))); CachedFeatureCollection cfx = new CachedFeatureCollection("", fex); cf.put(uniquify(tree), cfx); return cfx; }
private void getRightYield(Tree<T> node, List<T> rightYield) { for (int rightChildId = node.getPositionAmongParentsChildren() + 1; rightChildId < node .getParent().getNumberOfChildren(); rightChildId++) { List<Tree<T>> rightChildYield = node.getParent().getChild(rightChildId).getYield(); for (Tree<T> rightYieldItem : rightChildYield) { rightYield.add(rightYieldItem.getLabel()); } } }
protected Tree<Pair<String, Integer>> collapsePrepositionLabels(Tree<Pair<String, Integer>> tree) { Tree<Pair<String, Integer>> newTree = new Tree<>(tree.getLabel()); for (int i = 0; i < tree.getNumberOfChildren(); i++) { Tree<Pair<String, Integer>> child = tree.getChild(i); String edgeLabel = tree.getEdgeLabel(i).getFirst(); String[] tags = edgeLabel.split(", "); String childLabel = tags[2].split(": ")[1]; if (childLabel.equals("PP")) { Pair<Tree<Pair<String, Integer>>, String> processedPP = processPPTree(child); newTree.addSubtree(processedPP.getFirst(), new Pair<>(processedPP.getSecond(), -1)); } else { newTree.addSubtree(collapsePrepositionLabels(child), tree.getEdgeLabel(i)); } } return newTree; }