/* Copyright 2003, Carnegie Mellon, All Rights Reserved */
package edu.cmu.minorthird.classify;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
import edu.cmu.minorthird.util.UnionIterator;
import edu.cmu.minorthird.util.gui.ViewerFrame;
/**
* A single instance for a learner.
*
* @author William Cohen
*/
public class MutableInstance extends AbstractInstance{
private Set<Feature> binarySet=new TreeSet<Feature>();
private WeightedSet<Feature> numericSet=new WeightedSet<Feature>();
public MutableInstance(Object source,String subpopulationId){
this.source=source;
this.subpopulationId=subpopulationId;
}
public MutableInstance(Object source){
this(source,null);
}
public MutableInstance(){
this("_unknownSource_");
}
/**
* Add a numeric feature. This also deletes the binary version of
* feature, if it exists.
*/
public void addNumeric(Feature feature,double value){
binarySet.remove(feature);
numericSet.add(feature,value);
}
/** Add a binary feature. */
public void addBinary(Feature feature){
binarySet.add(feature);
}
/** Get the weight assigned to a feature in this instance. */
@Override
public double getWeight(Feature feature){
if(binarySet.contains(feature)){
return 1.0;
}
else{
return numericSet.getWeight(feature);
}
}
/** Return an iterator over all binary features */
@Override
public Iterator<Feature> binaryFeatureIterator(){
return binarySet.iterator();
}
/** Return an iterator over all numeric features */
@Override
public Iterator<Feature> numericFeatureIterator(){
return numericSet.iterator();
}
/** Return an iterator over all features */
@Override
public Iterator<Feature> featureIterator(){
return new UnionIterator<Feature>(binaryFeatureIterator(),numericFeatureIterator());
}
@Override
public int numFeatures(){
return binarySet.size()+numericSet.size();
}
static public void main(String[] args){
try{
MutableInstance instance=new MutableInstance("William Cohen");
instance.addBinary(new Feature("token lc william"));
instance.addBinary(new Feature("token lc cohen"));
instance.addNumeric(new Feature("iq"),250);
instance.addNumeric(new Feature("office"),5317);
System.out.println(instance);
new ViewerFrame("TestInstance Viewer", instance.toGUI());
}catch(Exception e){
e.printStackTrace();
}
}
}