/* This file is part of Pazpar2.
- Copyright (C) 2006-2008 Index Data
+ Copyright (C) 2006-2009 Index Data
Pazpar2 is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
*/
-#include <ctype.h>
-#include <math.h>
-#include <stdlib.h>
-
#if HAVE_CONFIG_H
#include <config.h>
#endif
+#include <math.h>
+#include <stdlib.h>
+
#include "relevance.h"
#include "pazpar2.h"
struct relevance *relevance_create(pp2_charset_t pct,
- NMEM nmem, const char **terms, int numrecs)
+ NMEM nmem, const char **terms)
{
struct relevance *res = nmem_malloc(nmem, sizeof(struct relevance));
const char **p;
int i;
float *idfvec = xmalloc(rel->vec_len * sizeof(float));
+ reclist_rewind(reclist);
// Calculate document frequency vector for each term.
for (i = 1; i < rel->vec_len; i++)
{
}
}
// Calculate relevance for each document
- for (i = 0; i < reclist->num_records; i++)
+
+ while (1)
{
int t;
- struct record_cluster *rec = reclist->flatlist[i];
- float relevance;
- relevance = 0;
+ int relevance = 0;
+ struct record_cluster *rec = reclist_read_record(reclist);
+ if (!rec)
+ break;
for (t = 1; t < rel->vec_len; t++)
{
float termfreq;
if (!rec->term_frequency_vec[0])
break;
termfreq = (float) rec->term_frequency_vec[t] / rec->term_frequency_vec[0];
- relevance += termfreq * idfvec[t];
+ relevance += 100000 * (termfreq * idfvec[t] + 0.0000005);
}
- rec->relevance = (int) (relevance * 100000);
+ rec->relevance = relevance;
}
- reclist->pointer = 0;
+ reclist_rewind(reclist);
xfree(idfvec);
}
/*
* Local variables:
* c-basic-offset: 4
+ * c-file-style: "Stroustrup"
* indent-tabs-mode: nil
* End:
* vim: shiftwidth=4 tabstop=8 expandtab
*/
+