PTqlCtxSet TTqlItem::Eval(const TTqlIx& TqlIx) const { PTqlCtxSet CtxSet; switch (Type){ case titOr:{ CtxSet=GetItem(0)->Eval(TqlIx); PTqlCtxSet RDocIdSet=GetItem(1)->Eval(TqlIx); CtxSet=CtxSet->GetOrCtxSet(RDocIdSet); break;} case titAnd:{ CtxSet=GetItem(0)->Eval(TqlIx); PTqlCtxSet RDocIdSet=GetItem(1)->Eval(TqlIx); CtxSet=CtxSet->GetAndCtxSet(RDocIdSet); break;} case titNot:{ CtxSet=GetItem()->Eval(TqlIx); // CtxSet->PutNegated(!CtxSet->IsNegated()); break;} //** case titIncl: CtxSet=GetItem()->Eval(TqlIx); break; //** case titExcl: CtxSet=GetItem()->Eval(TqlIx); break; //** case titInTag: CtxSet=GetItem()->Eval(TqlIx); CtxSet=CtxSet->GetTagCtxSet(GetTagNm()); break; case titTagRel: CtxSet=TqlIx.GetCtxSet(GetTagNm(), GetRelOp(), GetRelArgStr(), 1000); break; case titTitle: CtxSet=GetItem()->Eval(TqlIx); CtxSet=CtxSet->GetTitleCtxSet(); break; case titWCard:{ PTqlItem SubItem=GetItem(); CtxSet=TqlIx.GetCtxSet(SubItem->GetWordStr(), true, 100); break;} case titWord:{ CtxSet=TqlIx.GetCtxSet(GetWordStr(), false, -1); break;} case titPhrase:{ //** performs "and" between phrase words only if (GetPhraseLen()>0){ CtxSet=TqlIx.GetCtxSet(GetPhraseWordStr(0), false, -1); for (int WordN=1; WordN<GetPhraseLen(); WordN++){ PTqlCtxSet RDocIdSet= TqlIx.GetCtxSet(GetPhraseWordStr(WordN), false, -1); CtxSet=CtxSet->GetAndCtxSet(RDocIdSet); } } else { CtxSet=TqlIx.GetEmptyCtxSet(); } break;} case titMeta: CtxSet=GetItem()->Eval(TqlIx); break; //** default: Fail; } return CtxSet; }
PWixExpDocIdSet TWixExpItem::Eval(const PWix& Wix){ PWixExpDocIdSet DocIdSet; switch (Type){ case weitOr:{ DocIdSet=GetExpItem(0)->Eval(Wix); PWixExpDocIdSet RDocIdSet=GetExpItem(1)->Eval(Wix); DocIdSet=DocIdSet->OrDocSet(RDocIdSet); break;} case weitAnd:{ DocIdSet=GetExpItem(0)->Eval(Wix); PWixExpDocIdSet RDocIdSet=GetExpItem(1)->Eval(Wix); DocIdSet=DocIdSet->AndDocSet(RDocIdSet); break;} case weitNot:{ DocIdSet=GetExpItem()->Eval(Wix); DocIdSet->PutNegated(!DocIdSet->IsNegated()); break;} case weitIncl: break; //** case weitExcl: break; //** case weitWCard:{ PWixExpItem SubExpItem=GetExpItem(); TBlobPtV DocIdV; Wix->GetDocIdV(SubExpItem->GetWordStr(), false, 100, DocIdV); DocIdSet=PWixExpDocIdSet(new TWixExpDocIdSet(DocIdV)); break;} case weitWord:{ TBlobPtV DocIdV; Wix->GetDocIdV(GetWordStr(), true, -1, DocIdV); DocIdSet=PWixExpDocIdSet(new TWixExpDocIdSet(DocIdV)); break;} case weitPhrase: break; //** case weitMeta: break; //** default: Fail; } return DocIdSet; }
///////////////////////////////////////////////// // NGram-Base TStr TNGramBs::GetWIdVStr(const TIntV& WIdV) const { TChA ChA; for (int WIdN=0; WIdN<WIdV.Len(); WIdN++){ if (WIdN>0){ChA+=' '/*'_'*/;} ChA+=GetWordStr(WIdV[WIdN]);} return ChA; }