Beispiel #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);
                }
            }
        }
Beispiel #2
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 });
            }
        }
Beispiel #3
0
        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);
        }