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;
/**
* Given a named edge, governor, and dependent, removes that edge
* from the SemanticGraph.
*
* NOTE: you should manually reassign roots for dangling subtrees,
* or delete them outright. This does not perform any new root
* assignments.
*
* TODO: implement logging functionality
* @author yeh1
*
*/
public class RemoveNamedEdge extends SsurgeonEdit {
public static final String LABEL = "removeNamedEdge";
protected String edgeName; // Name of the matched edge in the SemgrexPattern
protected String govName; // Name of governor of this reln, in match
protected String depName; // Name of the dependent in this reln, in match
public RemoveNamedEdge(String edgeName, String govName, String depName) {
this.edgeName = edgeName;
this.govName = govName;
this.depName = depName;
}
@Override
public String toEditString() {
StringWriter buf = new StringWriter();
buf.write(LABEL); buf.write("\t");
buf.write(Ssurgeon.EDGE_NAME_ARG);buf.write(" ");
buf.write(edgeName); 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();
}
@Override
public void evaluate(SemanticGraph sg, SemgrexMatcher sm) {
String relation = sm.getRelnString(edgeName);
IndexedWord govNode = getNamedNode(govName, sm);
IndexedWord depNode = getNamedNode(depName, sm);
SemanticGraphEdge edge = sg.getEdge(govNode, depNode, GrammaticalRelation.valueOf(relation));
if (edge != null) {
sg.removeEdge(edge);
}
}
public String getDepName() {
return depName;
}
public String getEdgeName() {
return edgeName;
}
public String getGovName() {
return govName;
}
}