+
+
+struct relevance *relevance_create(pp2_charset_t pct,
+ NMEM nmem, const char **terms, int numrecs)
+{
+ struct relevance *res = nmem_malloc(nmem, sizeof(struct relevance));
+ const char **p;
+ int i;
+
+ for (p = terms, i = 0; *p; p++, i++)
+ ;
+ res->vec_len = ++i;
+ res->doc_frequency_vec = nmem_malloc(nmem, res->vec_len * sizeof(int));
+ memset(res->doc_frequency_vec, 0, res->vec_len * sizeof(int));
+ res->nmem = nmem;
+#if USE_TRIE
+ res->wt = build_word_trie(nmem, terms);
+#else
+ res->entries = build_word_entries(pct, nmem, terms);
+ res->pct = pct;
+#endif
+ return res;
+}
+
+void relevance_newrec(struct relevance *r, struct record_cluster *rec)
+{
+ if (!rec->term_frequency_vec)
+ {
+ rec->term_frequency_vec = nmem_malloc(r->nmem, r->vec_len * sizeof(int));
+ memset(rec->term_frequency_vec, 0, r->vec_len * sizeof(int));
+ }
+}
+
+
+void relevance_donerecord(struct relevance *r, struct record_cluster *cluster)
+{
+ int i;
+
+ for (i = 1; i < r->vec_len; i++)
+ if (cluster->term_frequency_vec[i] > 0)
+ r->doc_frequency_vec[i]++;
+
+ r->doc_frequency_vec[0]++;
+}
+
+// Prepare for a relevance-sorted read