package edu.stanford.nlp.trees; import edu.stanford.nlp.ling.Label; import edu.stanford.nlp.ling.LabelFactory; import edu.stanford.nlp.ling.StringLabel; /** * A <code>LabeledScoredConstituent</code> object defines an edge in a graph * with a label and a score. * * @author Christopher Manning */ public class LabeledScoredConstituent extends LabeledConstituent { private double score; /** * Create an empty <code>LabeledScoredConstituent</code> object. */ public LabeledScoredConstituent() { // implicitly super(); } /** * Create a <code>LabeledScoredConstituent</code> object with given * values. * * @param start start node of edge * @param end end node of edge */ public LabeledScoredConstituent(int start, int end) { super(start, end); } /** * Create a <code>LabeledScoredConstituent</code> object with given * values. * * @param start start node of edge * @param end end node of edge */ public LabeledScoredConstituent(int start, int end, Label label, double score) { super(start, end, label); this.score = score; } /** * Returns the score associated with the current node, or Nan * if there is no score * * @return the score */ @Override public double score() { return score; } /** * Sets the score associated with the current node, if there is one */ @Override public void setScore(final double score) { this.score = score; } /** * A <code>LabeledScoredConstituentLabelFactory</code> object makes a * <code>LabeledScoredConstituent</code> with a <code>StringLabel</code> * label (or of the type of label passed in for the final constructor). */ private static class LabeledScoredConstituentLabelFactory implements LabelFactory { /** * Make a new <code>LabeledScoredConstituent</code>. * * @param labelStr A string * @return The created label */ public Label newLabel(final String labelStr) { return new LabeledScoredConstituent(0, 0, new StringLabel(labelStr), 0.0); } /** * Make a new <code>LabeledScoredConstituent</code>. * * @param labelStr A string. * @param options The options are ignored. * @return The created label */ public Label newLabel(final String labelStr, final int options) { return newLabel(labelStr); } /** * Make a new <code>LabeledScoredConstituent</code>. * * @param labelStr A string that * @return The created label */ public Label newLabelFromString(final String labelStr) { return newLabel(labelStr); } /** * Create a new <code>LabeledScoredConstituent</code>. * * @param oldLabel A <code>Label</code>. * @return A new <code>LabeledScoredConstituent</code> */ public Label newLabel(Label oldLabel) { return new LabeledScoredConstituent(0, 0, oldLabel, 0.0); } } // extra class guarantees correct lazy loading (Bloch p.194) private static class LabelFactoryHolder { static final LabelFactory lf = new LabeledScoredConstituentLabelFactory(); } /** * Return a factory for this kind of label. * The factory returned is always the same one (a singleton) * * @return the label factory */ @Override public LabelFactory labelFactory() { return LabelFactoryHolder.lf; } // extra class guarantees correct lazy loading (Bloch p.194) private static class ConstituentFactoryHolder { private static final ConstituentFactory cf = new LabeledScoredConstituentFactory(); } /** * Return a factory for this kind of constituent. * The factory returned is always the same one (a singleton). * * @return The constituent factory */ @Override public ConstituentFactory constituentFactory() { return ConstituentFactoryHolder.cf; } /** * Return a factory for this kind of constituent. * The factory returned is always the same one (a singleton). * * @return The constituent factory */ public static ConstituentFactory factory() { return ConstituentFactoryHolder.cf; } }