コード例 #1
0
/* main()-25 statements */
int
main(int argc, char *argv[])
{
	
	char str[STR_SIZE],query[STR_SIZE],c;
	int bytes=0,count_l=1;
	ranker_t ranked_lines[MAX_LINES_OUT];
	initialize_ranked(ranked_lines);
	
	/* Checking if no command line query is given as input */
	if(argc<2)
	{
		printf("Sorry !! But the query is cannot be empty !!");
		exit(EXIT_FAILURE);
	}
	strcpy(query,argv[1]);
	check_query(query);
	
	/* Printing the query for S0 */
	printf("S0: query = %s",query);
	printf("\n---");
	
	/*Taking each line as input */
	while((c=getchar())!=EOF)
	{	
		/* Checking for end of each line */
		if(c=='\n') 
		{
			str[bytes]='\0';
			
			/* Checking if each line is valid */
			check_line(str);
			
			/* Manipulations to give the S1,S2,S3 AND S4*/
			manip(str,query,count_l,ranked_lines);
			strcpy(str,"");
			bytes=0;
			count_l++;
		}
		else
		{
			str[bytes]=c; /* Putting characters into the string */
			bytes++;
		}		
	}
	
	printf("---------------------------------------------");
	print_rankedlines(ranked_lines);
	/* All done !! Thank You. */
	return 0;
}
コード例 #2
0
ファイル: ir_eval_test.cpp プロジェクト: AlexOcculate/meta
int ir_eval_results()
{
    return testing::run_test(
        "ir-eval-results", [&]()
        {
            create_config("file");
            index::ir_eval eval{"test-config.toml"};
            ASSERT_APPROX_EQUAL(eval.map(), 0.0);
            ASSERT_APPROX_EQUAL(eval.gmap(), 0.0);

            // make some fake results based on the loaded qrels file
            std::vector<std::pair<doc_id, double>> results;
            query_id qid{0};
            auto idcg_5 = 1.0 + 1.0 / std::log2(3.0) + 1.0 / std::log2(4.0)
                          + 1.0 / std::log2(5.0) + 1.0 / std::log2(6.0);
            auto idcg = idcg_5 + 1.0 / std::log2(7.0) + 1.0 / std::log2(8.0)
                        + 1.0 / std::log2(9.0) + 1.0 / std::log2(10.0)
                        + 1.0 / std::log2(11.0);

            results.emplace_back(doc_id{0}, 1.0); // relevant
            check_query(eval, results, qid, 0.2 / 1.1, 1, 0.1, 0.1, 1.0 / idcg);
            check_query(eval, results, qid, 0.2 / 1.1, 1, 0.1, 0.2,
                        1.0 / idcg_5, 5);

            results.emplace_back(doc_id{2}, 0.9); // not relevant
            check_query(eval, results, qid, 0.1 / 0.6, 0.5, 0.1, 0.1,
                        1.0 / idcg);
            check_query(eval, results, qid, 0.1 / 0.6, 0.5, 0.1, 0.2,
                        1.0 / idcg_5, 5);

            results.emplace_back(doc_id{1}, 0.8); // relevant
            check_query(eval, results, qid,
                        (2.0 * (2.0 / 3.0) * 0.2) / (2.0 / 3.0 + 0.2),
                        2.0 / 3.0, 0.2, 1.0 / 6.0, 1.5 / idcg);
            check_query(eval, results, qid,
                        (2.0 * (2.0 / 3.0) * 0.2) / (2.0 / 3.0 + 0.2),
                        2.0 / 3.0, 0.2, 1.0 / 3.0, 1.5 / idcg_5, 5);

            results.emplace_back(doc_id{30}, 0.8);  // relevant
            results.emplace_back(doc_id{6}, 0.7);   // relevant
            results.emplace_back(doc_id{43}, 0.6);  // relevant
            results.emplace_back(doc_id{24}, 0.5);  // relevant
            results.emplace_back(doc_id{34}, 0.4);  // relevant
            results.emplace_back(doc_id{35}, 0.3);  // relevant
            results.emplace_back(doc_id{38}, 0.2);  // relevant
            results.emplace_back(doc_id{754}, 0.1); // relevant
            auto avg_p_5 = (1.0 + 2.0 / 3.0 + 3.0 / 4.0 + 4.0 / 5.0 + 5.0 / 6.0)
                           / 5.0;
            auto avg_p = (1.0 + 2.0 / 3.0 + 3.0 / 4.0 + 4.0 / 5.0 + 5.0 / 6.0
                          + 6.0 / 7.0 + 7.0 / 8.0 + 8.0 / 9.0 + 9.0 / 10.0
                          + 10.0 / 11.0) / 10.0;
            auto dcg_5 = 1.0 + 1.0 / std::log2(4.0) + 1.0 / std::log2(5.0)
                         + 1.0 / std::log2(6.0); // 4 terms, 1 zero term
            auto dcg = dcg_5 + 1.0 / std::log2(7.0) + 1.0 / std::log2(8.0)
                       + 1.0 / std::log2(9.0) + 1.0 / std::log2(10.0)
                       + 1.0 / std::log2(11.0) + 1.0 / std::log2(12.0);
            check_query(eval, results, qid,
                        (2.0 * (10.0 / 11.0)) / ((10.0 / 11.0) + 1.0),
                        10.0 / 11.0, 1.0, avg_p, dcg / idcg);
            check_query(eval, results, qid,
                        (2.0 * (4.0 / 5.0) * 0.4) / ((4.0 / 5.0) + 0.4),
                        4.0 / 5.0, 0.4, avg_p_5, dcg_5 / idcg_5, 5);

            results.erase(results.begin() + 1); // remove non-relevant result
            check_query(eval, results, qid, 1.0, 1.0, 1.0, 1.0, 1.0);
            // recall is still not perfect @5
            check_query(eval, results, qid, 1.0 / 1.5, 1.0, 0.5, 1.0, 1.0, 5);
            system("rm test-config.toml");
        });
}