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; }
@SuppressWarnings("unchecked") @Override public boolean equals(Object obj) { if ((obj != null) && (obj.getClass().equals(this.getClass()))) { Tree<T> otherTree = (Tree<T>) obj; if (!(this.label.equals(otherTree.label))) return false; if (this.getNumberOfChildren() != otherTree.getNumberOfChildren()) return false; for (int childId = 0; childId < children.size(); childId++) { if (!(children.get(childId).equals(otherTree.children.get(childId)))) return false; } return true; } return false; }
@SuppressWarnings("unchecked") @Override public boolean equals(Object obj) { if ((obj != null) && (obj.getClass().equals(this.getClass()))) { Tree<T> otherTree = (Tree<T>) obj; if (!(this.label.equals(otherTree.label))) return false; if (this.getNumberOfChildren() != otherTree.getNumberOfChildren()) return false; for (int childId = 0; childId < children.size(); childId++) { if (!(children.get(childId).equals(otherTree.children.get(childId)))) return false; } return true; } return false; }
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; }
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 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; } }
@SuppressWarnings("unchecked") @Override public Object clone() throws CloneNotSupportedException { Tree<T> cloneTree = new Tree<>(this.label); // for (Tree<T> child : children) for (int i = 0; i < this.getNumberOfChildren(); i++) { Tree<T> child = children.get(i); T edgeLabel = childrenEdgeLabels.get(i); cloneTree.addSubtree((Tree<T>) (child.clone()), edgeLabel); } return cloneTree; }
@SuppressWarnings("unchecked") @Override public Object clone() throws CloneNotSupportedException { Tree<T> cloneTree = new Tree<>(this.label); // for (Tree<T> child : children) for (int i = 0; i < this.getNumberOfChildren(); i++) { Tree<T> child = children.get(i); T edgeLabel = childrenEdgeLabels.get(i); cloneTree.addSubtree((Tree<T>) (child.clone()), edgeLabel); } return cloneTree; }
private FeatureExtractor processConjunction(Tree<String> tree, Map<String, FeatureExtractor> cf) throws EdisonException { String uniqueLabel = uniquify(tree); if (cf.containsKey(uniqueLabel)) return cf.get(uniqueLabel); if (tree.getNumberOfChildren() == 0) { throw new EdisonException("Invalid conjunction " + tree); } FeatureExtractor fex = createFex(tree.getChild(0), cf); for (int i = 1; i < tree.getNumberOfChildren(); i++) { fex = FeatureUtilities.conjoin(fex, createFex(tree.getChild(i), cf)); } CachedFeatureCollection f = new CachedFeatureCollection("", fex); cf.put(uniqueLabel, f); return f; }
private FeatureExtractor processConjunction(Tree<String> tree, Map<String, FeatureExtractor> cf) throws EdisonException { String uniqueLabel = uniquify(tree); if (cf.containsKey(uniqueLabel)) return cf.get(uniqueLabel); if (tree.getNumberOfChildren() == 0) { throw new EdisonException("Invalid conjunction " + tree); } FeatureExtractor fex = createFex(tree.getChild(0), cf); for (int i = 1; i < tree.getNumberOfChildren(); i++) { fex = FeatureUtilities.conjoin(fex, createFex(tree.getChild(i), cf)); } CachedFeatureCollection f = new CachedFeatureCollection("", fex); cf.put(uniqueLabel, f); return f; }
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 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 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()); } } }
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, 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; }
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; }
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; }