/* Copyright (C) 2002 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. */ /** @author Andrew McCallum <a href="mailto:mccallum@cs.umass.edu">mccallum@cs.umass.edu</a> */ package cc.mallet.types; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import cc.mallet.util.PropertyList; /** * A representation of a piece of text, usually a single word, to which we can attach properties. */ public class TokenSequence extends ArrayList<Token> implements Sequence, Serializable { //ArrayList tokens; PropertyList properties = null; // for arbitrary properties public TokenSequence (Collection<Token> tokens) { super(tokens); } public TokenSequence () { super(); } public TokenSequence (int capacity) { super (capacity); } public TokenSequence (Token[] tokens) { this (tokens.length); for (int i = 0; i < tokens.length; i++) this.add( tokens[i] ); } public TokenSequence (Object[] tokens) { this( tokens.length ); for (int i = 0; i < tokens.length; i++) this.add (new Token( tokens[i].toString())); } //public Token get (int i) {return this.get(i); } public String toString () { StringBuffer sb = new StringBuffer(); sb.append( "TokenSequence " + super.toString() + "\n" ); for (int i = 0; i < this.size(); i++) { String tt = get(i).toString(); sb.append( "Token#" + i + ":" ); sb.append( tt ); if (!tt.endsWith( "\n" )) sb.append( "\n" ); } return sb.toString(); } public String toStringShort () { StringBuffer sb = new StringBuffer(); for (int i = 0; i < this.size(); i++) { String tt = get(i).toString(); tt.replaceAll("\n",""); if (i > 0){ sb.append(" "); } sb.append(tt); } return sb.toString(); } // gdruck // This method causes a compiler error in Eclipse Helios. // Removed support for adding Objects other than String. /* public void add (Object o) { if (o instanceof Token) add( (Token)o ); else if (o instanceof TokenSequence) add( (TokenSequence)o ); else add( new Token( o.toString() ) ); } */ public void add(String string) { add(new Token(string)); } // added by Fuchun Peng, Oct. 24, 2003 public Object removeLast () { if (this.size() > 0) return this.remove (this.size() - 1); else return null; } public void addAll (Object[] objects) { for (int i = 0; i < objects.length; i++) { if (objects[i] instanceof Token) add( (Token)objects[i] ); else add( new Token( objects[i].toString() ) ); } } public FeatureSequence toFeatureSequence (Alphabet dict) { FeatureSequence fs = new FeatureSequence( dict, this.size() ); for (int i = 0; i < this.size(); i++) fs.add (dict.lookupIndex( (this.get(i)).getText())); return fs; } public FeatureVector toFeatureVector (Alphabet dict) { return new FeatureVector( toFeatureSequence( dict ) ); } public void setNumericProperty (String key, double value) { properties = PropertyList.add( key, value, properties ); } public void setProperty (String key, Object value) { properties = PropertyList.add( key, value, properties ); } public double getNumericProperty (String key) { return properties.lookupNumber( key ); } public Object getProperty (String key) { return properties.lookupObject( key ); } public boolean hasProperty (String key) { return properties.hasProperty( key ); } // added gmann 8/30/2006 public PropertyList getProperties () { return properties; } // Serialization private static final long serialVersionUID = 1; private static final int CURRENT_SERIAL_VERSION = 0; private void writeObject(ObjectOutputStream out) throws IOException { out.writeInt( CURRENT_SERIAL_VERSION ); out.defaultWriteObject(); } private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { @SuppressWarnings("unused") int version = in.readInt(); in.defaultReadObject(); } }