Package edu.stanford.nlp.semgraph.semgrex.ssurgeon

Source Code of edu.stanford.nlp.semgraph.semgrex.ssurgeon.RemoveEdge

package edu.stanford.nlp.semgraph.semgrex.ssurgeon;

import java.io.StringWriter;

import edu.stanford.nlp.ling.IndexedWord;
import edu.stanford.nlp.semgraph.semgrex.SemgrexMatcher;
import edu.stanford.nlp.trees.GrammaticalRelation;
import edu.stanford.nlp.semgraph.SemanticGraph;
import edu.stanford.nlp.semgraph.SemanticGraphEdge;

/**
* Removes the edge with the given relation type (string name), between
* two named nodes in a graph match.
* @author yeh1
*
*/
public class RemoveEdge extends SsurgeonEdit {
  public static final String LABEL = "removeEdge";

  protected GrammaticalRelation relation; // Name of the matched relation type
  protected String govName; // Name of governor of this reln, in match
  protected String depName; // Name of the dependent in this reln, in match

  public RemoveEdge(GrammaticalRelation relation, String govName, String depName) {
    this.relation = relation;
    this.govName = govName;
    this.depName = depName;
  }

  @Override
  public String toEditString() {
    StringWriter buf = new StringWriter();
    buf.write(LABEL); buf.write("\t");
    buf.write(Ssurgeon.RELN_ARG);buf.write(" ");
    buf.write(relation.toString()); buf.write("\t");
    buf.write(Ssurgeon.GOV_NODENAME_ARG);buf.write(" ");
    buf.write(govName); buf.write("\t");
    buf.write(Ssurgeon.DEP_NODENAME_ARG);buf.write(" ");
    buf.write(depName);
    return buf.toString();
  }

  public static final String WILDCARD_NODE = "**WILDNODE**";

  @Override
  public void evaluate(SemanticGraph sg, SemgrexMatcher sm) {
    boolean govWild = govName.equals(WILDCARD_NODE);
    boolean depWild = depName.equals(WILDCARD_NODE);
    IndexedWord govNode = getNamedNode(govName, sm);
    IndexedWord depNode =getNamedNode(depName, sm);

    if (govNode != null && depNode != null) {
      SemanticGraphEdge edge = sg.getEdge(govNode, depNode, relation);
      if (edge != null) {
        @SuppressWarnings("unused")
        boolean successFlag = sg.removeEdge(edge);
      }
    } else if (depNode != null && govWild) {
      // dep known, wildcard gov
      for (SemanticGraphEdge edge : sg.incomingEdgeIterable(depNode)) {
        if (edge.getRelation().equals(relation) && sg.containsEdge(edge) ) {
          sg.removeEdge(edge);
        }
      }
    }  else if (govNode != null && depWild) {
      // gov known, wildcard dep
      for (SemanticGraphEdge edge : sg.outgoingEdgeIterable(govNode)) {
        if (edge.getRelation().equals(relation) && sg.containsEdge(edge) ) {
          sg.removeEdge(edge);
        }
      }
    }
  }


    public String getDepName() {
      return depName;
    }


    public String getGovName() {
      return govName;
    }

    public String getRelationName() {
      return relation.toString();
    }
  }
TOP

Related Classes of edu.stanford.nlp.semgraph.semgrex.ssurgeon.RemoveEdge

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.