/// <summary> /// 1. Hay que llamarle con el texto que se quiere analizar, y un filename que identifique de dónde viene el texto /// 2. Hace la llamada a LUIS para obtener sus intents y entities /// 3. Obtiene el sentimiento del texto indexado /// 4. Limpia el texto indexado de palabras inutiles /// 5. Busca los términos financieros en el texto indexado /// 6. Crea los objetos específicos para la representacion de Intents y Entities en PowerBI /// 7. Envia todos los mensajes a los event hubs (respuesta tal cual de LUIS, objeto Intents para PowerBI y Objeto Entities para PowerBI) /// </summary> /// <param name="textoBlob"></param> /// <param name="filename"></param> private void processTextAndSendResultsToServiceBus(string textoBlob, string filename) { LUISResponse luisResponse; luisResponse = makeLUISCallFromText(textoBlob); if (luisResponse != null) { luisResponse.query = textoBlob; //Volvemos a poner el texto original para evitar el escaping que devuelve LUIS del formato unicode. //Obtener el sentimiento de la consulta enviada a LUIS string sentimentQuery = luisResponse.query.Length > Properties.Settings.Default.sentimentAnalysisAPIMaxQuerySize ? luisResponse.query.Substring(0, Properties.Settings.Default.sentimentAnalysisAPIMaxQuerySize) : luisResponse.query; double sentiment = getQuerySentiment(sentimentQuery); //Limpiar la query de palabras Inutiles string cleanQuery = cleanUselessWordsFromQuery(luisResponse.query); //Obtener los terminos financieros de la query string financialKeywords = getFinancialKeywordsFromQuery(luisResponse.query); string[] financialKeywordsArray = getFinancialKeywordsFromQueryAsArray(luisResponse.query); //ToDo Separar la respuesta de LUIS en los objetos IntentsPowerBi y EntitiesPowerBi. Cuando esté hecho quitar la llamada a EnviarMensajeAServiceBus string eventGuid = new Guid().ToString(); eventGuid = Guid.NewGuid().ToString(); DateTime dt = DateTime.Now; IntentsPowerBi iPBi = getPowerBIIntentsFromLuisResponse(luisResponse, eventGuid, dt, sentiment, cleanQuery, financialKeywords); //Añadido a mano para ver si funciona... iPBi.financialKeywordsArray = financialKeywordsArray; EntitiesPowerBi ePBi = getPowerBiEntitiesFromLuisResponse(luisResponse, eventGuid, dt, sentiment, cleanQuery, financialKeywords); addResultsToTreeViewNode(filename, iPBi, ePBi); //Envio de los datos a los Service Bus para cada tipo de objeto if (_envioActivado) { EnviarMensajeAServiceBus(luisResponse); EnviarIntentsPowerBiAServiceBus(iPBi); EnviarEntitiesPowerBiAServiceBus(ePBi); } } }
private void addResultsToTreeViewNode(string filename, IntentsPowerBi iPBi, EntitiesPowerBi ePBi) { if (!InvokeRequired) { TreeNode tn = new TreeNode(filename); TreeNode entityNode = new TreeNode("Entities"); TreeNode financialNode = new TreeNode("Financial Keywords"); tn.Nodes.Add(new TreeNode("Sentiment: " + iPBi.sentiment)); tn.Nodes.Add(new TreeNode("Intent: " + iPBi.intent)); TreeNode cn; foreach (Entities entity in ePBi.entities) { cn = new TreeNode(entity.type + " - " + entity.entity + " (" + entity.score + ")"); entityNode.Nodes.Add(cn); } foreach (string kw in iPBi.financialKeywordsArray.Distinct()) { cn = new TreeNode(kw); financialNode.Nodes.Add(cn); } tn.Nodes.Add(entityNode); tn.Nodes.Add(financialNode); treeView.Nodes.Add(tn); } else { addResultsToTreeViewNodeDelegate atD = new addResultsToTreeViewNodeDelegate(addResultsToTreeViewNode); this.Invoke(atD, new object[] { filename, iPBi, ePBi }); } }
private EntitiesPowerBi getPowerBiEntitiesFromLuisResponse(LUISResponse luisResponse, string GUID, DateTime dt, double sentiment, string cleanQuery, string financialKeywords) { EntitiesPowerBi result = new EntitiesPowerBi(); result.query = luisResponse.query; result.queryKeywords = cleanQuery; result.financialKeywords = financialKeywords; result.entities = luisResponse.entities; result.sentiment = sentiment; result.entity = "JMM"; result.score = 1; result.ProcessedDateTime = dt.ToString(); result.processedYear = dt.Year; result.processedMonth = dt.Month; result.processedDay = dt.Day; result.processedHour = dt.Hour; result.processedMinute = dt.Minute; result.processedSecond = dt.Second; result.eventGUID = GUID; return(result); }