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>LabeledConstituent</code> object represents a single bracketing in * a derivation, including start and end points and <code>Label</code> * information, but excluding probabilistic information. It is used * to represent the basic information that is accumulated in exploring parses. * * @author Christopher Manning * @version 2002/06/01 */ public class LabeledConstituent extends SimpleConstituent /* implements Label */ { /** * The Label. */ private Label label; /** * Create an empty <code>LabeledConstituent</code> object. */ public LabeledConstituent() { // implicitly super(); } /** * Create a <code>LabeledConstituent</code> object with given * values. * * @param start Start node of edge * @param end End node of edge */ public LabeledConstituent(int start, int end) { super(start, end); } /** * Create a <code>LabeledConstituent</code> object with given values. * * @param start Start node of edge * @param end End node of edge * @param label The label of the <code>Constituent</code> */ public LabeledConstituent(int start, int end, Label label) { super(start, end); this.label = label; } /** * Create a <code>LabeledConstituent</code> object with given values. * * @param start Start node of edge * @param end End node of edge * @param stringValue The name of the <code>Constituent</code> */ public LabeledConstituent(int start, int end, String stringValue) { super(start, end); this.label = new StringLabel(stringValue); } @Override public Label label() { return label; } @Override public void setLabel(Label label) { this.label = label; } @Override public void setFromString(String labelStr) { this.label = new StringLabel(labelStr); } /** * A <code>LabeledConstituentLabelFactory</code> object makes a * <code>StringLabel</code> <code>LabeledScoredConstituent</code>. */ private static class LabeledConstituentLabelFactory implements LabelFactory { /** * Make a new <code>LabeledConstituent</code>. * * @param labelStr A string. * @return The created label */ public Label newLabel(final String labelStr) { return new LabeledConstituent(0, 0, new StringLabel(labelStr)); } /** * Make a new <code>LabeledConstituent</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>LabeledConstituent</code>. * * @param labelStr A string. * @return The created label */ public Label newLabelFromString(final String labelStr) { return newLabel(labelStr); } /** * Create a new <code>LabeledConstituent</code>. * * @param oldLabel A <code>Label</code>. * @return A new <code>LabeledConstituent</code> */ public Label newLabel(Label oldLabel) { return new LabeledConstituent(0, 0, oldLabel); } } // extra class guarantees correct lazy loading (Bloch p.194) private static class LabelFactoryHolder { static final LabelFactory lf = new LabeledConstituentLabelFactory(); } /** * 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 { /** * A <code>LabeledConstituentFactory</code> acts as a factory for * creating objects of class <code>LabeledConstituent</code>. */ private static class LabeledConstituentFactory implements ConstituentFactory { public Constituent newConstituent(int start, int end) { return new LabeledConstituent(start, end); } public Constituent newConstituent(int start, int end, Label label, double score) { return new LabeledConstituent(start, end, label); } } static final ConstituentFactory cf = new LabeledConstituentFactory(); } /** * 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; } }