void TNmObjBs::GetFqNmObjIdPrV( const TStr& TargetNmObjStr, TIntPrV& FqNmObjIdPrV) const { //printf("Searching %s ...", TargetNmObjStr.CStr()); // get target named-object-id int TargetNmObjId=GetNmObjId(TargetNmObjStr); // collect target named-object frequencies TIntIntH NmObjIdToFqH; // traverse target named-object documents int NmObjDocs=GetNmObjDocs(TargetNmObjId); for (int NmObjDocIdN=0; NmObjDocIdN<NmObjDocs; NmObjDocIdN++){ // get document-id int DocId=GetNmObjDocId(TargetNmObjId, NmObjDocIdN); // traverse named-object in document int DocNmObjs=GetDocNmObjs(DocId); for (int DocNmObjN=0; DocNmObjN<DocNmObjs; DocNmObjN++){ // get named-object & frequency int NmObjId; int TermFq; GetDocNmObjId(DocId, DocNmObjN, NmObjId, TermFq); // increment named-object document frequency NmObjIdToFqH.AddDat(NmObjId)++; } } // get & sort frequency table FqNmObjIdPrV.Clr(); NmObjIdToFqH.GetDatKeyPrV(FqNmObjIdPrV); FqNmObjIdPrV.Sort(false); }
void TSkyGridBs::GetLinkWgtDstEntIdPrVDiff( const TIntPrV& OldLinkWgtDstEntIdPrV, const TIntPrV& NewLinkWgtDstEntIdPrV, TIntPrV& NegDiffLinkWgtDstEntIdPrV, TIntPrV& PosDiffLinkWgtDstEntIdPrV){ TIntIntH DstEntIdToLinkWgtH; // set previous-vector for (int WordN=0; WordN<NewLinkWgtDstEntIdPrV.Len(); WordN++){ int LinkWgt=NewLinkWgtDstEntIdPrV[WordN].Val1; int DstEntId=NewLinkWgtDstEntIdPrV[WordN].Val2; DstEntIdToLinkWgtH.AddDat(DstEntId, LinkWgt); } // diff current-vector for (int WordN=0; WordN<OldLinkWgtDstEntIdPrV.Len(); WordN++){ int LinkWgt=OldLinkWgtDstEntIdPrV[WordN].Val1; int DstEntId=OldLinkWgtDstEntIdPrV[WordN].Val2; int CurLinkWgt=DstEntIdToLinkWgtH.AddDat(DstEntId); DstEntIdToLinkWgtH.AddDat(DstEntId, CurLinkWgt-LinkWgt); } // extract vector TIntPrV _DiffLinkWgtDstEntIdPrV; DstEntIdToLinkWgtH.GetDatKeyPrV(_DiffLinkWgtDstEntIdPrV); // clean zeros TIntPrV DiffLinkWgtDstEntIdPrV(_DiffLinkWgtDstEntIdPrV.Len(), 0); for (int EntN=0; EntN<_DiffLinkWgtDstEntIdPrV.Len(); EntN++){ int LinkWgt=_DiffLinkWgtDstEntIdPrV[EntN].Val1; if (LinkWgt!=0){ DiffLinkWgtDstEntIdPrV.Add(_DiffLinkWgtDstEntIdPrV[EntN]);} } // positive-vector DiffLinkWgtDstEntIdPrV.Sort(true); NegDiffLinkWgtDstEntIdPrV=DiffLinkWgtDstEntIdPrV; // negative-vector DiffLinkWgtDstEntIdPrV.Sort(false); PosDiffLinkWgtDstEntIdPrV=DiffLinkWgtDstEntIdPrV; }
void TSkyGridEnt::GetSorted_LinkWgtDstEntIdPrV( const uint64& MnTm, const double& TopWgtSumPrc, TIntPrV& LinkWgtDstEntIdPrV) const { double AllLinkWgtSum=0; TIntIntH DstEntIdLinkWgtH; int LinkEnts=GetLinkEnts(); for (int LinkEntN=0; LinkEntN<LinkEnts; LinkEntN++){ int DstEntId=GetLinkEntId(LinkEntN); int EntLinks=GetEntLinks(LinkEntN); int EntLinkWgtSum=0; for (int EntLinkN=0; EntLinkN<EntLinks; EntLinkN++){ const TSkyGridEntLinkCtx& EntLinkCtx=GetEntLinkCtx(LinkEntN, EntLinkN); if (EntLinkCtx.Tm>=MnTm){ EntLinkWgtSum+=EntLinkCtx.LinkWgt;} } DstEntIdLinkWgtH.AddDat(DstEntId, EntLinkWgtSum); AllLinkWgtSum+=EntLinkWgtSum; } LinkWgtDstEntIdPrV.Clr(); DstEntIdLinkWgtH.GetDatKeyPrV(LinkWgtDstEntIdPrV); LinkWgtDstEntIdPrV.Sort(false); // cut long-tail if ((TopWgtSumPrc>0.0)&&(LinkWgtDstEntIdPrV.Len()>0)){ int TopLinkWgt=LinkWgtDstEntIdPrV[0].Val1; if (TopLinkWgt>(3*AllLinkWgtSum)/LinkWgtDstEntIdPrV.Len()){ double CutWgtSum=AllLinkWgtSum*(1-TopWgtSumPrc); int LastValN=LinkWgtDstEntIdPrV.Len()-1; while ((LastValN>0)&&(CutWgtSum>0)){ CutWgtSum-=LinkWgtDstEntIdPrV[LastValN].Val1; LastValN--; } LinkWgtDstEntIdPrV.Trunc(LastValN+1); } } }
///////////////////////////////////////////////// // SkyGrid-Base void TSkyGridBs::GetSorted_DocsEntIdPrV(TIntPrV& DocsEntIdPrV){ TIntIntH EntIdToDocsH; for (int EntId=0; EntId<GetEnts(); EntId++){ int Docs=GetEnt(EntId).GetDocIds(); EntIdToDocsH.AddDat(EntId, Docs); } DocsEntIdPrV.Clr(); EntIdToDocsH.GetDatKeyPrV(DocsEntIdPrV); DocsEntIdPrV.Sort(false); }