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