X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Frelevance.c;h=35b7d8312c040b677350d28a3485addcea460f7a;hb=8534e2155f7fb19a1532510eade51736588386e3;hp=c6b7829b486e717408d7ede111426aec6d5915cc;hpb=ca9817524ebe069581ad72f6bca0e9775d61e30c;p=pazpar2-moved-to-github.git diff --git a/src/relevance.c b/src/relevance.c index c6b7829..35b7d83 100644 --- a/src/relevance.c +++ b/src/relevance.c @@ -33,7 +33,7 @@ struct relevance int *doc_frequency_vec; int vec_len; struct word_entry *entries; - pp2_charset_t pct; + pp2_relevance_token_t prt; NMEM nmem; }; @@ -68,7 +68,8 @@ int word_entry_match(struct word_entry *entries, const char *norm_str) return 0; } -static struct word_entry *build_word_entries(pp2_charset_t pct, NMEM nmem, +static struct word_entry *build_word_entries(pp2_relevance_token_t prt, + NMEM nmem, const char **terms) { int termno = 1; /* >0 signals THERE is an entry */ @@ -77,14 +78,11 @@ static struct word_entry *build_word_entries(pp2_charset_t pct, NMEM nmem, for (; *p; p++) { - pp2_relevance_token_t prt = pp2_relevance_tokenize(pct, *p, 0); const char *norm_str; + pp2_relevance_first(prt, *p, 0); while ((norm_str = pp2_relevance_token_next(prt))) add_word_entry(nmem, &entries, norm_str, termno); - - pp2_relevance_token_destroy(prt); - termno++; } return entries; @@ -93,15 +91,15 @@ static struct word_entry *build_word_entries(pp2_charset_t pct, NMEM nmem, void relevance_countwords(struct relevance *r, struct record_cluster *cluster, const char *words, int multiplier, const char *name) { - pp2_relevance_token_t prt = pp2_relevance_tokenize(r->pct, words, 0); int *mult = cluster->term_frequency_vec_tmp; const char *norm_str; int i, length = 0; + pp2_relevance_first(r->prt, words, 0); for (i = 1; i < r->vec_len; i++) mult[i] = 0; - while ((norm_str = pp2_relevance_token_next(prt))) + while ((norm_str = pp2_relevance_token_next(r->prt))) { int res = word_entry_match(r->entries, norm_str); if (res) @@ -120,7 +118,6 @@ void relevance_countwords(struct relevance *r, struct record_cluster *cluster, } cluster->term_frequency_vec[0] += length; - pp2_relevance_token_destroy(prt); } struct relevance *relevance_create(pp2_charset_t pct, @@ -136,11 +133,20 @@ struct relevance *relevance_create(pp2_charset_t pct, 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; - res->entries = build_word_entries(pct, nmem, terms); - res->pct = pct; + res->prt = pp2_relevance_tokenize(pct); + res->entries = build_word_entries(res->prt, nmem, terms); return res; } +void relevance_destroy(struct relevance **rp) +{ + if (*rp) + { + pp2_relevance_token_destroy((*rp)->prt); + *rp = 0; + } +} + void relevance_newrec(struct relevance *r, struct record_cluster *rec) { if (!rec->term_frequency_vec)