internal async Task <IEnumerable <Recommendation <Document> > > GetNearestDocumentsRecommendations(ConversationContext conversationContext, IEnumerable <Document> documents) { var allRelevantParsedQuery = conversationContext.ContextItems.Where(x => x.Relevant).Select(c => c.NlpAnalysis.ParsedQuery); var contextEntities = new HashSet <string>(string.Join(" ", allRelevantParsedQuery).Split(" ")); if (!contextEntities.Any() || !documents.Any()) { return(new List <Recommendation <Document> >()); } var parameters = new NearestDocumentsParameters { ParsedQuery = string.Join(" ", contextEntities), DocumentsUri = documents.Select(d => d.Uri) }; var results = await this._nearestDocuments.GetNearestDocumentsResults(parameters); if (conversationContext.MustHaveFacets.Any()) { var filteredDocumentsUri = this.FilterDocumentsByFacet(results.Select(x => x.Document), conversationContext.MustHaveFacets); results = results.Where(x => filteredDocumentsUri.Contains(x.Document.Uri)).ToList(); } return(results.Select(x => new Recommendation <Document> { Value = documents.First(d => d.Uri.Equals(x.Document.Uri, StringComparison.InvariantCultureIgnoreCase)), Confidence = x.Score, RecommendedBy = new List <RecommenderType> { RecommenderType.NearestDocuments } }).OrderByDescending(recommendation => recommendation.Confidence)); }
private static StringContent CreateStringContent(NearestDocumentsParameters parameters) { var json = JsonConvert.SerializeObject(parameters); return(new StringContent(json, Encoding.UTF8, "application/json")); }
public async Task <List <NearestDocumentsResult> > GetNearestDocumentsResults(NearestDocumentsParameters parameters) { var response = await this._httpClient.PostAsync("ML/NearestDocuments", CreateStringContent(parameters)); response.EnsureSuccessStatusCode(); return(JsonConvert.DeserializeObject <List <NearestDocumentsResult> >(response.Content.ReadAsStringAsync().Result)); }