Пример #1
0
        /// <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);
                }
            }
        }
Пример #2
0
        /// <summary>
        /// A partir de un objeto LuisResponse generamos un objeto específico para los Intents del evento
        /// De todos los intentes, sólo se enviará el que mayor score haya tenido en el analisis de LUIS
        /// Si se ha configurado la opción removeNONEIntent el intent tipo "None" se filtrará de la respuesta
        /// </summary>
        /// <param name="luis">Objeto tipo LUISResponse que usaremos para rellenar los datos del objeto IntentsPowerBi</param>
        /// <param name="GUID">Identificador unico del evento - generado en esta aplicación - para poder correlar en PowerBi</param>
        /// <param name="dt">Timestamp del evento para poder correlar</param>
        /// <returns></returns>
        private IntentsPowerBi getPowerBIIntentsFromLuisResponse(LUISResponse luis, string GUID, DateTime dt, double sentiment, string cleanQuery, string financialKeywords)
        {
            IntentsPowerBi result = new IntentsPowerBi();

            Intents tempIntent = new Intents();

            tempIntent.intent = "";
            tempIntent.score  = 0;

            //Recorremos todos los intents de la respuesta de LUIS y nos quedamos con la que tenga mayor score
            //Ademas filtramos el intent "None" si se ha especificado en las settings de la aplicación
            foreach (Intents intent in luis.intents)
            {
                if (!(intent.intent.Equals("None", StringComparison.CurrentCultureIgnoreCase) && Properties.Settings.Default.removeNONEIntent))
                {
                    if (intent.score > tempIntent.score)
                    {
                        tempIntent = intent;
                    }
                }
            }

            //Componemos el objeto para enviar a PowerBi
            result.query             = luis.query;
            result.queryKeywords     = cleanQuery;
            result.intent            = tempIntent.intent;
            result.score             = tempIntent.score;
            result.sentiment         = sentiment;
            result.financialKeywords = financialKeywords;

            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);
        }
Пример #3
0
        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 });
            }
        }