private void ProximityFilter(string[] words) { ArrayList toBeRemovedDocs = new ArrayList(); using (WordContext context = new WordContextFactory().Create()) { foreach (int docIndex in results.Keys) { for (int i = 0; i < words.Length - 1; i++) { var first = words[i]; var second = words[i + 1]; int firstIndex = context.WordsIndex.Where(x => x.WordCount.Word.Str == first && x.WordCount.Document.DocID == docIndex).Select(x => x.StartIndex).FirstOrDefault(); int secondIndex = context.WordsIndex.Where(x => x.WordCount.Word.Str == second && x.WordCount.Document.DocID == docIndex).Select(x => x.StartIndex).FirstOrDefault(); if (Math.Abs(firstIndex - secondIndex) > PROXIMITY_MAX_DISTANCE) { toBeRemovedDocs.Add(docIndex); } } } } foreach (int index in toBeRemovedDocs) { results.Remove(index); } }
public void PrintResults(List <Result> results) { using (WordContext context = new WordContextFactory().Create()) { foreach (Result result in results) { Console.WriteLine(result.Score + " " + context.Documents.Where(x => x.DocID == result.Index).Select(x => x.Text).FirstOrDefault()); } } }
private List <int> GetFoundDocsIndexForWord(String word) { using (WordContext context = new WordContextFactory().Create()) { if (context.Words.Any(x => x.Str == word)) { DetailsOfWord detailsOfWord = new DetailsOfWord(word); return(context.WordCounts.Where(x => x.Word.Str == word).Select(x => x.Document.DocID).ToList()); } return(null); } }
private void SetResultsScore(string[] wordsToFind) { int score; foreach (string word in wordsToFind) { foreach (int docIndex in results.Keys) { using (WordContext context = new WordContextFactory().Create()) { if (!context.WordCounts.Any(x => x.Document.DocID == docIndex)) { continue; } score = context.WordCounts.Where(x => x.Word.Str == word && x.Document.DocID == docIndex).Select(x => x.Count).FirstOrDefault(); results[docIndex].ChangeScore(score); } } } }