Spaces:
Runtime error
Runtime error
/* | |
Copyright (c) 2008 - Chris Buckley. | |
Permission is granted for use and modification of this file for | |
research, non-commercial purposes. | |
*/ | |
static int | |
te_calc_num_rel (const EPI *epi, const REL_INFO *rel_info, | |
const RESULTS *results, const TREC_MEAS *tm, TREC_EVAL *eval); | |
static int | |
te_calc_avg_num_rel (const EPI *epi, const TREC_MEAS *tm, | |
const ALL_REL_INFO *all_rel_info, TREC_EVAL *accum_eval); | |
/* See trec_eval.h for definition of TREC_MEAS */ | |
TREC_MEAS te_meas_num_rel = | |
{"num_rel", | |
" Number of relevant documents for topic. \n\ | |
May be affected by Judged_docs_only and Max_retrieved_per_topic command\n\ | |
line parameters (as are most measures).\n\ | |
Summary figure is sum of individual topics, not average.\n", | |
te_init_meas_s_long, | |
te_calc_num_rel, | |
te_acc_meas_s, | |
te_calc_avg_num_rel, | |
te_print_single_meas_s_long, | |
te_print_final_meas_s_long, | |
NULL, -1}; | |
static int | |
te_calc_num_rel (const EPI *epi, const REL_INFO *rel_info, | |
const RESULTS *results, const TREC_MEAS *tm, TREC_EVAL *eval) | |
{ | |
RES_RELS res_rels; | |
if (UNDEF == te_form_res_rels (epi, rel_info, results, &res_rels)) | |
return (UNDEF); | |
eval->values[tm->eval_index].value = (double) res_rels.num_rel; | |
return (1); | |
} | |
/* Need custom calc_avg because of -c flag (epi->average_comple_flag). | |
Have to go back to original qrels info to get num_qrels in all topics (not | |
just those with retrieved docs) */ | |
static int | |
te_calc_avg_num_rel (const EPI *epi, const TREC_MEAS *tm, | |
const ALL_REL_INFO *all_rel_info, TREC_EVAL *accum_eval) | |
{ | |
long i,j,k; | |
long num_rel; | |
if (! epi->average_complete_flag) | |
return (1); | |
num_rel = 0; | |
for (i = 0; i < all_rel_info->num_q_rels; i++) { | |
if (0 == strcmp ("qrels", all_rel_info->rel_info[i].rel_format)) { | |
TEXT_QRELS_INFO *trec_qrels; | |
trec_qrels = (TEXT_QRELS_INFO *) all_rel_info->rel_info[i].q_rel_info; | |
for (j = 0; j < trec_qrels->num_text_qrels; j++) { | |
if (trec_qrels->text_qrels[j].rel > 0) | |
num_rel++; | |
} | |
} | |
else if (0 == strcmp ("qrels_jg", all_rel_info->rel_info[i].rel_format)) { | |
TEXT_QRELS_JG_INFO *trec_qrels; | |
trec_qrels = (TEXT_QRELS_JG_INFO *) all_rel_info->rel_info[i].q_rel_info; | |
for (j = 0; j < trec_qrels->num_text_qrels_jg; j++) { | |
for (k = 0; k < trec_qrels->text_qrels_jg[j].num_text_qrels; k++) { | |
if (trec_qrels->text_qrels_jg[j].text_qrels[k].rel > 0) | |
num_rel++; | |
} | |
} | |
} | |
else { | |
fprintf (stderr, "trec_eval: m_num_rel: rel_info format not qrels or qrels_jg\n"); | |
return (UNDEF); | |
} | |
} | |
accum_eval->values[tm->eval_index].value = num_rel; | |
return (1); | |
} | |