package ecologylab.bigsemantics.model.text;
import java.text.DecimalFormat;
import java.util.Hashtable;
import ecologylab.serialization.ElementStateOrmBase;
import ecologylab.serialization.annotations.simpl_inherit;
import ecologylab.serialization.annotations.simpl_scalar;
@simpl_inherit
public class Term extends ElementStateOrmBase implements Comparable<Term>
{
private static final Hashtable<String, String> uniqueStemObjectMap = new Hashtable<String, String>();
@simpl_scalar private String stem;
@simpl_scalar private String word;
private boolean hasWord = false;
@simpl_scalar private double idf;
public static DecimalFormat ONE_DECIMAL_PLACE = new DecimalFormat("#0.0");
public double idf()
{
return idf;
}
public Term() { }
protected Term(String stem, double idf)
{
this.stem = getUniqueStem(stem);
this.idf = idf;
}
@Override
public String toString()
{
return stem;
}
protected void setWord ( String word )
{
hasWord = true;
this.word = word;
}
public String getWord()
{
if (!hasWord)
return stem;
return word;
}
public String getStem()
{
return stem;
}
public boolean hasWord()
{
return hasWord;
}
public boolean isStopword ( )
{
return false;
}
@Override
public int compareTo(Term o)
{
double difference = this.idf() - o.idf();
if (difference > 0)
return -1;
else
return (difference == 0) ? this.getWord().compareTo(o.getWord()) : 1;
}
/**
* Ensure that only one unique memory location is used for each stem for any term.
* @param stem
* @return
*/
public static String getUniqueStem(String stem)
{
String result = uniqueStemObjectMap.get(stem);
if(result == null)
{
uniqueStemObjectMap.put(stem, stem);
result = stem;
}
return result;
}
}