public static string CreateKnowledgebaseUpdate(string portalDb, string knowledgebase) { IEnumerable <PortalDbRecordDTO> portalDbRecords = JsonConvert.DeserializeObject <IEnumerable <PortalDbRecordDTO> >(portalDb); QnADocumentsDTO qnaDocumentsDTO = JsonConvert.DeserializeObject <QnADocumentsDTO>(knowledgebase); List <QnADTO> qnaDTOs = new List <QnADTO>(); LoadQnaDocuments(qnaDocumentsDTO, qnaDTOs); List <PortalDbRecordDTO> portalDbRecordsDTO = new List <PortalDbRecordDTO>(); LoadPortalDbRecords(portalDbRecords, portalDbRecordsDTO); List <MetadataDTO> metadataDTO = new List <MetadataDTO>(); LoadMetadata(qnaDTOs, metadataDTO); KnowledgebaseUpdateDTO knowledgebaseUpdateDTO = new KnowledgebaseUpdateDTO(); LoadKbUpdate(qnaDocumentsDTO, portalDbRecordsDTO, metadataDTO, knowledgebaseUpdateDTO); var knowledgebaseUpdateObject = JsonConvert.SerializeObject(knowledgebaseUpdateDTO); return(knowledgebaseUpdateObject); }
private async Task CognitiveServices_QnA_MigrationGuide_Authoring() { #region Snippet:CognitiveServices_QnA_Maker_Snippets_MigrationGuide_CreateClient QnAMakerClient client = new QnAMakerClient(new ApiKeyServiceClientCredentials("{QnAMakerSubscriptionKey}"), new HttpClient(), false) { Endpoint = "{QnaMakerEndpoint}" }; #endregion Snippet:CognitiveServices_QnA_Maker_Snippets_MigrationGuide_CreateClient #region Snippet:CognitiveServices_QnA_Maker_Snippets_MigrationGuide_CreateKnowledgeBase Microsoft.Azure.CognitiveServices.Knowledge.QnAMaker.Models.Operation createOp = await client.Knowledgebase.CreateAsync(new CreateKbDTO { Name = "{KnowledgeBaseName}", QnaList = new List <QnADTO> { new QnADTO { Questions = new List <string> { "{Question}" }, Answer = "{Answer}" } } }); #endregion Snippet:CognitiveServices_QnA_Maker_Snippets_MigrationGuide_CreateKnowledgeBase #region Snippet:CognitiveServices_QnA_Maker_Snippets_MigrationGuide_UpdateKnowledgeBase Microsoft.Azure.CognitiveServices.Knowledge.QnAMaker.Models.Operation updateOp = await client.Knowledgebase.UpdateAsync("{KnowledgeBaseID}", new UpdateKbOperationDTO { Add = new UpdateKbOperationDTOAdd { QnaList = new List <QnADTO> { new QnADTO { Questions = new List <string> { "{Question}" }, Answer = "{Answer}" } } } }); #endregion Snippet:CognitiveServices_QnA_Maker_Snippets_MigrationGuide_UpdateKnowledgeBase #region Snippet:CognitiveServices_QnA_Maker_Snippets_MigrationGuide_DownloadKnowledgeBase QnADocumentsDTO kbdata = await client.Knowledgebase.DownloadAsync("{KnowledgeBaseID}", EnvironmentType.Test); #endregion Snippet:CognitiveServices_QnA_Maker_Snippets_MigrationGuide_UpdateKnowledgeBase #region Snippet:CognitiveServices_QnA_Maker_Snippets_MigrationGuide_DeleteKnowledgeBase await client.Knowledgebase.DeleteAsync("{KnowledgeBaseID}"); #endregion Snippet:CognitiveServices_QnA_Maker_Snippets_MigrationGuide_DeleteKnowledgeBase }
private static void LoadUpdateQnADTOs( IEnumerable <PortalDbRecordDTO> portalDbRecords, QnADocumentsDTO qnaDocumentsDTO, List <UpdateQnaDTO> updateQnADTOs) { foreach (PortalDbRecordDTO portalDbRecord in portalDbRecords) { Questions questions = new Questions(); questions.Add = new List <string>(); Metadata metadata = new Metadata(); metadata.Add = new List <MetadataDTO>(); metadata.Delete = new List <MetadataDTO>(); foreach (QnADTO qnAdto in qnaDocumentsDTO.QnaDTO) { IEnumerable <string> source = qnAdto.Metadata.Where <MetadataDTO>((Func <MetadataDTO, bool>)(m => m.Name.ToLower() == "faqid")).Select <MetadataDTO, string>((Func <MetadataDTO, string>)(m => m.Value)); if (source.FirstOrDefault <string>() != null) { string str = source.FirstOrDefault <string>().ToString(); if (portalDbRecord.FaqId.ToString() == str) { questions.Add.Add(portalDbRecord.FaqQuestion); foreach (MetadataDTO metadataDto1 in qnAdto.Metadata) { MetadataDTO metadataDto2 = new MetadataDTO() { Name = metadataDto1.Name, Value = metadataDto1.Value }; metadata.Delete.Add(metadataDto2); } List <MetadataDTO> metadataDtoList = LoadMetadata(portalDbRecord); foreach (var metadataDto in metadataDtoList) { metadata.Add.Add(metadataDto); } UpdateQnaDTO updateQnaDto = new UpdateQnaDTO() { Answer = portalDbRecord.FaqAnswer, Context = qnAdto.Context, Id = qnAdto.Id, Metadata = metadata, Questions = questions, Source = qnAdto.Source }; updateQnADTOs.Add(updateQnaDto); } } } } }
private static void LoadQnaDocuments(QnADocumentsDTO qnaDocumentsDTO, List <QnADTO> qnaDTOs) { foreach (var document in qnaDocumentsDTO.QnaDTO) { QnADTO qnaDTO = new QnADTO { Answer = document.Answer, Context = document.Context, Id = document.Id, Metadata = document.Metadata, Questions = document.Questions, Source = document.Source }; qnaDTOs.Add(qnaDTO); } }
private static void LoadAddQnADTOs( IEnumerable <PortalDbRecordDTO> portalDbRecords, QnADocumentsDTO qnaDocumentsDTO, List <QnADTO> qnADTOs) { foreach (PortalDbRecordDTO portalDbRecord in portalDbRecords) { bool flag = false; string str = ""; List <string> source = new List <string>(); foreach (QnADTO qnAdto in qnaDocumentsDTO.QnaDTO) { foreach (MetadataDTO metadataDto in qnAdto.Metadata) { if (metadataDto.Name == "faqid") { str = metadataDto.Value; } } if (str == portalDbRecord.FaqId.ToString()) { flag = true; } } if (!flag) { List <MetadataDTO> metadataDtoList = LoadMetadata(portalDbRecord); source.Add(portalDbRecord.FaqQuestion); QnADTO qnAdto = new QnADTO() { Answer = portalDbRecord.FaqAnswer, Metadata = metadataDtoList, Questions = source.ToList <string>(), Source = "FAQ" }; qnADTOs.Add(qnAdto); } } }
private static void LoadKbUpdate(QnADocumentsDTO qnaDocumentsDTO, List <PortalDbRecordDTO> portalDbRecordsDTO, List <MetadataDTO> metadataDTO, KnowledgebaseUpdateDTO knowledgebaseUpdateDTO) { var currentKbDocumentsFaqIds = from m in metadataDTO where m.Name == "faqid" select new { KbId = m.Id, FaqId = m.Value }; var updateQuestions = from p in portalDbRecordsDTO join m in metadataDTO on p.FaqId.ToString() equals m.Value join q in qnaDocumentsDTO.QnaDTO on m.Id equals q.Id select p.FaqQuestion; var updateAnswers = from p in portalDbRecordsDTO join m in metadataDTO on p.FaqId.ToString() equals m.Value join q in qnaDocumentsDTO.QnaDTO on m.Id equals q.Id select p.FaqAnswer; var updateContexts = from p in portalDbRecordsDTO join m in metadataDTO on p.FaqId.ToString() equals m.Value join q in qnaDocumentsDTO.QnaDTO on m.Id equals q.Id select q.Context; //var updateUrls = from p in portalDbRecordsDTO // join m in metadataDTO // on m.Id equals q.Id // select m. var wow = true; }
private UpdateKbOperationDTO GenerateKbUpdatesFromNewInsults(QnADocumentsDTO kbData, List <InsultResponse> newInsultResponses) { List <QnADTO> newQnAs = new List <QnADTO>(); Dictionary <QnADTO, List <string> > updatesMatrix = new Dictionary <QnADTO, List <string> >(); // Enumerate insult responses, as we want to check each new response exists or not as an Answer foreach (var newInsultResponse in newInsultResponses) { // Do any of the new insult answers exist in another qna answer-list already? QnADTO answerExistingDoc = null; foreach (var qnaDoc in kbData.QnaDocuments) { if (qnaDoc.Answer.ToLower() == newInsultResponse.Text.ToLower()) { // Add insult (question) to existing insult-resoponse (answer) answerExistingDoc = qnaDoc; break; } } if (answerExistingDoc != null) { // Insult response exists. Check each original insult for this response foreach (var responseInsult in newInsultResponse.InsultTriggers) { if (!answerExistingDoc.Questions.Contains(responseInsult.Text)) { var answer = answerExistingDoc.Answer; // Add updates to dictionary by answer, so we can compile all updates together at the end if (!updatesMatrix.ContainsKey(answerExistingDoc)) { updatesMatrix.Add(answerExistingDoc, new List <string>()); } // Add new insult for existing response updatesMatrix[answerExistingDoc].Add(responseInsult.Text); } } } else { // Never seen the insult before, or the response. Add new both. newQnAs.Add(new QnADTO() { Answer = newInsultResponse.Text, Questions = newInsultResponse.InsultTriggers.Select(i => i.Text).ToList() }); } } // Build API structure for all updates var qnasToUpdate = new List <UpdateQnaDTO>(); foreach (var update in updatesMatrix.Keys) { qnasToUpdate.Add(new UpdateQnaDTO { Id = update.Id, Source = update.Source, Answer = update.Answer, Questions = new UpdateQnaDTOQuestions { Add = updatesMatrix[update] } }); } var changes = new UpdateKbOperationDTO(); changes.Add = new UpdateKbOperationDTOAdd() { QnaList = newQnAs }; changes.Update = new UpdateKbOperationDTOUpdate { QnaList = qnasToUpdate }; return(changes); }
public static string CreateKnowledgebaseUpdate( DataTable portal, string knowledgebase, string knowledgebaseName) { IEnumerable <PortalDbRecordDTO> portalDbRecords = (IEnumerable <PortalDbRecordDTO>)JsonConvert.DeserializeObject <IEnumerable <PortalDbRecordDTO> >(JsonConvert.SerializeObject((object)portal)); QnADocumentsDTO qnaDocumentsDTO = (QnADocumentsDTO)JsonConvert.DeserializeObject <QnADocumentsDTO>(knowledgebase); new List <FileDTO>() { new FileDTO() { FileName = (string)null, FileUri = (string)null } }; List <MetadataDTO> metadataDtoList = new List <MetadataDTO>(); LoadMetadata(qnaDocumentsDTO.QnaDTO, metadataDtoList); List <QnADTO> qnADTOs = new List <QnADTO>(); LoadAddQnADTOs(portalDbRecords, qnaDocumentsDTO, qnADTOs); List <UpdateQnaDTO> updateQnADTOs = new List <UpdateQnaDTO>(); LoadUpdateQnADTOs(portalDbRecords, qnaDocumentsDTO, updateQnADTOs); IEnumerable <MetadataDTO> metadataDtos = metadataDtoList.Where <MetadataDTO>((Func <MetadataDTO, bool>)(m => m.Name == "faqid")).Where <MetadataDTO>((Func <MetadataDTO, bool>)(m => !portalDbRecords.Any <PortalDbRecordDTO>((Func <PortalDbRecordDTO, bool>)(p => p.FaqId.ToString() == m.Value)))); List <int> intList = new List <int>(); foreach (MetadataDTO metadataDto in metadataDtos) { foreach (QnADTO qnAdto in qnaDocumentsDTO.QnaDTO) { IEnumerable <string> source = qnAdto.Metadata.Where <MetadataDTO>((Func <MetadataDTO, bool>)(m => m.Name.ToLower() == "faqid")).Select <MetadataDTO, string>((Func <MetadataDTO, string>)(m => m.Value)); if (source.FirstOrDefault <string>() != null && source.FirstOrDefault <string>() == metadataDto.Value) { intList.Add(qnAdto.Id); } } } Add add = new Add() { Files = (List <FileDTO>)null, QnaList = qnADTOs, Urls = new List <string>() }; Update update = new Update() { Name = knowledgebaseName, QnaList = updateQnADTOs, Urls = new List <string>() }; Delete delete = new Delete() { Ids = intList, Sources = new List <string>() }; return(JsonConvert.SerializeObject((object)new UpdateKbOperationDTO() { Add = add, DefaultAnswerUsedForExtraction = "", Delete = delete, EnableHierarchicalExtraction = false, Update = update })); }