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);
        }
Ejemplo n.º 2
0
        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
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 5
0
        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;
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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
            }));
        }