Package edu.stanford.nlp.trees.tregex.tsurgeon

Source Code of edu.stanford.nlp.trees.tregex.tsurgeon.ExciseNode$Matcher

package edu.stanford.nlp.trees.tregex.tsurgeon;

import java.util.Map;

import edu.stanford.nlp.trees.Tree;
import edu.stanford.nlp.trees.Trees;
import edu.stanford.nlp.trees.tregex.TregexMatcher;

/** Excises all nodes from the top to the bottom, and puts all the children of bottom node in where the top was.
* @author Roger Levy (rog@stanford.edu)
*/
class ExciseNode extends TsurgeonPattern {

  /**
   * Top should evaluate to a node that dominates bottom, but this is not checked!
   */
  public ExciseNode(TsurgeonPattern top, TsurgeonPattern bottom) {
    super("excise", new TsurgeonPattern[] { top, bottom });
  }

  /**
   * Excises only the directed node.
   */
  public ExciseNode(TsurgeonPattern node) {
    super("excise", new TsurgeonPattern[] { node,node });
  }

  @Override
  public TsurgeonMatcher matcher(Map<String,Tree> newNodeNames, CoindexationGenerator coindexer) {
    return new Matcher(newNodeNames, coindexer);
  }

  private class Matcher extends TsurgeonMatcher {
    public Matcher(Map<String,Tree> newNodeNames, CoindexationGenerator coindexer) {
      super(ExciseNode.this, newNodeNames, coindexer);
    }

    @Override
    public Tree evaluate(Tree tree, TregexMatcher tregex) {
      Tree topNode = childMatcher[0].evaluate(tree, tregex);
      Tree bottomNode = childMatcher[1].evaluate(tree, tregex);
      if(Tsurgeon.verbose) {
        System.err.println("Excising...original tree:");
        tree.pennPrint(System.err);
        System.err.println("top: " + topNode + "\nbottom:" + bottomNode);
      }
      if (topNode == tree) {
        if (bottomNode.children().length == 1) {
          return bottomNode.children()[0];
        } else {
          return null;
        }
      }
      Tree parent = topNode.parent(tree);
      if(Tsurgeon.verbose)
        System.err.println("Parent: " + parent);
      int i = Trees.objectEqualityIndexOf(parent,topNode);
      parent.removeChild(i);
      for(Tree child : bottomNode.children()) {
        parent.addChild(i,child);
        i++;
      }
      if(Tsurgeon.verbose)
        tree.pennPrint(System.err);
      return tree;
    }
  }
}
TOP

Related Classes of edu.stanford.nlp.trees.tregex.tsurgeon.ExciseNode$Matcher

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.