00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00047 #ifndef _CINVERTEDFILEQUERY
00048 #define _CINVERTEDFILEQUERY
00049 #include "libGIFTQuInvertedFile/include/uses-declarations.h"
00050 #include <memory>
00051 #include <map>
00052 #include "libMRML/include/CSelfDestroyPointer.h"
00053 #include "libMRML/include/CRelevanceLevelList.h"
00054 #include "libMRML/include/CIDRelevanceLevelPairList.h"
00055 #include "libGIFTQuInvertedFile/include/CWeightingFunctionPointerList.h"
00056 #include "libGIFTQuInvertedFile/include/CWeightingFunctionPointerHash.h"
00057 #include "libMRML/include/CAlgorithm.h"
00058 #include "libMRML/include/CQuery.h"
00059 #include "libGIFTAcInvertedFile/include/CAcInvertedFile.h"
00060 #include "libGIFTQuInvertedFile/include/CWeightingFunction.h"
00061 #include "libGIFTQuInvertedFile/include/CQueryNormalizer.h"
00062 #include "libGIFTAcInvertedFile/include/WeightingFunctionsAndNormalizers.h"
00063 class CScoreBoard;
00064 class CAcInvertedFile;
00065
00066 #include "libGIFTQuInvertedFile/include/CWeighter.h"
00067
00072 class CWeighterFactory:protected map< string,CWeighter* >{
00073 public:
00083 CWeighter* newWeighter(const string& inID)const;
00087 CWeighterFactory();
00090 ~CWeighterFactory();
00091 };
00092
00094 class CQInvertedFile:public CQuery{
00095
00096 protected:
00097
00098
00099 CAlgorithm* mDeb;
00100
00102 int mModulo;
00104 int mModuloClass;
00109 CWeighterFactory mWeighterFactory;
00113 CSelfDestroyPointer<CWeighter> mWeighter;
00114
00116 CSelfDestroyPointer<CWeightingFunctionPointerHash>
00117 mQueryFeatureWeighters;
00118
00125 double keepScore(CScoreBoard& inoutScoreBoard,
00126 const CWeightingFunctionPointerList& inFeatures,
00127 bool lPositive)const;
00128
00135 double keepScorePruning(CScoreBoard& inoutScoreBoard,
00136 const CWeightingFunctionPointerList& inFeatures,
00137 bool inPositive,
00138 int inDesiredNumberOfDocuments)const;
00139
00149 void buildQueryHash(CRelevanceLevelList& inQuery,
00150 CWeightingFunctionPointerHash&
00151 outQueryFeatureWeighters)const;
00152
00158 void buildNormalizedQueryList(double inPositiveRelevanceSum,
00159 double inNegativeRelevanceSum,
00160 CWeightingFunctionPointerHash&
00161 inQFW,
00162 CWeightingFunctionPointerList&
00163 outQFW)const;
00164
00170 void buildNormalizedQueryHash(double inPositiveRelevanceSum,
00171 double inNegativeRelevanceSum,
00172 CWeightingFunctionPointerHash&
00173 inQFW)const;
00174
00175 protected:
00181 void init();
00182
00183 public:
00188 void finishInit();
00196 CQInvertedFile(CAccessorAdminCollection& inAccessorAdminCollection,
00197 CAlgorithm& inAlgorithm);
00203 ~CQInvertedFile();
00210 virtual bool setAlgorithm(CAlgorithm& inAlgorithm);
00211
00212
00221 virtual CIDRelevanceLevelPairList* fastQuery(const CXMLElement& inQuery,
00222 int inNumberOfInterestingImages,
00223 double inDifferenceToBest);
00224
00231 virtual CIDRelevanceLevelPairList* fastQueryByFeature(const CWeightingFunctionPointerList& inQuery,
00232 int inNumberOfInterestingImages,
00233 double inDifferenceToBest);
00234
00240 double DIDToScore(TID inDID,
00241 const CWeightingFunctionPointerHash& inQuery)const;
00242
00243
00249 double URLToScore(const string& inURL,
00250 const CWeightingFunctionPointerHash& inQuery)const;
00251
00257 double FeatureListToScore(TID inDID,
00258 const CDocumentFrequencyList& inFeatureList,
00259 const CWeightingFunctionPointerHash& inQuery)const;
00260
00265 void buildNormalizedQueryHash(const CRelevanceLevel& inQuery,
00266 CWeightingFunctionPointerHash&
00267 outQueryFeatureWeighters)const;
00268
00269
00270
00271
00272
00273 static const int MAXIMUMNUMBEROFEATUREGROUPS=50;
00274
00275 bool mBlockingOn;
00276
00277 bool mBlockingArray[MAXIMUMNUMBEROFEATUREGROUPS];
00278
00279
00285 void activateBlockingFeatures();
00286
00292 void releaseBlockingFeatures();
00293
00299 bool featuresBlocked()const;
00300
00306 void blockFeatureGroup(const int featureNumber);
00307
00313 void unblockFeatureGroup(const int featureNumber);
00314
00320 bool isBlocked(const int featureNumber)const;
00321
00322
00323
00328 static const int MAX_SCOREBOARD_PRUNINGS=10;
00329
00332 bool mPruningUsed;
00333
00336 bool mScoreBoardPruningUsed;
00341 typedef struct{
00345 double stopAfterFeature;
00350 double reduceTo;
00351 } parameterPruningType;
00353 parameterPruningType
00354 mScoreBoardPruningArray[MAX_SCOREBOARD_PRUNINGS];
00356 int mNumberofUsedScoreBoardPrunings;
00357
00358
00359 bool mFeaturePruningUsed;
00361 double mPercentageofFeatures;
00362
00363
00364 bool mTimePruningUsed;
00366 double mStoppingTime;
00367
00368
00369
00370
00371 bool mEvaluateAfterPruning;
00372
00379 void releaseAllPrunings();
00380
00381
00389 void useFeaturePruning(double percentage);
00390
00397 void releaseFeaturePruning();
00398
00405 void useTimePruning(double inTimeCutoffPoint);
00406
00413 void releaseTimePruning();
00414
00421 void useScoreBoardPruning(double inCutAfterFraction,
00422 double inReduceToFactor);
00423
00430 void releaseScoreBoardPruning();
00431
00438 void useEvaluateAfterPruning();
00439
00446 void releaseEvaluateAfterPruning();
00450 CWeighter& getWeighter();
00451 };
00452
00453 #endif
00454