package edu.stanford.nlp.ling; /** * A <code>TaggedWordFactory</code> acts as a factory for creating objects of * class <code>TaggedWord</code>. * * @author Christopher Manning * @version 2000/12/21 */ public class TaggedWordFactory implements LabelFactory { public final static int TAG_LABEL = 2; private final char divider; /** * Create a new <code>TaggedWordFactory</code>. * The divider will be taken as '/'. */ public TaggedWordFactory() { this('/'); } /** * Create a new <code>TaggedWordFactory</code>. * * @param divider This character will be used in calls to the one * argument version of <code>newLabel()</code>, to divide * the word from the tag. Stuff after the last instance of this * character will become the tag, and stuff before it will * become the label. */ public TaggedWordFactory(char divider) { this.divider = divider; } /** * Make a new label with this <code>String</code> as the value (word). * Any other fields of the label would normally be null. * * @param labelStr The String that will be used for value * @return The new TaggedWord (tag will be <code>null</code>) */ public Label newLabel(String labelStr) { return new TaggedWord(labelStr); } /** * Make a new label with this <code>String</code> as a value component. * Any other fields of the label would normally be null. * * @param labelStr The String that will be used for value * @param options what to make (use labelStr as word or tag) * @return The new TaggedWord (tag or word will be <code>null</code>) */ public Label newLabel(String labelStr, int options) { if (options == TAG_LABEL) { return new TaggedWord(null, labelStr); } return new TaggedWord(labelStr); } /** * Create a new word, where the label is formed from * the <code>String</code> passed in. The String is divided according * to the divider character. We assume that we can always just * divide on the rightmost divider character, rather than trying to * parse up escape sequences. If the divider character isn't found * in the word, then the whole string becomes the word, and the tag * is <code>null</code>. * * @param word The word that will go into the <code>Word</code> * @return The new TaggedWord */ public Label newLabelFromString(String word) { int where = word.lastIndexOf(divider); if (where >= 0) { return new TaggedWord(word.substring(0, where), word.substring(where + 1)); } else { return new TaggedWord(word); } } /** * Create a new <code>TaggedWord Label</code>, where the label is * formed from * the <code>Label</code> object passed in. Depending on what fields * each label has, other things will be <code>null</code>. * * @param oldLabel The Label that the new label is being created from * @return a new label of a particular type */ public Label newLabel(Label oldLabel) { return new TaggedWord(oldLabel); } }