public WeightedPhraseInfo(LinkedList <TermInfo> terms, float boost, int number) { this.boost = boost; this.seqnum = number; termsOffsets = new List <Toffs>(terms.Count); TermInfo ti = terms.First.Value; termsOffsets.Add(new Toffs(ti.GetStartOffset(), ti.GetEndOffset())); if (terms.Count == 1) { text = ti.GetText(); return; } StringBuilder sb = new StringBuilder(); sb.Append(ti.GetText()); int pos = ti.GetPosition(); bool dummy = true; foreach (TermInfo ti2 in terms) //for (int i = 1; i < terms.Count; i++) { if (dummy) { dummy = false; continue; } //Skip First Item {{DIGY}} ti = ti2; //ti = terms.get(i); sb.Append(ti.GetText()); if (ti.GetPosition() - pos == 1) { Toffs to = termsOffsets[termsOffsets.Count - 1]; to.SetEndOffset(ti.GetEndOffset()); } else { termsOffsets.Add(new Toffs(ti.GetStartOffset(), ti.GetEndOffset())); } pos = ti.GetPosition(); } text = sb.ToString(); }
/// <summary> /// a constructor. /// </summary> /// <param name="fieldTermStack">FieldTermStack object</param> /// <param name="fieldQuery">FieldQuery object</param> public FieldPhraseList(FieldTermStack fieldTermStack, FieldQuery fieldQuery) { String field = fieldTermStack.GetFieldName(); LinkedList <TermInfo> phraseCandidate = new LinkedList <TermInfo>(); QueryPhraseMap currMap = null; QueryPhraseMap nextMap = null; while (!fieldTermStack.IsEmpty()) { phraseCandidate.Clear(); TermInfo ti = fieldTermStack.Pop(); currMap = fieldQuery.GetFieldTermMap(field, ti.GetText()); // if not found, discard top TermInfo from stack, then try next element if (currMap == null) { continue; } // if found, search the longest phrase phraseCandidate.AddLast(ti); while (true) { ti = fieldTermStack.Pop(); nextMap = null; if (ti != null) { nextMap = currMap.GetTermMap(ti.GetText()); } if (ti == null || nextMap == null) { if (ti != null) { fieldTermStack.Push(ti); } if (currMap.IsValidTermOrPhrase(new List <TermInfo>(phraseCandidate))) { AddIfNoOverlap(new WeightedPhraseInfo(phraseCandidate, currMap.GetBoost(), currMap.GetTermOrPhraseNumber())); } else { while (phraseCandidate.Count > 1) { TermInfo last = phraseCandidate.Last.Value; phraseCandidate.RemoveLast(); fieldTermStack.Push(last); currMap = fieldQuery.SearchPhrase(field, new List <TermInfo>(phraseCandidate)); if (currMap != null) { AddIfNoOverlap(new WeightedPhraseInfo(phraseCandidate, currMap.GetBoost(), currMap.GetTermOrPhraseNumber())); break; } } } break; } else { phraseCandidate.AddLast(ti); currMap = nextMap; } } } }