/// <summary> /// Gets the candidates. /// </summary> protected override IResult GetCandidates(IList<int> qseq, int maxcand) { // TODO store tsearch as an object property ITThresholdAlgorithm tsearch = new NTTArray8 (-1, false); // ITThresholdAlgorithm tsearch = new MergeTThreshold (); // int maxcand = Math.Abs (this.Maxcand); var len_qseq = qseq.Count; var lists = new IList<int>[ len_qseq]; for (int i = 0; i < len_qseq; ++i) { var rs = this.SEQ.Unravel (qseq [i]); lists [i] = new SortedListRSCache (rs, -i + len_qseq); } // lists [len_qseq] = new ListGen<int> ((int i) => i * knrbound, (int)Math.Ceiling(this.seqindex.Count * 1.0 / knrbound)); IList<int> __C_docs; IList<short> __C_sim; tsearch.SearchTThreshold (lists, 1, out __C_docs, out __C_sim); var res = new ResultTies (Math.Abs (maxcand), false); for (int i = 0; i < __C_docs.Count; ++i) { var docid = __C_docs [i] - len_qseq; docid = docid / this.K; var sim = -__C_sim [i]; res.Push (docid, sim); } return res; }
protected virtual IList<IList<int>> GetPostingLists(IList<string> q) { var posting_lists = new List<IList<int>> (); for (int i = 0; i < q.Count; ++i) { int symbol; if (q[i] != null && this.GetWordId (q [i], out symbol)) { var rs = this.Seq.Unravel (symbol); var L = new SortedListRSCache (rs, -i); posting_lists.Add (L); } } return posting_lists; }
protected virtual IList<IList<int>> GetPostingLists(QueryParser qparser) { var posting_lists = new List<IList<int>> (); for (int i = 0; i < qparser.Query.Count; ++i) { int symbol; if (qparser.Query[i] != null && this.RankVoc (qparser.Query [i], out symbol)) { var rs = this.Seq.Unravel (symbol); var L = new SortedListRSCache (rs, -i); posting_lists.Add (L); } } return posting_lists; }
protected virtual IResult GetCandidates(int[] qseq, int maxcand) { // var n = this.DB.Count; // if (n < 500000) { // //return this.GetCandidatesSmallDB (qseq, maxcand); // } var len_qseq = qseq.Length; var ialg = new BaezaYatesIntersection<int> (new DoublingSearch<int> ()); IList<int> C = new SortedListRSCache (this.SEQ.Unravel (qseq [0])); int i = 1; while (i < len_qseq && C.Count > maxcand) { var rs = this.SEQ.Unravel (qseq [i]); var I = new SortedListRSCache (rs, -i); var L = new List<IList<int>> () {C, I}; var tmp = ialg.Intersection (L); ++i; if (tmp.Count < maxcand) { break; } C = tmp; } var res = new ResultTies (int.MaxValue, false); foreach (var c in C) { if (c % this.K == 0) { res.Push (c / this.K, 0); } } return res; }
public override void Load(BinaryReader Input) { base.Load (Input); int m = Input.ReadInt32(); this.CENTERS = new int[m]; this.COV = new float[m]; // PrimitiveIO<int>.ReadFromFile(Input, m, this.CENTERS); PrimitiveIO<float>.ReadFromFile(Input, m, this.COV); this.SEQ = RankSelectSeqGenericIO.Load(Input); var L = new SortedListRSCache(this.SEQ.Unravel(this.SEQ.Sigma - 1)); this.CENTERS = new List<int>(L); }