Beispiel #1
0
        public async Task Run()
        {
            QuestionDataAccess questionDataAccess = new QuestionDataAccess();
            var questions             = questionDataAccess.GetAll("../Graph/dialogo ejemplo.graphml");
            TranscriptionsProxy proxy = new TranscriptionsProxy();
            var keywords = questionDataAccess.GetKeyWords();

            Trace.WriteLine($"Inició la carga de los nodos.");
            foreach (var question in questions.Where(x => x.Animations.Any() == false))
            {
                Trace.WriteLine($"Procesando nodo: {question.Description}");
                var json = await proxy.Transcript($"{question.Audio}.mp3", question.Description);

                GentleTranscript response = JsonConvert.DeserializeObject <GentleTranscript>(json);
                foreach (var word in response.Words.Where(x => x.Case.ToLower().Equals("success")))
                {
                    var rule = keywords.rule.Where(x => x.pattern.Any(p => p.Value.ToLowerInvariant().Equals(word.Word.ToLowerInvariant()))).FirstOrDefault();
                    if (rule == null)
                    {
                        continue;
                    }
                    question.Animations.Add(new Animation()
                    {
                        AnimationName = rule.animation, StartTime = word.Start
                    });
                }
            }
            Trace.WriteLine($"Finalizó la carga de los nodos.");
            await SaveGraph(questions);

            Trace.WriteLine($"Se almacenó el grafo serializado correctamente.");
        }
Beispiel #2
0
        public static void Initialize()
        {
            new UserDataAccess();
            new QuizDataAccess(null);
            new QuestionDataAccess(null);
            new AnswerDataAccess();
            new QuizResultDataAccess();

            Users       = new UserDataAccess();
            Answers     = new AnswerDataAccess();
            Questions   = new QuestionDataAccess(Answers);
            Quizzes     = new QuizDataAccess(Questions);
            QuizResults = new QuizResultDataAccess();
        }
Beispiel #3
0
        private void _LoadGraphToRecognizerManager()
        {
            ///Carga el grafo que tiene el gión a seguir
            ///
            using (var dataAccess = new QuestionDataAccess())
            {
                _graph = dataAccess.GetCurrentGraph();
                //for(int i =0; i<_graph.Count; i++)
                foreach (var node in _graph)
                {
                    node.OnEmitMessage      += EmitQuestionMessage;
                    node.OnQuestionSelected += OnQuestionSelectedHandler;
                    if (string.IsNullOrWhiteSpace(node.Keyphrase) == false)
                    {
                        _recognizer.StartKeywordRecognition(AddKeywordRecognition(
                                                                string.Format("#node|{0}", node.Id),
                                                                node.Keyphrase.Split(',')));
                    }
                    var answers = node.Answers;
                    foreach (var arista in answers)
                    {
                        if (arista.Choices == null || arista.Choices.Any() == false || string.IsNullOrWhiteSpace(arista.Choices[0]))
                        {
                            continue;
                        }

                        if (arista.Choices.Length == 1 && arista.Choices[0].ToLower() == "*")
                        {
                            arista.GrammarId = AddWildcardRecognition(
                                string.Format("#node{0}|{1}", node.Id, arista.TargetId));
                        }
                        else
                        {
                            arista.GrammarId = AddKeywordRecognition(
                                string.Format("#node{0}|{1}", node.Id, arista.TargetId),
                                arista.Choices.ToArray());
                        }
                    }
                    node.Answers = answers;
                }
            }
            ///Agrega frases claves para inicial el guión
            ///
            _recognizer.StartKeywordRecognition(AddKeywordRecognition("#start", new string[] { "Puede comenzar con la entrevista.", "iniciar guión", "pregunteme" }));
        }
 public static List<Question> Get(int iClassID)
 {
     QuestionDataAccess questiondataaccess = new QuestionDataAccess();
        return questiondataaccess.Get(iClassID);
 }
Beispiel #5
0
        public static List <Question> GetGraphNodes(string graphPath)
        {
            var graph = new List <Question>();
            //var graphMl = MapFromXml();
            var xml = XElement.Load(graphPath);

            var graphXml = xml.Elements("{http://graphml.graphdrawing.org/xmlns}graph");
            var keys     = xml
                           .Elements("{http://graphml.graphdrawing.org/xmlns}key")
                           .Where(x => x.Attribute("attr.name") != null);
            var nameId = keys
                         .FirstOrDefault(x => x.Attribute("attr.name").Value.Equals("NODO"));
            var agentId = keys
                          .FirstOrDefault(x => x.Attribute("attr.name").Value.Equals("AGENT"));
            var audioId = keys
                          .FirstOrDefault(x => x.Attribute("attr.name").Value.Equals("AUDIO"));
            var animationId = keys
                              .FirstOrDefault(x => x.Attribute("attr.name").Value.Equals("ANIM"));
            var keywordId = keys
                            .FirstOrDefault(x => x.Attribute("attr.name").Value.Equals("KEYWORD"));
            var hvId = keys
                       .FirstOrDefault(x => x.Attribute("attr.name").Value.Equals("HV"));
            var userId = keys
                         .FirstOrDefault(x => x.Attribute("attr.name").Value.Equals("USUARIO"));
            var groupId = keys
                          .FirstOrDefault(x => x.Attribute("attr.name").Value.Equals("GRUPO"));

            if (nameId == null || agentId == null || audioId == null || animationId == null ||
                keywordId == null || hvId == null || hvId == null ||
                userId == null || groupId == null)
            {
                throw new Exception("Los atributos NODO, AGENT, AUDIO, ANIM. KEYWORD, HV, USUARIO Y GRUPO son requeridos.");
            }
            var waitId = keys
                         .FirstOrDefault(x => x.Attribute("attr.name").Value.Equals("WAIT"));
            string firstAgent = null;

            foreach (var node in graphXml.Elements("{http://graphml.graphdrawing.org/xmlns}node"))
            {
                var name = node
                           .Elements("{http://graphml.graphdrawing.org/xmlns}data")
                           .FirstOrDefault(x => x.Attribute("key").Value.Equals(nameId.Attribute("id").Value));
                var agent = node
                            .Elements("{http://graphml.graphdrawing.org/xmlns}data")
                            .FirstOrDefault(x => x.Attribute("key").Value.Equals(agentId.Attribute("id").Value));
                var audio = node
                            .Elements("{http://graphml.graphdrawing.org/xmlns}data")
                            .FirstOrDefault(x => x.Attribute("key").Value.Equals(audioId.Attribute("id").Value));
                var animation = node
                                .Elements("{http://graphml.graphdrawing.org/xmlns}data")
                                .FirstOrDefault(x => x.Attribute("key").Value.Equals(animationId.Attribute("id").Value));
                var keyword = node
                              .Elements("{http://graphml.graphdrawing.org/xmlns}data")
                              .FirstOrDefault(x => x.Attribute("key").Value.Equals(keywordId.Attribute("id").Value));
                var hv = node
                         .Elements("{http://graphml.graphdrawing.org/xmlns}data")
                         .FirstOrDefault(x => x.Attribute("key").Value.Equals(hvId.Attribute("id").Value));
                var user = node
                           .Elements("{http://graphml.graphdrawing.org/xmlns}data")
                           .FirstOrDefault(x => x.Attribute("key").Value.Equals(userId.Attribute("id").Value));
                var group = node
                            .Elements("{http://graphml.graphdrawing.org/xmlns}data")
                            .FirstOrDefault(x => x.Attribute("key").Value.Equals(groupId.Attribute("id").Value));

                if (string.IsNullOrWhiteSpace(firstAgent) && agent != null)
                {
                    firstAgent = agent.Value;
                }
                if (string.IsNullOrWhiteSpace(agent.Value))
                {
                    agent.Value = firstAgent;
                }

                string
                    targetId = node.Attribute("id").Value,
                    id       = node.Attribute("id").Value;

                XElement waitElement = null;
                if (waitId != null)
                {
                    waitElement = node
                                  .Elements("{http://graphml.graphdrawing.org/xmlns}data")
                                  .FirstOrDefault(x => x.Attribute("key").Value.Equals(waitId.Attribute("id").Value));
                }

                bool wait = waitElement == null
                    ? false
                    : waitElement.Value.ToLower().Equals("true");

                var targetEdges = graphXml.Elements("{http://graphml.graphdrawing.org/xmlns}edge").Where(x => x.Attribute("target").Value == id);
                var graphNode   = new Question(targetId, id, keyword.Value, hv.Value, audio.Value, animation.Value, targetEdges.Any(), wait);

                graph.Add(graphNode);
            }

            var edges = graphXml.Elements("{http://graphml.graphdrawing.org/xmlns}edge");

            using (var questionDataAccess = new QuestionDataAccess())
            {
                foreach (var edge in edges)
                {
                    var edgeUserData = edge.Elements("{http://graphml.graphdrawing.org/xmlns}data")
                                       .FirstOrDefault(x => x.Attribute("key").Value.Equals(userId.Attribute("id").Value));

                    var edgeGroupData = edge.Elements("{http://graphml.graphdrawing.org/xmlns}data")
                                        .FirstOrDefault(x => x.Attribute("key").Value.Equals(groupId.Attribute("id").Value));

                    var arista = new Answer()
                    {
                        TargetId = edge.Attribute("target").Value
                    };
                    var choices = new List <string>();

                    if (edgeGroupData != null)
                    {
                        var    groupChoises = edgeGroupData.Value.ToLower().Trim().TrimStart(',').TrimEnd(',').Split(',');
                        string tempChoices;
                        foreach (var option in groupChoises)
                        {
                            if (string.IsNullOrWhiteSpace(option))
                            {
                                continue;
                            }
                            if (questionDataAccess.GetPredefinedAnswers().TryGetValue(option, out tempChoices))
                            {
                                choices.AddRange(tempChoices.Split(';'));
                            }
                            else
                            {
                                Console.WriteLine($"No se encontó el grupo {option} en la arista ");
                            }
                        }
                    }
                    if (edgeUserData != null)
                    {
                        choices.AddRange(edgeUserData.Value.ToLower().Trim().TrimStart(';').TrimEnd(';').Split(';'));
                    }

                    arista.Choices = choices.Where(x => !string.IsNullOrWhiteSpace(x)).ToArray();

                    arista.Target = graph.Find(x => x.Id.Equals(arista.TargetId));
                    graph.Find(x => x.TargetId.Equals(edge.Attribute("source").Value)).AddArista(arista);
                }
            }
            return(graph);
        }