edu.stanford.nlp.trees.NamedDependency Maven / Gradle / Ivy
package edu.stanford.nlp.trees;
import edu.stanford.nlp.ling.Label;
import edu.stanford.nlp.util.XMLUtils;
/**
* An individual dependency between a head and a dependent.
* The head and dependent are represented as a Label.
* For example, these can be a
* Word or a WordTag. If one wishes the dependencies to preserve positions
* in a sentence, then each can be a NamedConstituent.
*
* @author Christopher Manning
* @author Spence Green
*
*/
public class NamedDependency extends UnnamedDependency {
private static final long serialVersionUID = -1635646451505721133L;
private final Object name;
public NamedDependency(String regent, String dependent, Object name) {
super(regent, dependent);
this.name = name;
}
public NamedDependency(Label regent, Label dependent, Object name) {
super(regent, dependent);
this.name = name;
}
@Override
public Object name() {
return name;
}
@Override
public int hashCode() {
return regentText.hashCode() ^ dependentText.hashCode() ^ name.hashCode();
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
} else if ( !(o instanceof NamedDependency)) {
return false;
}
NamedDependency d = (NamedDependency) o;
return equalsIgnoreName(o) && name.equals(d.name);
}
@Override
public String toString() {
return String.format("%s --%s--> %s", regentText, name.toString(), dependentText);
}
/**
* Provide different printing options via a String keyword.
* The recognized options are currently "xml", and "predicate".
* Otherwise the default toString() is used.
*/
@Override
public String toString(String format) {
switch (format) {
case "xml":
return " \n " + XMLUtils.escapeXML(governor().value()) + " \n " + XMLUtils.escapeXML(dependent().value()) + " \n ";
case "predicate":
return "dep(" + governor() + "," + dependent() + "," + name() + ")";
default:
return toString();
}
}
@Override
public DependencyFactory dependencyFactory() {
return DependencyFactoryHolder.df;
}
public static DependencyFactory factory() {
return DependencyFactoryHolder.df;
}
// extra class guarantees correct lazy loading (Bloch p.194)
private static class DependencyFactoryHolder {
private static final DependencyFactory df = new NamedDependencyFactory();
}
/**
* A DependencyFactory
acts as a factory for creating objects
* of class Dependency
*/
private static class NamedDependencyFactory implements DependencyFactory {
/**
* Create a new Dependency
.
*/
public Dependency