package edu.cmu.minorthird.text.learn;
import edu.cmu.minorthird.classify.BinaryClassifier;
import edu.cmu.minorthird.classify.Classifier;
import edu.cmu.minorthird.classify.Instance;
import edu.cmu.minorthird.classify.OnlineClassifierLearner;
import edu.cmu.minorthird.text.BasicTextBase;
import edu.cmu.minorthird.text.EmptyLabels;
import edu.cmu.minorthird.text.Span;
import edu.cmu.minorthird.text.TextLabels;
/** Class the returns the score of a string rather than an instance
*
* @author Cameron Williams
*/
public class BinaryTextClassifier implements TextClassifier
{
private OnlineClassifierLearner learner;
private SpanFeatureExtractor fe = null;
private int docNum;
private final static String DOC = "OnlineDocument_";
public BinaryTextClassifier(OnlineClassifierLearner learner, SpanFeatureExtractor fe)
{
this.learner = learner;
this.fe = fe;
docNum = 0;
}
/** Returns the weight for a String being in the positive class */
@Override
public double score(String text)
{
BasicTextBase tb = new BasicTextBase();
docNum++;
String docID = DOC + docNum;
tb.loadDocument(docID, text);
Span docSpan = tb.documentSpan(docID);
TextLabels textLabels = new EmptyLabels();
Instance i = fe.extractInstance(textLabels,docSpan);
Classifier c = learner.getClassifier();
double score;
if(c instanceof BinaryClassifier)
score = ((BinaryClassifier)c).score(i);
else throw new IllegalArgumentException("The classifier must be binary");
return score;
}
}