Example usage for edu.stanford.nlp.trees Tree label

List of usage examples for edu.stanford.nlp.trees Tree label

Introduction

In this page you can find the example usage for edu.stanford.nlp.trees Tree label.

Prototype

@Override
public Label label() 

Source Link

Document

Returns the label associated with the current node, or null if there is no label.

Usage

From source file:CollapseUnaryTransformer.java

License:Apache License

public Tree transformTree(Tree tree) {
    if (tree.isPreTerminal() || tree.isLeaf()) {
        return tree.deepCopy();
    }/*from  www.jav a  2s .c  o  m*/

    Label label = tree.label().labelFactory().newLabel(tree.label());
    Tree[] children = tree.children();
    while (children.length == 1 && !children[0].isLeaf()) {
        children = children[0].children();
    }
    List<Tree> processedChildren = Generics.newArrayList();
    for (Tree child : children) {
        processedChildren.add(transformTree(child));
    }
    return tree.treeFactory().newTreeNode(label, processedChildren);
}

From source file:Treeparse.java

public static List<Tree> GetNounPhrases(Tree parse) {

    List<Tree> phraseList = new ArrayList<Tree>();
    for (Tree subtree : parse) {
        if (subtree.label().value().equals("NP")) {
            String str = subtree.toString();

            if (str.contains("JJ") || str.contains("JJR") || str.contains("JJS") || str.contains("RB")
                    || str.contains("RBR") || str.contains("RBS")) {
                phraseList.add(subtree);

            }/*from w w  w  . ja v  a  2s .c  om*/
        }
    }

    return phraseList;

}

From source file:BuildBinarizedDataset.java

/**
 * Sets all of the labels on a tree to the given default value.
 *///from www  .  ja v a2 s. c  om
public static void setUnknownLabels(Tree tree, Integer defaultLabel) {
    if (tree.isLeaf()) {
        return;
    }

    for (Tree child : tree.children()) {
        setUnknownLabels(child, defaultLabel);
    }

    tree.label().setValue(defaultLabel.toString());
}

From source file:BuildBinarizedDataset.java

public static void setPredictedLabels(Tree tree) {
    if (tree.isLeaf()) {
        return;//from  ww  w.j a  v  a2  s  . c  o  m
    }

    for (Tree child : tree.children()) {
        setPredictedLabels(child);
    }

    tree.label().setValue(Integer.toString(RNNCoreAnnotations.getPredictedClass(tree)));
}

From source file:BuildBinarizedDataset.java

public static boolean setSpanLabel(Tree tree, Pair<Integer, Integer> span, String value) {
    if (!(tree.label() instanceof CoreLabel)) {
        throw new AssertionError("Expected CoreLabels");
    }/*  w w  w  .  j  av a  2  s .c  o  m*/
    CoreLabel label = (CoreLabel) tree.label();
    if (label.get(CoreAnnotations.BeginIndexAnnotation.class).equals(span.first)
            && label.get(CoreAnnotations.EndIndexAnnotation.class).equals(span.second)) {
        label.setValue(value);
        return true;
    }
    if (label.get(CoreAnnotations.BeginIndexAnnotation.class) > span.first
            && label.get(CoreAnnotations.EndIndexAnnotation.class) < span.second) {
        return false;
    }
    for (Tree child : tree.children()) {
        if (setSpanLabel(child, span, value)) {
            return true;
        }
    }
    return false;
}

From source file:Anaphora_Resolution.ParseAllXMLDocuments.java

public static Tree HobbsResolve(Tree pronoun, ArrayList<Tree> forest) {
    Tree wholetree = forest.get(forest.size() - 1); // The last one is the one I am going to start from
    ArrayList<Tree> candidates = new ArrayList<Tree>();
    List<Tree> path = wholetree.pathNodeToNode(wholetree, pronoun);
    System.out.println(path);//from ww  w . j  a  v a2 s. c  om
    // Step 1
    Tree ancestor = pronoun.parent(wholetree); // This one locates the NP the pronoun is in, therefore we need one more "parenting" !
    // Step 2
    ancestor = ancestor.parent(wholetree);
    //System.out.println("LABEL: "+pronoun.label().value() + "\n\tVALUE: "+pronoun.firstChild());
    while (!ancestor.label().value().equals("NP") && !ancestor.label().value().equals("S"))
        ancestor = ancestor.parent(wholetree);
    Tree X = ancestor;
    path = X.pathNodeToNode(wholetree, pronoun);
    System.out.println(path);
    // Step 3
    for (Tree relative : X.children()) {
        for (Tree candidate : relative) {
            if (candidate.contains(pronoun))
                break; // I am looking to all the nodes to the LEFT (i.e. coming before) the path leading to X. contain <-> in the path
            //System.out.println("LABEL: "+relative.label().value() + "\n\tVALUE: "+relative.firstChild());
            if ((candidate.parent(wholetree) != X) && (candidate.parent(wholetree).label().value().equals("NP")
                    || candidate.parent(wholetree).label().value().equals("S")))
                if (candidate.label().value().equals("NP")) // "Propose as the antecedent any NP node that is encountered which has an NP or S node between it and X"
                    candidates.add(candidate);
        }
    }
    // Step 9 is a GOTO step 4, hence I will envelope steps 4 to 8 inside a while statement.
    while (true) { // It is NOT an infinite loop. 
        // Step 4
        if (X.parent(wholetree) == wholetree) {
            for (int q = 1; q < MAXPREVSENTENCES; ++q) {// I am looking for the prev sentence (hence we start with 1)
                if (forest.size() - 1 < q)
                    break; // If I don't have it, break
                Tree prevTree = forest.get(forest.size() - 1 - q); // go to previous tree
                // Now we look for each S subtree, in order of recency (hence right-to-left, hence opposite order of that of .children() ).
                ArrayList<Tree> backlist = new ArrayList<Tree>();
                for (Tree child : prevTree.children()) {
                    for (Tree subtree : child) {
                        if (subtree.label().value().equals("S")) {
                            backlist.add(child);
                            break;
                        }
                    }
                }
                for (int i = backlist.size() - 1; i >= 0; --i) {
                    Tree Treetovisit = backlist.get(i);
                    for (Tree relative : Treetovisit.children()) {
                        for (Tree candidate : relative) {
                            if (candidate.contains(pronoun))
                                continue; // I am looking to all the nodes to the LEFT (i.e. coming before) the path leading to X. contain <-> in the path
                            //System.out.println("LABEL: "+relative.label().value() + "\n\tVALUE: "+relative.firstChild());
                            if (candidate.label().value().equals("NP")) { // "Propose as the antecedent any NP node that you find"
                                if (!candidates.contains(candidate))
                                    candidates.add(candidate);
                            }
                        }
                    }
                }
            }
            break; // It will always come here eventually
        }
        // Step 5
        ancestor = X.parent(wholetree);
        //System.out.println("LABEL: "+pronoun.label().value() + "\n\tVALUE: "+pronoun.firstChild());
        while (!ancestor.label().value().equals("NP") && !ancestor.label().value().equals("S"))
            ancestor = ancestor.parent(wholetree);
        X = ancestor;
        // Step 6
        if (X.label().value().equals("NP")) { // If X is an NP
            for (Tree child : X.children()) { // Find the nominal nodes that X directly dominates
                if (child.label().value().equals("NN") || child.label().value().equals("NNS")
                        || child.label().value().equals("NNP") || child.label().value().equals("NNPS"))
                    if (!child.contains(pronoun))
                        candidates.add(X); // If one of them is not in the path between X and the pronoun, add X to the antecedents
            }
        }
        // Step SETTE
        for (Tree relative : X.children()) {
            for (Tree candidate : relative) {
                if (candidate.contains(pronoun))
                    continue; // I am looking to all the nodes to the LEFT (i.e. coming before) the path leading to X. contain <-> in the path
                //System.out.println("LABEL: "+relative.label().value() + "\n\tVALUE: "+relative.firstChild());
                if (candidate.label().value().equals("NP")) { // "Propose as the antecedent any NP node that you find"
                    boolean contains = false;
                    for (Tree oldercandidate : candidates) {
                        if (oldercandidate.contains(candidate)) {
                            contains = true;
                            break;
                        }
                    }
                    if (!contains)
                        candidates.add(candidate);
                }
            }
        }
        // Step 8
        if (X.label().value().equals("S")) {
            boolean right = false;
            // Now we want all branches to the RIGHT of the path pronoun -> X.
            for (Tree relative : X.children()) {
                if (relative.contains(pronoun)) {
                    right = true;
                    continue;
                }
                if (!right)
                    continue;
                for (Tree child : relative) { // Go in but do not go below any NP or S node. Go below the rest
                    if (child.label().value().equals("NP")) {
                        candidates.add(child);
                        break; // not sure if this means avoid going below NP but continuing with the rest of non-NP children. Should be since its DFS.
                    }
                    if (child.label().value().equals("S"))
                        break; // Same
                }
            }
        }
    }

    // Step 9 is a GOTO, so we use a while.

    System.out.println(pronoun + ": CHAIN IS " + candidates.toString());
    ArrayList<Integer> scores = new ArrayList<Integer>();

    for (int j = 0; j < candidates.size(); ++j) {
        Tree candidate = candidates.get(j);
        Tree parent = null;
        int parent_index = 0;
        for (Tree tree : forest) {
            if (tree.contains(candidate)) {
                parent = tree;
                break;
            }
            ++parent_index;
        }
        scores.add(0);
        if (parent_index == 0)
            scores.set(j, scores.get(j) + 100); // If in the last sentence, +100 points
        scores.set(j, scores.get(j) + syntacticScore(candidate, parent));

        if (existentialEmphasis(candidate)) // Example: "There was a dog standing outside"
            scores.set(j, scores.get(j) + 70);
        if (!adverbialEmphasis(candidate, parent))
            scores.set(j, scores.get(j) + 50);
        if (headNounEmphasis(candidate, parent))
            scores.set(j, scores.get(j) + 80);

        int sz = forest.size() - 1;
        //          System.out.println("pronoun in sentence " + sz + "(sz). Candidate in sentence "+parent_index+" (parent_index)");
        int dividend = 1;
        for (int u = 0; u < sz - parent_index; ++u)
            dividend *= 2;
        //System.out.println("\t"+dividend);
        scores.set(j, scores.get(j) / dividend);
        System.out.println(candidate + " -> " + scores.get(j));
    }
    int max = -1;
    int max_index = -1;
    for (int i = 0; i < scores.size(); ++i) {
        if (scores.get(i) > max) {
            max_index = i;
            max = scores.get(i);
        }
    }
    Tree final_candidate = candidates.get(max_index);
    System.out.println("My decision for " + pronoun + " is: " + final_candidate);
    // Decide what candidate, with both gender resolution and Lappin and Leass ranking.

    Tree pronounparent = pronoun.parent(wholetree).parent(wholetree); // 1 parent gives me the NP of the pronoun
    int pos = 0;
    for (Tree sibling : pronounparent.children()) {
        System.out.println("Sibling " + pos + ": " + sibling);
        if (sibling.contains(pronoun))
            break;
        ++pos;
    }
    System.out.println("Before setchild: " + pronounparent);
    @SuppressWarnings("unused")
    Tree returnval = pronounparent.setChild(pos, final_candidate);
    System.out.println("After setchild: " + pronounparent);

    return wholetree; // wholetree is already modified, since it contains pronounparent
}

From source file:Anaphora_Resolution.ParseAllXMLDocuments.java

private static int syntacticScore(Tree candidate, Tree root) {
    // We will check whether the NP is inside an S (hence it would be a subject)
    // a VP (direct object)
    // a PP inside a VP (an indirect obj)
    Tree parent = candidate;
    while (!parent.label().value().equals("S")) {
        if (parent.label().value().equals("VP"))
            return 50; // direct obj
        if (parent.label().value().equals("PP")) {
            Tree grandparent = parent.parent(root);
            while (!grandparent.label().value().equals("S")) {
                if (parent.label().value().equals("VP")) // indirect obj is a PP inside a VP
                    return 40;
                parent = grandparent;/*from  w w  w .j  a  v a2 s  .  c  om*/
                grandparent = grandparent.parent(root);
            }
        }
        parent = parent.parent(root);
    }
    return 80; // If nothing remains, it must be the subject
}

From source file:Anaphora_Resolution.ParseAllXMLDocuments.java

private static boolean existentialEmphasis(Tree candidate) {
    // We want to check whether our NP's Dets are "a" or "an".
    for (Tree child : candidate) {
        if (child.label().value().equals("DT")) {
            for (Tree leaf : child) {
                if (leaf.value().equals("a") || leaf.value().equals("an") || leaf.value().equals("A")
                        || leaf.value().equals("An")) {
                    //System.out.println("Existential emphasis!");
                    return true;
                }/*from ww  w.j  a  v a2 s.  c o m*/
            }
        }
    }
    return false;
}

From source file:Anaphora_Resolution.ParseAllXMLDocuments.java

private static boolean headNounEmphasis(Tree candidate, Tree root) {
    Tree parent = candidate.parent(root);
    while (!parent.label().value().equals("S")) { // If it is the head NP, it is not contained in another NP (that's exactly how the original algorithm does it)
        if (parent.label().value().equals("NP"))
            return false;
        parent = parent.parent(root);//from w w w .  j  a v  a2 s  .  com
    }
    return true;
}

From source file:Anaphora_Resolution.ParseAllXMLDocuments.java

private static boolean adverbialEmphasis(Tree candidate, Tree root) { // Like in "Inside the castle, King Arthur was invincible". "Castle" has the adv emph.
    Tree parent = candidate;
    while (!parent.label().value().equals("S")) {
        if (parent.label().value().equals("PP")) {
            for (Tree sibling : parent.siblings(root)) {
                if ((sibling.label().value().equals(","))) {
                    //System.out.println("adv Emph!");
                    return true;
                }// w ww . j  ava 2 s . c  o  m
            }
        }
        parent = parent.parent(root);
    }
    return false;
}