package fna.parsing.state;
import java.util.*;
/**
* simply count the occurrence of different values
* @author hongcui
*
*/
public class CooccurrenceScore {
private Hashtable<Integer, Integer> scores = null; //value->count
private HashSet<String> sources = new HashSet<String>();
CooccurrenceScore(){
scores = new Hashtable<Integer, Integer>();
}
CooccurrenceScore(int value, String source){
scores = new Hashtable<Integer, Integer>();
scores.put(new Integer(value), new Integer(1));
sources.add(source);
}
public Set<String> getSources(){
return sources;
}
public String getSourcesAsString(){
Iterator<String> it = sources.iterator();
StringBuffer sb = new StringBuffer();
while(it.hasNext()){
sb.append(it.next()+",");
}
sb.replace(sb.lastIndexOf(","), sb.length(), "");
return sb.toString();
}
public void updateBy(int value, String source){
Integer key = new Integer(value);
Integer count = scores.get(key);
int newcount = count==null? 1 : count.intValue()+1;
scores.put(key, new Integer(newcount));
sources.add(source);
}
public boolean isEmpty(){
return scores.size() == 0;
}
public int valueSum(){
int sum = 0;
Enumeration<Integer> en = scores.keys();
while(en.hasMoreElements()){
Integer v = en.nextElement();
Integer c = scores.get(v);
sum +=v.intValue()*c.intValue();
}
if(sum < 0) return 1;
return sum;
}
public String toString(){
StringBuffer sb = new StringBuffer();
sb.append("[");
Enumeration<Integer> en = scores.keys();
while(en.hasMoreElements()){
Integer v = en.nextElement();
Integer c = scores.get(v);
sb.append(v.intValue()+":"+c.intValue()+";");
}
if(sb.lastIndexOf(";") > 0){
sb.replace(sb.lastIndexOf(";"), sb.length(), "]");
}else{
sb.append("]");
}
sb.append(" from sources: "+getSourcesAsString());
return sb.toString();
}
}