Improve @param docs for Database::compact()
[xapian.git] / xapian-letor / ranklist.cc
blob195bea12c964409ab81135161d356a82c0b9db6f
1 #include <ranklist.h>
3 using namespace std;
4 using namespace Xapian;
6 //Ranklist(const Xapian::MSet & mset,const Xapian::Database & db,const Xapian::Query & query)
7 RankList::RankList()
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;
31 List2 doc_ids;
33 for (Xapian::MSetIterator i = mset.begin(); i != mset.end(); i++) {
34 Xapian::Document doc = i.get_document();
36 FeatureVector fv;
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);
43 if (first==1) {
44 for (int j=1;j<20;j++) {
45 List1 l;
46 l.push_back(fvals[j]);
47 norm.insert(pair <int , list<double> > (j,l));
49 first=0;
50 } else {
51 norm_outer=norm.begin();
52 int k=1;
53 for (;norm_outer!=norm.end();norm_outer++) {
54 norm_outer->second.push_back(fvals[k]);
55 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) {
65 void
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();
72 norm_outer++;
73 int k=0;
74 for (;norm_outer!=norm.end();++norm_outer) {
75 k=0;
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)
79 max = *norm_inner;
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'
83 *norm_inner /= max;
84 k++;
89 return norm;
93 void
94 RankList::add_feature_vector(const Xapian::FeatureVector fv) {
95 rl.push_back(fv);
98 void
99 RankList::set_qid(std::string qid1) {
100 this->qid=qid1;