public async Task <MatchedMessage> ProcessAsync(string username, AnalysisResult result, string input) { input = TransformCommandToInput(input); List <Tweet> messages = _memoryCache.Get(MESSAGES_TAG) as List <Tweet>; if (messages == null) { messages = await _twitterRepository .GetTweetContentAsync(); _memoryCache.Add(MESSAGES_TAG, messages, DateTimeOffset.UtcNow.AddHours(1)); } MatchedMessage matchedMessage = ProcessGreetingsMessage(messages, username, result, input); if (matchedMessage == null) { matchedMessage = await PredictWithLUIS(messages, username, input); } if (matchedMessage == null) { matchedMessage = ProcessDefaultMessage(messages, username, result, input); } return(matchedMessage); }
MatchedMessage ProcessGreetingsMessage(List <Tweet> messages, string username, AnalysisResult result, string input) { MatchedMessage messageResult = null; var filteredMessages = messages .Where(i => i.Text.StartsWith("Hola @") && !i.IsReply); if (input.ToUpperInvariant().Contains("HOLA ") || input.ToUpperInvariant().Contains("HOLA,") || input.ToUpperInvariant().StartsWith("HOLA")) { var random = new Random(); var message = filteredMessages.ElementAt(random.Next(0, filteredMessages.Count() - 1)); messageResult = new MatchedMessage { Message = ReplaceUsername(message.Text, username), Sentiment = message.Sentiment }; } return(messageResult); }
MatchedMessage ProcessLUISMessage(List <Tweet> messages, string username, LuisResult res) { MatchedMessage result = null; var topScoreIntent = res.TopScoringIntent; var topicToSearch = string.Empty; var verbWord = string.Empty; var filteredMessages = messages .Where(i => !i.Text.Contains("Hola @")); topicToSearch = string.Join(" ", res.Entities.SelectMany(i => i.Value).OrderBy(i => i.Score).Select(i => i.Value)); switch (topScoreIntent.Name) { case "ConocesA": { verbWord = "conozco"; break; } case "QueOpinas": { verbWord = "opino"; break; } case "CualEs": { verbWord = "es"; break; } case "QuienEs": { verbWord = "es"; break; } case "TeGusta": { verbWord = "gusta"; break; } case "EresUnBot": { verbWord = "es un"; topicToSearch = "submarinismo"; break; } } if (!string.IsNullOrWhiteSpace(verbWord) && topScoreIntent.Score > 0.5d) { var selectedMessages = filteredMessages .Where(i => i.Text.ToUpperInvariant().Split(' ', ',', '.', ':', '-').Contains(topicToSearch.ToUpperInvariant())) .ToList(); var random = new Random(); if (selectedMessages.Any()) { var predefinedPhrase = selectedMessages.ElementAt(random.Next(0, selectedMessages.Count())); var phrasesWithVerb = selectedMessages.Where(i => i.Text.ToUpperInvariant().Contains(verbWord)).ToList(); if (phrasesWithVerb.Any()) { predefinedPhrase = phrasesWithVerb.ElementAt(random.Next(0, phrasesWithVerb.Count())); } result = new MatchedMessage { Message = ReplaceUsername(predefinedPhrase.Text, username), Sentiment = predefinedPhrase.Sentiment }; } else { selectedMessages = filteredMessages .Where(i => i.Text.ToUpperInvariant().Contains(verbWord.ToUpperInvariant())) .ToList(); if (selectedMessages.Any() && !string.IsNullOrWhiteSpace(topicToSearch)) { var predefinedPhrase = selectedMessages.ElementAt(random.Next(0, selectedMessages.Count())); result = new MatchedMessage { Message = ReplaceUsername(predefinedPhrase.Text, username), Sentiment = predefinedPhrase.Sentiment }; } } } return(result); }