/* Copyright (C) 2003 Univ. of Massachusetts Amherst, Computer Science Dept. This file is part of "MALLET" (MAchine Learning for LanguagE Toolkit). http://www.cs.umass.edu/~mccallum/mallet This software is provided under the terms of the Common Public License, version 1.0, as published by http://www.opensource.org. For further information, see the file `LICENSE' included with this distribution. */ package cc.mallet.extract; import java.util.ArrayList; import java.util.List; import java.util.Iterator; import java.util.ListIterator; import cc.mallet.types.Label; /** * Created: Oct 12, 2004 * * @author <A HREF="mailto:casutton@cs.umass.edu>casutton@cs.umass.edu</A> * @version $Id: Field.java,v 1.1 2007/10/22 21:37:44 mccallum Exp $ */ public class Field { private Label name; private List values = new ArrayList (); private List allSpans = new ArrayList (); public Field (LabeledSpan span) { name = span.getLabel (); addFiller (span); } public Label getName () { return name; } public int numValues () { return values.size (); } public String value (int i) { return (String) values.get (i); } public LabeledSpan span (int i) { return (LabeledSpan) allSpans.get (i); } public void addFiller (LabeledSpan span) { if (name != span.getLabel ()) throw new IllegalArgumentException ("Attempt to fill slot "+name+" with a span of type "+span.getLabel ()); values.add (span.getText ()); allSpans.add (span); } void cleanField (FieldCleaner cleaner) { //??? Should I prevent the same cleaner from running twice? ListIterator it = values.listIterator (); while (it.hasNext()) { String rawValue = (String) it.next (); it.remove (); it.add (cleaner.cleanFieldValue (rawValue)); } } /** * Returns true if <tt>filler</tt> is an exact match to one of the values * of this field. */ public boolean isValue (String filler) { return values.contains (filler); } public boolean isValue (String filler, FieldComparator comper) { for (Iterator it = values.iterator (); it.hasNext ();) { String s = (String) it.next (); if (comper.matches (filler, s)) return true; } return false; } public String toString () { StringBuffer buf = new StringBuffer (); buf.append ("FIELD NAME: "); buf.append (name); buf.append ("\n"); for (Iterator it = values.iterator (); it.hasNext ();) { String s = (String) it.next (); buf.append ("FILLER:"); buf.append (s); buf.append ("\n"); } return buf.toString (); } }