public int CompareTo(object o) //reversed! { ResultDocument d = (ResultDocument)o; if (d.Similarity > similarity) { return(1); } else if (d.Similarity < similarity) { return(-1); } else { return(0); } }
public ResultDocument[] Search(string query) { ArrayList queryTerms = MakeQuery(query); //exclude non-terms if (queryTerms.Count == 0) { return(new ResultDocument[0]); //no relevant docs -> return empty array } float queryNorm = Convert.ToSingle(Math.Sqrt(queryTerms.Count)); Hashtable docs = GetRelevantDocs(queryTerms);//docs relevant to ALL terms + sums of term weights for each doc //cos(q,d) = dot(q,d)/|q|x|d| short docId; float sumOfWeights; float docNorm; float cos; float pageRank; float similarity; ResultDocument[] results = new ResultDocument[docs.Count]; int cursor = 0; IDictionaryEnumerator en = docs.GetEnumerator(); while (en.MoveNext()) { docId = Convert.ToInt16(en.Key); sumOfWeights = Convert.ToSingle(en.Value); docNorm = index.GetDocNorm(docId); cos = sumOfWeights / (queryNorm * docNorm); pageRank = index.GetPageRank(docId); similarity = cos; if (cos > 0) { similarity = w * cos + (1f - w) * pageRank; } results[cursor++] = new ResultDocument(docId, pageRank, similarity); } Array.Sort(results); return(results); }