Esempio n. 1
0
        public static async Task <AskQuestionResponse> AnswerQuestion(AskQuestionRequest request, ICollector <SessionTableEntity> sessionTable)
        {
            // Get unique identifier
            string   id           = Guid.NewGuid().ToString();
            DateTime timestampUtc = DateTime.UtcNow;

            // Run keyphrases extraction
            request.Topics = await ServicesUtility.GetTopics(request.Question, request.Topics);

            // Run search services
            string queryWithTopics = request.Topics?.Count() > 0 ? string.Join(" ", request.Topics).Trim() : request.Question;

            // Process results
            AskQuestionResponse response = new AskQuestionResponse()
            {
                Id      = id,
                Results = new AskQuestionResult[0]
            };

            double confidenceScoreThreshold = 20;

            // Get results from QnA maker
            QnAMakerSearchResult qnaResult =
                await ServicesUtility.QnAMaker.GenerateAnswerAsync(queryWithTopics, SettingsUtility.QnAMakerWhoTaskKnowledgebaseId);

            if (qnaResult.Answers?.Where(a => a.Score >= confidenceScoreThreshold).Count() > 0)
            {
                response.Results = ServicesUtility.GetAskQuestionResults(qnaResult, confidenceScoreThreshold, true);
            }
            else
            {
                // Create Bing Search tasks
                BingWebSearchResult bingWebSearchResult =
                    await ServicesUtility.BingSearch.SearchWebAsync(query : request.Question, count : SettingsUtility.MaxResultsCount);

                // Process Bing search results
                if (bingWebSearchResult.WebPagesResult?.Values?.Count() > 0)
                {
                    response.Results = ServicesUtility.GetAskQuestionResults(bingWebSearchResult);
                }
            }

            // Write to session table
            sessionTable.Add(new SessionTableEntity(id, timestampUtc, "Who", request, response));

            // Return response
            return(response);
        }
Esempio n. 2
0
        /// <summary>
        /// Get Ask Question Results from Bing Web Search Result
        /// </summary>
        public static AskQuestionResult[] GetAskQuestionResults(BingWebSearchResult searchResult)
        {
            AskQuestionResult[] results = searchResult.WebPagesResult.Values
                                          .Take(SettingsUtility.MaxResultsCount)
                                          .Select(page => new AskQuestionResult()
            {
                Title          = page.Name,
                Answer         = page.Snippet,
                Source         = "Bing",
                Url            = page.Url,
                UrlDisplayName = "Learn More...",
                ImageUrl       = page.Screenshot?.ThumbnailUrl
            }).ToArray();

            return(results);
        }
Esempio n. 3
0
            public static async Task <AskQuestionResponse> AnswerQuestion(AskQuestionRequest request, ICollector <SessionTableEntity> sessionTable)
            {
                // Get unique identifier
                string   id           = Guid.NewGuid().ToString();
                DateTime timestampUtc = DateTime.UtcNow;

                // Get key phrases extraction
                request.Topics = await ServicesUtility.GetTopics(request.Question, request.Topics);

                string queryWithTopics = request.Topics?.Count() > 0 ? string.Join(" ", request.Topics).Trim() : request.Question;

                // Create video indexer task
                VideoIndexerSearchResult videoIndexerResult = await ServicesUtility.VideoIndexer.SearchAsync(query : queryWithTopics);


                // Process results
                AskQuestionResponse response = new AskQuestionResponse()
                {
                    Id      = id,
                    Results = new AskQuestionResult[0]
                };

                if (videoIndexerResult.Results?.Count() > 0)
                {
                    response.Results = ServicesUtility.GetAskQuestionResults(videoIndexerResult);
                }
                else
                {
                    // Create Bing Search tasks
                    BingWebSearchResult bingWebSearchResult =
                        await ServicesUtility.BingSearch.SearchWebAsync(query : request.Question, count : SettingsUtility.MaxResultsCount);

                    // Process Bing search results
                    if (bingWebSearchResult.WebPagesResult?.Values?.Count() > 0)
                    {
                        response.Results = ServicesUtility.GetAskQuestionResults(bingWebSearchResult);
                    }
                }

                // Write to session table
                sessionTable.Add(new SessionTableEntity(id, timestampUtc, "LearnMore", request, response));

                // Return response
                return(response);
            }
Esempio n. 4
0
        /// <summary>
        /// Search web pages with Bing service
        /// </summary>
        public async Task <BingWebSearchResult> SearchWebAsync(string query, int count = 10, int offset = 0, string market = "en-us", SafeSearch safeSearch = SafeSearch.Strict)
        {
            if (string.IsNullOrEmpty(query) == true)
            {
                return(default(BingWebSearchResult));
            }
            else if (query.Length > MAX_QUERY_LENGTH)
            {
                query = query.Substring(0, MAX_QUERY_LENGTH);
            }

            query = WebUtility.UrlEncode(query);

            // Get request uri
            string searchUrl  = string.Format(this.BaseServiceUrl + "search?q={0}&count={1}&offset={2}&mkt={3}&safesearch={4}", query, count, offset, market, safeSearch);
            Uri    requestUri = new Uri(searchUrl);

            // Get response
            BingWebSearchResult result = await HttpClientUtility.GetAsync <BingWebSearchResult>(requestUri, this.RequestHeaders);

            return(result);
        }
Esempio n. 5
0
        public static async Task <AskQuestionResponse> AnswerQuestion(AskQuestionRequest request, ICollector <SessionTableEntity> sessionTable)
        {
            // Get unique identifier
            string   id           = Guid.NewGuid().ToString();
            DateTime timestampUtc = DateTime.UtcNow;

            // Run keyphrases extraction
            request.Topics = await ServicesUtility.GetTopics(request.Question, request.Topics);

            // Run search services
            string queryWithTopics = request.Topics?.Count() > 0 ? string.Join(" ", request.Topics).Trim() : request.Question;

            // Create Bing Search task
            BingWebSearchResult bingWebSearchResult =
                await ServicesUtility.BingSearch.SearchWebAsync(query : request.Question, count : SettingsUtility.MaxResultsCount);

            // Process results
            AskQuestionResponse response = new AskQuestionResponse()
            {
                Id      = id,
                Results = new AskQuestionResult[0]
            };

            // Process Bing search results
            if (bingWebSearchResult.WebPagesResult?.Values?.Count() > 0)
            {
                response.Results = ServicesUtility.GetAskQuestionResults(bingWebSearchResult);
            }

            // Upload search document to dashboard
            await ServicesUtility.UploadDocumentToSearchService(SettingsUtility.AzureSearchIndexName, new SessionSearchDocument(id, timestampUtc, "AskQuestion", request, response));

            // Write to session table
            sessionTable.Add(new SessionTableEntity(id, timestampUtc, "Question", request, response));

            // Return response
            return(response);
        }