Пример #1
0
Файл: tql.cpp Проект: Accio/snap
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;
}
Пример #2
0
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;
}
Пример #3
0
/////////////////////////////////////////////////
// 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;
}