X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Frelevance.c;h=b4177c06d3a92f222dcc20887225b1df4ec29c37;hb=6bd7fce99de886558fa6d3770ec9d866b5e37ef8;hp=5e1fd76225ff7f9f2bb26990b353840777bf8d9b;hpb=cc29eab9f928f6cd0f4231cb2e554e2ac7b0b1f3;p=pazpar2-moved-to-github.git diff --git a/src/relevance.c b/src/relevance.c index 5e1fd76..b4177c0 100644 --- a/src/relevance.c +++ b/src/relevance.c @@ -1,4 +1,4 @@ -/* $Id: relevance.c,v 1.9 2007-04-10 08:48:56 adam Exp $ +/* $Id: relevance.c,v 1.11 2007-05-01 05:04:53 quinn Exp $ Copyright (c) 2006-2007, Index Data. This file is part of Pazpar2. @@ -63,6 +63,7 @@ static struct word_trie *create_word_trie_node(NMEM nmem) static void word_trie_addterm(NMEM nmem, struct word_trie *n, const char *term, int num) { + while (*term) { int c = tolower(*term); if (c < 'a' || c > 'z') @@ -231,7 +232,17 @@ void relevance_prepare_read(struct relevance *rel, struct reclist *reclist) if (!rel->doc_frequency_vec[i]) idfvec[i] = 0; else - idfvec[i] = log((float) rel->doc_frequency_vec[0] / rel->doc_frequency_vec[i]); + { + // This conditional may be terribly wrong + // It was there to address the situation where vec[0] == vec[i] + // which leads to idfvec[i] == 0... not sure about this + // Traditional TF-IDF may assume that a word that occurs in every + // record is irrelevant, but this is actually something we will + // see a lot + if ((idfvec[i] = log((float) rel->doc_frequency_vec[0] / + rel->doc_frequency_vec[i])) < 0.0000001) + idfvec[i] = 1; + } } // Calculate relevance for each document for (i = 0; i < reclist->num_records; i++)