00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00040 #ifndef _CWEIGHTINGFUNCTION
00041 #define _CWEIGHTINGFUNCTION
00042 #include "libGIFTQuInvertedFile/include/uses-declarations.h"
00043 #include <cmath>
00044 #include "libMRML/include/TID.h"
00045 #include "libGIFTAcInvertedFile/include/CDocumentFrequencyElement.h"
00046 #include "libGIFTAcInvertedFile/include/CAcInvertedFile.h"
00047
00048 class CQueryNormalizer;
00049
00068 class CWeightingFunction{
00069 protected:
00079 double mPositiveRelevanceSum;
00089 double mNegativeRelevanceSum;
00090
00091
00092
00093
00094
00095
00096 double mPositiveTermFrequency;
00097
00098
00099
00100
00101
00102 double mNegativeTermFrequency;
00103
00109 int mFeatureDescription;
00110
00112 TID mID;
00113
00115 const CAcInvertedFile* mAccessor;
00116
00119 mutable CQueryNormalizer* mQueryNormalizer;
00120
00123 mutable CQueryNormalizer* mThisNormalizer;
00124
00130 double mQueryFactor;
00132 double mDocumentFactor;
00133
00134 public:
00135
00142 double getQueryFactor()const;
00143
00149 virtual void preCalculate();
00150
00159 CWeightingFunction(const CAcInvertedFile* inAccessor=0,
00160 CQueryNormalizer* inQueryNormalizer=0,
00161 CQueryNormalizer* inThisNormalizer=0);
00162
00168 void setAccessor(const CAcInvertedFile*);
00169
00175 void setNormalizers(CQueryNormalizer* inQueryNormalizer,
00176 CQueryNormalizer* inThisNormalizer);
00177
00183 void setID(TID);
00184
00190 TID getID()const;
00191
00202 void setRelevanceSum(double inPositiveRelevanceSum,
00203 double inNegativeRelevanceSum);
00204
00211 virtual void addQueryFeature(double inRelevanceLevel,
00212 const CDocumentFrequencyElement&
00213 inQueryFeature);
00214
00220 virtual double getTermFrequency()const;
00221
00227 virtual double subApply(const double inDocumentFrequency,
00228 const double inNormalizingFactor)const;
00229
00235 virtual double apply(const CDocumentFrequencyElement& inResultFeature)const;
00236
00243 double applyOnThis()const;
00244
00248 virtual CWeightingFunction* constructNew(TID inID)const;
00249
00257 virtual CWeightingFunction* clone()const;
00258
00263 virtual ~CWeightingFunction();
00264
00265 friend class CSortByDFTimesLogICF_WF;
00266 };
00267
00273 bool operator<(const CWeightingFunction&,
00274 const CWeightingFunction&);
00275
00277 class CSortByFeatureID_WF:
00278 public binary_function
00279 <CWeightingFunction,CWeightingFunction,bool>{
00281 inline bool operator()(const CWeightingFunction& l,
00282 const CWeightingFunction& t){
00283 return l.getID()<t.getID();
00284 }
00285 };
00286
00293 class CSortByDFTimesLogICF_WF:
00294 public binary_function
00295 <CWeightingFunction,CWeightingFunction,bool>{
00297 inline bool operator()(const CWeightingFunction& l,
00298 const CWeightingFunction& t){
00299 return
00300 l.getTermFrequency()
00301 *
00302 fabs(log(l.mAccessor->FeatureToCollectionFrequency(l.getID())))
00303 <
00304 t.getTermFrequency()
00305 *
00306 fabs(log(t.mAccessor->FeatureToCollectionFrequency(t.getID())));
00307 };
00308 };
00309
00315 class CSortByQueryFactor_WF:
00316 public binary_function
00317 <CWeightingFunction,CWeightingFunction,bool>{
00318 public:
00320 inline bool operator()(const CWeightingFunction& l,
00321 const CWeightingFunction& t){
00322 return
00323 l.getQueryFactor()
00324 <
00325 t.getQueryFactor();
00326 };
00327 };
00334 class CSortByAbsQueryFactor_WF:
00335 public binary_function
00336 <CWeightingFunction,CWeightingFunction,bool>{
00337 public:
00339 inline bool operator()(const CWeightingFunction& l,
00340 const CWeightingFunction& t){
00341 return
00342 fabs(l.getQueryFactor())
00343 <
00344 fabs(t.getQueryFactor());
00345 };
00346 };
00347
00353 template<class CSortOp>
00354 class CSortPointers_WF:
00355 binary_function<CWeightingFunction*,CWeightingFunction*,bool>{
00356 protected:
00358 CSortOp mSorter;
00359 public:
00361 inline CSortPointers_WF(){};
00363 inline bool operator()(const CWeightingFunction* l,
00364 const CWeightingFunction* t){
00365 return mSorter(*l,*t);
00366 };
00367 };
00368
00369 #include "libGIFTQuInvertedFile/include/CQueryNormalizer.h"
00370
00371 #endif
00372
00373