public override sealed float Score(BasicStats stats, float tfn) { long N = stats.NumberOfDocuments; long n = stats.DocFreq; return(tfn * (float)(SimilarityBase.Log2((N + 1) / (n + 0.5)))); }
public override sealed float Score(BasicStats stats, float tfn) { long N = stats.NumberOfDocuments; long F = stats.TotalTermFreq; return(tfn * (float)(SimilarityBase.Log2(1 + (N + 1) / (F + 0.5)))); }
public override sealed float Score(BasicStats stats, float tfn) { // just like in BE, approximation only holds true when F << N, so we use lambda = F / (N + F) double F = stats.TotalTermFreq + 1; double N = stats.NumberOfDocuments; double lambda = F / (N + F); // -log(1 / (lambda + 1)) -> log(lambda + 1) return((float)(SimilarityBase.Log2(lambda + 1) + tfn * SimilarityBase.Log2((1 + lambda) / lambda))); }
public override sealed float Tfn(BasicStats stats, float tf, float len) { return((float)(tf * SimilarityBase.Log2(1 + c * stats.AvgFieldLength / len))); }