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_gm_map (const EPI *epi, const REL_INFO *rel_info, | |
| const RESULTS *results, const TREC_MEAS *tm, TREC_EVAL *eval); | |
| /* See trec_eval.h for definition of TREC_MEAS */ | |
| TREC_MEAS te_meas_gm_map = | |
| {"gm_map", | |
| " Geometric Mean Average Precision\n\ | |
| This is the same measure as 'map' (see description of 'map') on an\n\ | |
| individual topic, but the geometric mean is calculated when averaging\n\ | |
| over topics. This rewards methods that are more consistent over topics\n\ | |
| as opposed to methods which do very well for some topics but very poorly\n\ | |
| for others.\n\ | |
| gm_ap is reported only in the summary over all topics, not for individual\n\ | |
| topics.\n", | |
| te_init_meas_s_float, | |
| te_calc_gm_map, | |
| te_acc_meas_s, | |
| te_calc_avg_meas_s_gm, | |
| te_print_single_meas_empty, | |
| te_print_final_meas_s_float, | |
| NULL, -1}; | |
| static int | |
| te_calc_gm_map (const EPI *epi, const REL_INFO *rel_info, | |
| const RESULTS *results, const TREC_MEAS *tm, TREC_EVAL *eval) | |
| { | |
| RES_RELS res_rels; | |
| double sum; | |
| long rel_so_far; | |
| long i; | |
| if (UNDEF == te_form_res_rels (epi, rel_info, results, &res_rels)) | |
| return (UNDEF); | |
| rel_so_far = 0; | |
| sum = 0.0; | |
| for (i = 0; i < res_rels.num_ret; i++) { | |
| if (res_rels.results_rel_list[i] >= epi->relevance_level) { | |
| rel_so_far++; | |
| sum += (double) rel_so_far / (double) (i + 1); | |
| } | |
| } | |
| if (rel_so_far) { | |
| sum = sum / (double) res_rels.num_rel; | |
| } | |
| eval->values[tm->eval_index].value = | |
| (double) log ((double)(MAX (sum, MIN_GEO_MEAN))); | |
| return (1); | |
| } | |