sai2 += ref[i] * ref[i];
sbi2 += key[i] * key[i];
}
- return saibi / (sqrt(sai2) * sqrt(sbi2));
+ return 1.0 - (2 * acos(saibi / sqrt(sai2 * sbi2)) / M_PI);
}
/* Low-cost filter functions */
+static inline double
+cossim_correction(const double s)
+{
+ return -((s - 0.5) * (s - 0.5)) + 0.33;
+}
+
static inline bool
should_grp_score_cos(const struct strgrp *const ctx,
struct strgrp_grp *const grp, const char *const str) {
- return ctx->threshold <= strcossim(ctx->pop, grp->pop);
+ const double s1 = strcossim(ctx->pop, grp->pop);
+ const double s2 = s1 + cossim_correction(s1);
+ return ctx->threshold <= s2;
}
static inline bool