package ivory.ffg.feature;
import ivory.ffg.score.ScoringFunction;
import ivory.ffg.stats.GlobalStats;
/**
* Implementation of a term feature.
*
* @author Nima Asadi
*/
public class TermFeature implements Feature {
private ScoringFunction scoringFunction;
@Override public void initialize(ScoringFunction scoringFunction) {
this.scoringFunction = scoringFunction;
}
@Override public float computeScoreWithSlidingWindow(int[] document, int[] query, int[] hashedQuery, GlobalStats stats) {
int[] tf = countTerms(document, hashedQuery);
float score = 0;
for(int i = 0; i < query.length; i++) {
score += scoringFunction.computeTermScore(query[i], document.length, tf[i], stats);
}
return score;
}
@Override public float computeScoreWithMiniIndexes(int[][] positions, int[] query, int dl, GlobalStats stats) {
float score = 0;
for(int i = 0; i < query.length; i++) {
score += scoringFunction.computeTermScore(query[i], dl, positions[i].length, stats);
}
return score;
}
public static int[] countTerms(int[] document, int[] query) {
int[] tf = new int[query.length];
for(int q = 0; q < query.length; q++) {
for(int i = 0; i < document.length; i++) {
if(document[i] == query[q]) {
tf[q]++;
}
}
}
return tf;
}
@Override public String toString() {
return "featureClass=\"" + TermFeature.class.getName() + "\" " +
scoringFunction.toString();
}
}