示例#1
0
        public void FindWorsdInTexts(SearchRequest searchRequest)
        {
            Log.SeqLog.WriteNewLogMessage("Searching for {searchword1}  {searchword2}  {searchword3}  also Synonyms: {alsoSynonyms}", searchRequest.SearchWord1, searchRequest.SearchWord2, searchRequest.SearchWord3, searchRequest.AlsoSynonyms);
            List <TextResult> searchResult = new List <TextResult>();
            List <string>     searchTerms  = searchRequest.GetSearchWords();
            int exactCountMain             = 0;

            // Get Synonyms.
            List <SearchWord> searchWords = GetSynonymsFromOpenThesaurus(searchTerms);

            foreach (SearchWord searchword in searchWords)
            {
                searchword.CleanUpSynonyms();
            }

            IEnumerable <Text> allProcessedTexts = this.textContext.Texts.Include(s => s.Sentences).Where(t => t.Processed == true);

            foreach (Text text in allProcessedTexts)
            {
                for (int i = 0; i < searchWords.Count; i++)
                {
                    // Get all sentences of a Text that contains the exatct, similar or synoym word.
                    List <Sentence> sentencesList = text.Sentences.Where(s => s.SplitSentenceIntoWords().Where(w =>
                                                                                                               w.ToLower() == searchWords[i].Term.ToLower().ToLower() ||
                                                                                                               Fastenshtein.Levenshtein.Distance(w.ToLower(), searchWords[i].Term.ToLower()) == 1 ||
                                                                                                               CheckIfWordISynonyms(w, searchWords[i])
                                                                                                               ).Count() > 0).ToList();


                    if (sentencesList.Count > 0)
                    {
                        TextResult textResult = new TextResult(text.ID);

                        foreach (Sentence sentence in sentencesList)
                        {
                            SentenceResult sentenceResult = new SentenceResult(sentence.SentenceID, 3, 2, 1);
                            sentenceResult.MainSentence     = sentence;
                            sentenceResult.PreviousSentence = GetPreviousSentence(text, sentence);
                            sentenceResult.NextSentence     = GetNextSentence(text, sentence);
                            sentenceResult.CalculateResult(searchWords, searchRequest.AlsoSynonyms);
                            sentenceResult.CalculateTotalScore();
                            // textResult.Sentences.Add(sentenceResult);
                            //Console.WriteLine("hier");

                            textResult.Sentences.Add(sentenceResult);
                        }

                        searchResult.Add(textResult);
                    }
                }
            }

            this._hubContext.Clients.All.InvokeAsync("SendMessageToClient", $"Result for || {searchRequest.SearchWord1}  {searchRequest.SearchWord2}  {searchRequest.SearchWord3}  ||  also Synonyms: {searchRequest.AlsoSynonyms}:");

            List <TextResult> bestResults = searchResult.OrderByDescending(sr => sr.TotalScore).Take(5).ToList();

            foreach (TextResult result in bestResults)
            {
                //this._hubContext.Clients.All.InvokeAsync("SendMessageToClient", $"{JsonConvert.SerializeObject(result).ToString()} \n\n");
                this._hubContext.Clients.All.InvokeAsync("SendMessageToClient", $"{this.PrintResult(result)}");
            }
        }