public async Task AnalyseAsync() { _logger.WriteLine("In AnalyseAsync"); var mails = await _repository.GetMailCollectedToBeAnalysedAsync(); _logger.WriteLine($"Collected #{mails?.Count()} mail messages"); if (mails != null && mails.Count() > 0) { foreach (var mailMsg in mails) { _logger.WriteLine($"Processing mail: [{mailMsg.From}]"); var result = await TextAnalyticConfigurationSettings.CreateUsingConfigurationKeys(_config.TextanalyticApiKey, LocationKeyIdentifier.WestUs) .AddConsoleDiagnosticLogging() .UsingHttpCommunication() .WithTextAnalyticAnalysisActions() .AddSentimentAnalysis(mailMsg.Body) .AddKeyPhraseAnalysis(mailMsg.Body) .AnalyseAllSentimentsAsync(); await UpdateMailMessage(mailMsg, result); } } }
static void Main(string[] args) { Console.WriteLine("Sentiment Analysis CLI tool."); Console.WriteLine("API Location: {0}", Config.ConfigReader.ApiLocation); Console.WriteLine("API Key: {0}", string.IsNullOrWhiteSpace(Config.ConfigReader.ApiKey) ? "Not set!" : "Set"); var cliArguments = new CliArguments(args); if (cliArguments.ArgumentType == ArgType.Invalid) { Console.WriteLine("Options: \n\t-k: Include Keyphrase Analysis\n\t-f {filename.ext} : Process contents of file.\n\t-t \"Text to analyse\" : Process text as entered."); Console.WriteLine("\nFormat: \n\tSentimentAnalysisConsoleTestTool -f {filename.txt}"); Console.WriteLine("\tSentimentAnalysisConsoleTestTool -t \"Text to analyse\""); Console.WriteLine("\tSentimentAnalysisConsoleTestTool -f {filename.txt} -k\n"); return; } if (string.IsNullOrWhiteSpace(Config.ConfigReader.ApiKey) || string.IsNullOrWhiteSpace(Config.ConfigReader.ApiLocation)) { Console.WriteLine("No API location or key is present. Cannot continue."); return; } string textToAnalyse = GetAnalysisInput(cliArguments); if (textToAnalyse == null) { return; } var location = (LocationKeyIdentifier)System.Enum.Parse(typeof(LocationKeyIdentifier), Config.ConfigReader.ApiLocation, true); try { Console.WriteLine("Sentiment Analysis: Submitting {0} characters of text for analysis.", textToAnalyse.Length); if (cliArguments.Options == ArgOptions.IncludeKeyphraseAnalysis) { Console.WriteLine("Including Keyphrase analysis"); } var analysis = TextAnalyticConfigurationSettings.CreateUsingConfigurationKeys(Config.ConfigReader.ApiKey, location) .AddConsoleDiagnosticLogging() .UsingHttpCommunication() .WithTextAnalyticAnalysisActions() .AddSentimentAnalysisSplitIntoSentences(textToAnalyse); if (cliArguments.Options == ArgOptions.IncludeKeyphraseAnalysis) { analysis = analysis.AddKeyPhraseAnalysis(textToAnalyse); } var result = analysis.AnalyseAllAsync().Result; ProcessResults(result); } catch (Exception ex) { Console.WriteLine("Error calling the Cognitive service. [{0}]", ex.Message); } }
private async Task AnalyseAllMail(List <AnalysedMailMessageEntity> mailToAnalyse) { if (mailToAnalyse == null || mailToAnalyse.Count == 0) { _coreDependencies.DiagnosticLogging.Verbose("ProcessMail: No mail to analyse"); return; } var apiKey = _config.ApiKey; var location = _config.ApiLocation; foreach (var m in mailToAnalyse) { var result = await TextAnalyticConfigurationSettings.CreateUsingConfigurationKeys(apiKey, location) .AddCustomDiagnosticLogging(new SentimentAnalysisLoggingAdapter(_coreDependencies)) .UsingHttpCommunication() .WithTextAnalyticAnalysisActions() .AddSentimentAnalysisSplitIntoSentences(m.SanitisedBody) .AddKeyPhraseAnalysisSplitIntoSentences(m.SanitisedBody) .AnalyseAllAsync(); if (!result.SentimentAnalysis.AnalysisResult.ActionSubmittedSuccessfully) { var message = result.SentimentAnalysis.AnalysisResult.ResponseData.errors != null?result.SentimentAnalysis.AnalysisResult.ResponseData.errors.First().message : result.SentimentAnalysis.AnalysisResult.ApiCallResult.Data; _coreDependencies.DiagnosticLogging.Error("ProcessMail: Error processing SentimentAnalysis results: [{message}]", message); } else { m.SentimentClassification = result.SentimentAnalysis.GetResults().Average(s => s.score); } if (!result.KeyPhraseAnalysis.AnalysisResult.ActionSubmittedSuccessfully) { var message = result.KeyPhraseAnalysis.AnalysisResult.ResponseData.errors != null?result.KeyPhraseAnalysis.AnalysisResult.ResponseData.errors.First().message : result.KeyPhraseAnalysis.AnalysisResult.ApiCallResult.Data; _coreDependencies.DiagnosticLogging.Error("ProcessMail: Error processing KeyphraseAnalysis results: [{message}]", message); } else { m.SentimentKeyPhrases = string.Join(",", result.KeyPhraseAnalysis.AnalysisResult.ResponseData?.documents?.Select(s => string.Join(",", s.keyPhrases))); } m.AnalysedTimestampUtc = DateTime.UtcNow; } }
public async Task <bool> ExecuteAsync() { if (!_options.KeyPhraseAnalysis && !_options.SentimentAnalysis && !_options.LanguageDetection) { Console.Error.WriteLine("ERROR! At least one analysis option must be specified; Sentiment analysis, Keyphrase analysis or language detection "); return(await Task.FromResult <bool>(false)); } var location = (LocationKeyIdentifier)System.Enum.Parse(typeof(LocationKeyIdentifier), _options.Location, true); var txtToAnalyse = _options.Filename != null?File.ReadAllText(_options.Filename.FullName) : _options.TextToAnalyse; if (string.IsNullOrWhiteSpace(txtToAnalyse)) { Console.Error.WriteLine("ERROR! No text supplied for analysis."); return(await Task.FromResult <bool>(false)); } var analysis = TextAnalyticConfigurationSettings.CreateUsingConfigurationKeys(_options.ApiKey, location) .AddConsoleDiagnosticLogging() .UsingHttpCommunication() .WithTextAnalyticAnalysisActions() .AddSentimentAnalysisSplitIntoSentences(txtToAnalyse); if (_options.KeyPhraseAnalysis) { analysis = analysis.AddKeyPhraseAnalysis(txtToAnalyse); } if (_options.LanguageDetection) { analysis = analysis.AddLanguageAnalysis(txtToAnalyse); } var result = await analysis.AnalyseAllAsync(); await ProcessResultsAsync(result); // Note: Not the optimal to return results as we want to output to multiple formats but will do for now. return(await Task.FromResult <bool>(true)); }