4 using namespace Xapian
;
6 //Ranklist(const Xapian::MSet & mset,const Xapian::Database & db,const Xapian::Query & query)
9 /*map<Xapian::docid,double> letor_mset;
11 map<string,long int> coll_len;
12 coll_len=collection_length(letor_db);
14 map<string,long int> coll_tf;
15 coll_tf=collection_termfreq(letor_db,letor_query);
17 map<string,double> idf;
18 idf=inverse_doc_freq(letor_db,letor_query);
20 int first=1; //used as a flag in QueryLevelNorm module
22 //the above list will be mapped to an integer with its feature id.
27 map< int, list<double> >::iterator norm_outer;
28 list<double>::iterator norm_inner;
33 for (Xapian::MSetIterator i = mset.begin(); i != mset.end(); i++) {
34 Xapian::Document doc = i.get_document();
37 fv.set_database(letor_db);
38 fv.set_query(letor_query);
39 std::map<int,double> fvals=fv.transform(doc);
41 add_feature_vector(fv);
44 for (int j=1;j<20;j++) {
46 l.push_back(fvals[j]);
47 norm.insert(pair <int , list<double> > (j,l));
51 norm_outer=norm.begin();
53 for (;norm_outer!=norm.end();norm_outer++) {
54 norm_outer->second.push_back(fvals[k]);
60 norm = normalise(norm,norm_outer,norm_inner);
64 //Map3 normalise(Map3 norm,map< int, list<double> >::iterator norm_outer,list<double>::iterator norm_inner) {
66 RankList::normalise() {
68 /* this is the place where we have to normalize the norm and after that store it in the file. */
70 /* if (!norm.empty()) {
71 norm_outer=norm.begin();
74 for (;norm_outer!=norm.end();++norm_outer) {
76 double max= norm_outer->second.front();
77 for (norm_inner = norm_outer->second.begin();norm_inner != norm_outer->second.end(); ++norm_inner) {
78 if (*norm_inner > max)
81 for (norm_inner = norm_outer->second.begin();norm_inner!=norm_outer->second.end();++norm_inner) {
82 if (max!=0) // sometimes value for whole feature is 0 and hence it may cause 'divide-by-zero'
94 RankList::add_feature_vector(const Xapian::FeatureVector fv
) {
99 RankList::set_qid(std::string qid1
) {