コード例 #1
0
        static async Task MainAsync()
        {
            var apiKey = "YOUR-TEXT-ANALYTICS-API-SUBSCRIPTION-KEY";

            var document = new SentimentDocument()
            {
                Id       = "YOUR-UNIQUE-ID",
                Text     = "YOUR-TEXT",
                Language = "en"
            };

            var request = new SentimentRequest();

            request.Documents.Add(document);

            var client = new SentimentClient(apiKey);

            var response = await client.GetSentimentAsync(request);

            foreach (var doc in response.Documents)
            {
                Console.WriteLine("   Document Id: {0}", doc.Id);
                Console.WriteLine("   Score: {0}%", (doc.Score * 100));
            }

            Console.WriteLine("   Press any key to exit...");
            Console.ReadLine();
        }
コード例 #2
0
        public async Task <float> MakeRequest(string text)
        {
            var language = await GetLanguage(text);

            var document = new SentimentDocument()
            {
                Id       = Guid.NewGuid().ToString(),
                Text     = text,
                Language = language
            };

            var request = new SentimentRequest();

            request.Documents.Add(document);

            var client = new SentimentClient(_subKey)
            {
                Url = ConfigurationManager.AppSettings["TextSentimentServiceUrl"] + "/sentiment"
            };

            var response = await client.GetSentimentAsync(request);

            var score = response.Documents[0].Score * 100;

            return(score);
        }
コード例 #3
0
        public async Task <float> GetSentimentAnalysisAsync(string text)
        {
            var client = new SentimentClient(this.Settings.Text.Key1)
            {
                Url = this.Settings.Text.EndPoint
            };

            var document = new SentimentDocument
            {
                Id       = Guid.NewGuid().ToString(),
                Text     = text,
                Language = "en"
            };

            var request = new SentimentRequest
            {
                Documents = new List <IDocument> {
                    document
                }
            };

            var response = await client.GetSentimentAsync(request);

            //  Only one document was sent, therefore only one result should be returned.
            var result = response.Documents.FirstOrDefault();

            if (result == null)
            {
                throw new ApplicationException("Text Analysis Failed.");
            }

            return(result.Score);
        }
        public async Task SentimentPercentage(string input)
        {
            var document = new SentimentDocument()
            {
                Id       = "1",
                Text     = input,
                Language = "en"
            };

            var request = new SentimentRequest();

            request.Documents.Add(document);

            var client = new SentimentClient(System.Configuration.ConfigurationManager.AppSettings["apikey"]);

            var response = await client.GetSentimentAsync(request);

            float sum = 0, average = 0;

            foreach (var doc in response.Documents)
            {
                sum += (doc.Score * 100);
            }
            average = sum / response.Documents.Count;

            WriteNewLine("\n\nSentiment analysis value is {0}", average.ToString());
        }
コード例 #5
0
        private async void Analyze_Text(object sender, RoutedEventArgs e)
        {
            this.Score = "";

            try
            {
                var language = await GetLanguage();

                var document = new SentimentDocument()
                {
                    Id = Guid.NewGuid().ToString(), Text = this.InputText, Language = language
                };

                var request = new SentimentRequest();
                request.Documents.Add(document);

                MainWindow mainWindow = Window.GetWindow(this) as MainWindow;
                var        client     = new SentimentClient(mainWindow._scenariosControl.SubscriptionKey);

                MainWindow.Log("Request: Analyzing sentiment.");
                var response = await client.GetSentimentAsync(request);

                MainWindow.Log("Response: Success. Sentiment analyzed.");

                var score = response.Documents[0].Score * 100;
                this.Score = string.Format("{0}%", score);
            }
            catch (Exception ex)
            {
                MainWindow.Log(ex.Message);
            }
        }
コード例 #6
0
        public static async Task AnalyzeSentimentAsync(string id, string text, string language)
        {
            var document = new SentimentDocument()
            {
                Id       = id,
                Text     = text,
                Language = language
            };

            var client = new SentimentClient(Constants.ApiKey)
            {
                Url = "https://westeurope.api.cognitive.microsoft.com/text/analytics/v2.0/sentiment"
            };

            var request = new SentimentRequest();

            request.Documents.Add(document);

            try
            {
                var response = await client.GetSentimentAsync(request);

                foreach (var doc in response.Documents)
                {
                    Console.WriteLine("Sentiment Score: {0}", doc.Score);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
コード例 #7
0
        async Task ExecuteCheckTextAnalyticsApiCommand()
        {
            if (IsBusy)
            {
                return;
            }

            IsBusy = true;

            try
            {
                LanguageClient languageClient = new LanguageClient(ApiKeys.TextAnalyticsApiKey);
                languageClient.Url = "https://westeurope.api.cognitive.microsoft.com/text/analytics/v2.0/languages";
                LanguageRequest lr = new LanguageRequest();
                lr.Documents.Add(new Document()
                {
                    Id   = Guid.NewGuid().ToString(),
                    Text = TextAnalyticsText
                });
                var lrResult = await languageClient.GetLanguagesAsync(lr);

                var language     = lrResult.Documents.First().DetectedLanguages.First().Name;
                var languageCode = lrResult.Documents.First().DetectedLanguages.First().Iso639Name;


                SentimentClient textClient = new SentimentClient(ApiKeys.TextAnalyticsApiKey);
                textClient.Url = "https://westeurope.api.cognitive.microsoft.com/text/analytics/v2.0/sentiment";

                SentimentRequest sr = new SentimentRequest();

                sr.Documents.Add(new SentimentDocument()
                {
                    Id       = Guid.NewGuid().ToString(),
                    Text     = TextAnalyticsText,
                    Language = languageCode
                });

                var result = await textClient.GetSentimentAsync(sr);

                TextAnalyticsResult = $"Language: {language}, Sentiment Score: {result.Documents.First().Score}";
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex);
            }
            finally
            {
                IsBusy = false;
            }
        }
コード例 #8
0
        private static int count = 1; // count to keep the ID

        // This methods perform the text analysis and return the score
        public static async Task <string> TextAnalysis(string message)
        {
            client = new SentimentClient(ConfigurationManager.AppSettings["TextAnalyticsApiKey"]); // my API Key
            var request = new SentimentRequest();

            count++; // increment
            var text = new SentimentDocument()
            {
                Id       = count.ToString(),
                Text     = message,
                Language = "en"
            };

            request.Documents.Add(text);
            var response = ((await client.GetSentimentAsync(request)).Documents.FirstOrDefault()).Score; // retrieve the score

            return(string.Format("{0:N2}", response));                                                   // return the result in string (2 Decimal Place)
        }
コード例 #9
0
        private static async Task RunSentimentAnalysis()
        {
            Console.ForegroundColor = ConsoleColor.Gray;
            Console.WriteLine("Begining sentiment analysis ({0})", DateTime.Now.ToString());

            var client = new SentimentClient(textAnalyticsApiKey);

            foreach (var conversation in conversations)
            {
                foreach (var message in conversation.Messages)
                {
                    try
                    {
                        var document = new SentimentDocument()
                        {
                            Id       = message.Id.ToString(),
                            Text     = message.Text,
                            Language = message.Metadata.LanguageName
                        };

                        var request = new SentimentRequest();
                        request.Documents.Add(document);

                        var response = await client.GetSentimentAsync(request);

                        message.Metadata.SentimentScore = response.Documents[0].Score;

                        Console.Write("Conversation {0} | Message {1} | Sentiment Score {2}", conversation.Id, message.Id, message.Metadata.SentimentScore);
                    }
                    catch (Exception ex)
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine();
                        Console.WriteLine("Exception encountered ({0})", DateTime.Now.ToString());
                        Console.WriteLine("Conversation {0} | Message {1}", conversation.Id, message.Id);
                        Console.WriteLine(ex.Message);
                    }
                }
            }

            Console.WriteLine("Sentiment analysis complete ({0})", DateTime.Now.ToString());
            Console.WriteLine();
        }
コード例 #10
0
        private async void Get_Sentiment(string text, string lastNTest)
        {
            try
            {
                var document = new SentimentDocument()
                {
                    Id = Guid.NewGuid().ToString(), Text = text, Language = "en"
                };
                var lastNDocument = new SentimentDocument()
                {
                    Id = Guid.NewGuid().ToString(), Text = lastNTest, Language = "en"
                };

                var request = new SentimentRequest();
                request.Documents.Add(document);
                request.Documents.Add(lastNDocument);

                MainWindow mainWindow = Window.GetWindow(this) as MainWindow;
                var        client     = new SentimentClient(mainWindow._scenariosControl.SubscriptionKey);

                var response = await client.GetSentimentAsync(request);

                Log("Response: Success. Sentiment analyzed.");

                var score      = response.Documents[0].Score * 100;
                var lastNScore = response.Documents[1].Score * 100;
                ((MainWindow)Application.Current.MainWindow)._scenariosControl.LogSentiment(string.Format("Last sentence: {0}%\nLast {1} sentences: {2}%", score, SENTENCE_LIMIT, lastNScore));

                if (sendToPBICheckbox.IsChecked == true)
                {
                    //post(sentimentUrl, "[" + json + "]");
                    string json        = JsonConvert.SerializeObject(new { dt = (DateTime.UtcNow.ToString("s") + "Z"), sentence = text, sentiment_Nlast = score, average_sentiment = lastNScore });
                    Thread myNewThread = new Thread(() => post(sentimentUrl, "[" + json + "]"));
                    myNewThread.Start();
                }
            }
            catch (Exception ex)
            {
                MainWindow.Log(ex.Message);
            }
        }
コード例 #11
0
        public override async Task HandleChangeAsync(IChangeDetails details)
        {
            if (details.Changes.TryGetValue("Ticket", out var changeSetDetails) &&
                changeSetDetails.Insertions.Length > 0)
            {
                // A new thread has been started - run sentiment analysis.

                try
                {
                    var tickets = changeSetDetails.Insertions
                                  .Select(i => i.CurrentObject)
                                  .Select(o => (string)(o.Title + Environment.NewLine + o.Description))
                                  .ToArray();

                    if (tickets.Length == 0)
                    {
                        return;
                    }

                    Console.WriteLine($"Requesting sentiment score for {tickets.Length} objects...");

                    var sentimentRequest = tickets.Select((text, index) => new SentimentDocument
                    {
                        Id       = index.ToString(),
                        Text     = text,
                        Language = "en"
                    })
                                           .Cast <IDocument>()
                                           .ToList();

                    var sentimentResponse = await _sentimentClient.GetSentimentAsync(new SentimentRequest
                    {
                        Documents = sentimentRequest
                    });

                    foreach (var error in sentimentResponse.Errors)
                    {
                        Console.WriteLine("Error from sentiment API: " + error.Message);
                    }

                    Console.WriteLine($"Requesting key phrases for {tickets.Length} objects...");

                    var keyPhraseRequest = tickets.Select((text, index) => new KeyPhraseDocument
                    {
                        Id       = index.ToString(),
                        Text     = text,
                        Language = "en"
                    })
                                           .Cast <IDocument>()
                                           .ToList();

                    var keyPhraseResponse = await _keyPhraseClient.GetKeyPhrasesAsync(new KeyPhraseRequest
                    {
                        Documents = keyPhraseRequest
                    });

                    foreach (var error in keyPhraseResponse.Errors)
                    {
                        Console.WriteLine("Error from KeyPhrase API: " + error.Message);
                    }

                    var keyPhraseDictionary = keyPhraseResponse.Documents.ToDictionary(d => d.Id, d => d.KeyPhrases);

                    var toUpdate = sentimentResponse.Documents
                                   .Select(doc =>
                    {
                        var obj = changeSetDetails.Insertions[int.Parse(doc.Id)].CurrentObject;

                        if (!keyPhraseDictionary.TryGetValue(doc.Id, out var keyPhrases) ||
                            keyPhrases == null)
                        {
                            keyPhrases = new List <string> {
                                "Unknown"
                            };
                        }

                        Console.WriteLine("------------------");
                        Console.WriteLine($"Analyzed: {obj.Title}");
                        Console.WriteLine($"Score: {doc.Score}");
                        Console.WriteLine($"KeyPhrases: {string.Join(", ", keyPhrases)}");
                        Console.WriteLine("------------------");

                        return(new
                        {
                            Score = doc.Score,
                            Reference = ThreadSafeReference.Create(obj),
                            KeyPhrases = keyPhrases
                        });
                    })
                                   .ToArray();

                    using (var realm = details.GetRealmForWriting())
                    {
                        var resolved = toUpdate.Select(t => new
                        {
                            Score      = t.Score,
                            Object     = realm.ResolveReference(t.Reference),
                            KeyPhrases = t.KeyPhrases
                        })
                                       .ToArray();

                        realm.Write(() =>
                        {
                            foreach (var item in resolved)
                            {
                                item.Object.Score = item.Score;
                                item.Object.Tags  = string.Join(" ", item.KeyPhrases);
                            }
                        });
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    Console.WriteLine(ex.StackTrace);
                }
            }
        }