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."); }
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(); }
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); }
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); }