/* 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 edu.nd.nina.types; import java.util.ArrayList; import java.util.Collection; import edu.nd.nina.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 { private static final long serialVersionUID = 1L; // 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; } }