edu.stanford.nlp.parser.lexparser.Debinarizer.java Source code

Java tutorial

Introduction

Here is the source code for edu.stanford.nlp.parser.lexparser.Debinarizer.java

Source

package edu.stanford.nlp.parser.lexparser;

import java.util.*;

import edu.stanford.nlp.ling.CoreLabel;
import edu.stanford.nlp.ling.LabelFactory;
import edu.stanford.nlp.trees.LabeledScoredTreeFactory;
import edu.stanford.nlp.trees.Tree;
import edu.stanford.nlp.trees.TreeFactory;
import edu.stanford.nlp.trees.TreeTransformer;

/** Debinarizes a binary tree from the parser.
 *  Node values with a '@' in them anywhere are assumed to be inserted
 *  nodes for the purpose of binarization, and are removed.
 *  The code also removes the last child of the root node, assuming
 *  that it is an inserted dependency root.
 */
public class Debinarizer implements TreeTransformer {

    private final TreeFactory tf;
    private final boolean forceCNF;
    private final TreeTransformer boundaryRemover;

    protected Tree transformTreeHelper(Tree t) {
        if (t.isLeaf()) {
            Tree leaf = tf.newLeaf(t.label());
            leaf.setScore(t.score());
            return leaf;
        }
        List<Tree> newChildren = new ArrayList<>();
        for (int childNum = 0, numKids = t.numChildren(); childNum < numKids; childNum++) {
            Tree child = t.getChild(childNum);
            Tree newChild = transformTreeHelper(child);
            if ((!newChild.isLeaf()) && newChild.label().value().indexOf('@') >= 0) {
                newChildren.addAll(newChild.getChildrenAsList());
            } else {
                newChildren.add(newChild);
            }
        }
        Tree node = tf.newTreeNode(t.label(), newChildren);
        node.setScore(t.score());
        return node;
    }

    @Override
    public Tree transformTree(Tree t) {
        Tree result = transformTreeHelper(t);
        if (forceCNF) {
            result = new CNFTransformers.FromCNFTransformer().transformTree(result);
        }
        return boundaryRemover.transformTree(result);
    }

    public Debinarizer(boolean forceCNF) {
        this(forceCNF, CoreLabel.factory());
    }

    public Debinarizer(boolean forceCNF, LabelFactory lf) {
        this.forceCNF = forceCNF;
        tf = new LabeledScoredTreeFactory(lf);
        boundaryRemover = new BoundaryRemover();
    }

} // end class Debinarizer