AyushP123

3rd solution for #734

Jun 1st, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.44 KB | None | 0 0
  1. void
  2. MSet::Internal::set_new_weights(vector<double>::iterator weights_begin,vector<double>::iterator weights_end) {  
  3.     max_attained = INT_MIN;
  4.     while (weights_begin!=weights_end)
  5.         items[i].wt = *weight_begin;
  6.         max_attained = max(max_attained,items[i].wt);
  7.         weight_being++;
  8.         // Dont know what the max_possible should be.
  9.     }
  10. }
  11.  
  12. template <typename Iterator>
  13. void
  14. MSet::set_new_weights(Iterator first, Iterator last) {
  15.    set_new_weights_helper(first,last);
  16. }
  17.  
  18. void
  19. Mset::set_new_weights_helper(vector<double>::iterator weights_begin,vector<double>::iterator weights_end)
  20. {
  21.     internal->set_new_weights(weights_being,weights_end);
  22. }
  23.  
  24. void
  25. Ranker::rank(Xapian::MSet & mset, const string & model_key, const Xapian::FeatureList & flist)
  26. {
  27.     LOGCALL(API, std::vector<Xapian::docid>, "Ranker::rank", mset | model_key | flist);
  28.     std::vector<FeatureVector> fvv = flist.create_feature_vectors(mset, letor_query, Xapian::Database(db_path));
  29.     load_model_from_metadata(model_key);
  30.     std::vector<FeatureVector> rankedfvv = rank_fvv(fvv);/*Not sorted, The FeatureVectors are in the original order of the  documents*/
  31.  
  32.     std::vector<double> weights;
  33.     for (size_t i = 0; i < rankedfvv.size(); ++i) {
  34.         weights.push_back(rankedfvv[i].get_score());
  35.     }
  36.    
  37.    mset.set_new_weights(weights);
  38. }
  39. /* The returned weights can be linearly combined for multiple rankers and then we can call MSet::set_new_weights_and_rerank.
Add Comment
Please, Sign In to add comment