public async Task RecognizeLinkedEntitiesWithLanguageTest() { TextAnalyticsClient client = GetClient(); LinkedEntityCollection linkedEntities = await client.RecognizeLinkedEntitiesAsync(SpanishDocument1, "es"); ValidateInDocumenResult(linkedEntities, s_document1ExpectedOutput); }
private void ValidateInDocumenResult(LinkedEntityCollection entities, List <string> minimumExpectedOutput) { Assert.IsNotNull(entities.Warnings); Assert.GreaterOrEqual(entities.Count, minimumExpectedOutput.Count); foreach (LinkedEntity entity in entities) { Assert.That(entity.Name, Is.Not.Null.And.Not.Empty); Assert.That(entity.Language, Is.Not.Null.And.Not.Empty); Assert.That(entity.DataSource, Is.Not.Null.And.Not.Empty); Assert.IsNotNull(entity.Url); if (entity.DataSourceEntityId != null) { Assert.IsNotEmpty(entity.DataSourceEntityId); } if (entity.BingEntitySearchApiId != null) { Assert.IsNotEmpty(entity.BingEntitySearchApiId); } Assert.GreaterOrEqual(entity.Matches.Count(), 1); foreach (LinkedEntityMatch match in entity.Matches) { Assert.That(match.Text, Is.Not.Null.And.Not.Empty); Assert.IsTrue(minimumExpectedOutput.Contains(match.Text, StringComparer.OrdinalIgnoreCase)); Assert.GreaterOrEqual(match.ConfidenceScore, 0.0); Assert.GreaterOrEqual(match.Offset, 0); Assert.Greater(match.Length, 0); } } }
public async Task RecognizeLinkedEntitiesWithAADTest() { TextAnalyticsClient client = GetClient(useTokenCredential: true); LinkedEntityCollection linkedEntities = await client.RecognizeLinkedEntitiesAsync(EnglishDocument1); ValidateInDocumenResult(linkedEntities, s_document1ExpectedOutput); }
public async Task RecognizeLinkedEntitiesTest() { TextAnalyticsClient client = GetClient(); string document = singleEnglish; LinkedEntityCollection linkedEntities = await client.RecognizeLinkedEntitiesAsync(document); Assert.AreEqual(3, linkedEntities.Count); var entitiesList = new List <string> { "Bill Gates", "Microsoft", "Paul Allen" }; foreach (LinkedEntity entity in linkedEntities) { Assert.IsTrue(entitiesList.Contains(entity.Name)); Assert.IsNotNull(entity.DataSource); Assert.IsNotNull(entity.DataSourceEntityId); Assert.IsNotNull(entity.Language); Assert.IsNotNull(entity.Url); Assert.IsNotNull(entity.Matches); Assert.IsNotNull(entity.BingEntitySearchApiId); LinkedEntityMatch match = entity.Matches.First(); Assert.IsNotNull(match.ConfidenceScore); Assert.IsNotNull(match.Text); } }
public void ExtractEntityLinking() { string endpoint = TestEnvironment.Endpoint; string apiKey = TestEnvironment.ApiKey; #region Snippet:TextAnalyticsSample6CreateClient var client = new TextAnalyticsClient(new Uri(endpoint), new AzureKeyCredential(apiKey)); #endregion #region Snippet:RecognizeLinkedEntities string document = "Microsoft was founded by Bill Gates and Paul Allen."; LinkedEntityCollection linkedEntities = client.RecognizeLinkedEntities(document); Console.WriteLine($"Extracted {linkedEntities.Count} linked entit{(linkedEntities.Count > 1 ? "ies" : "y")}:"); foreach (LinkedEntity linkedEntity in linkedEntities) { Console.WriteLine($"Name: {linkedEntity.Name}, Language: {linkedEntity.Language}, Data Source: {linkedEntity.DataSource}, Url: {linkedEntity.Url.ToString()}, Entity Id in Data Source: {linkedEntity.DataSourceEntityId}"); foreach (LinkedEntityMatch match in linkedEntity.Matches) { Console.WriteLine($" Match Text: {match.Text}, Offset (in UTF-16 code units): {match.Offset}, Length (in UTF-16 code units): {match.Length}"); Console.WriteLine($" Confidence score: {match.ConfidenceScore}"); } } #endregion }
public async Task RecognizeLinkedEntitiesWithLanguageTest() { TextAnalyticsClient client = GetClient(); string document = singleSpanish; LinkedEntityCollection linkedEntities = await client.RecognizeLinkedEntitiesAsync(document, "es"); Assert.GreaterOrEqual(linkedEntities.Count, 3); }
public async Task RecognizeLinkedEntitiesWithAADTest() { TextAnalyticsClient client = GetClient(useTokenCredential: true); string document = singleEnglish; LinkedEntityCollection linkedEntities = await client.RecognizeLinkedEntitiesAsync(document); Assert.AreEqual(3, linkedEntities.Count); }
public async Task RecognizeLinkedEntitiesWithLanguageTest() { TextAnalyticsClient client = GetClient(); string document = "Microsoft fue fundado por Bill Gates y Paul Allen."; LinkedEntityCollection linkedEntities = await client.RecognizeLinkedEntitiesAsync(document, "es"); Assert.GreaterOrEqual(linkedEntities.Count, 3); }
public async Task RecognizeLinkedEntitiesNullText() { using var stream = new MemoryStream(Encoding.UTF8.GetBytes(@" { ""kind"": ""EntityLinkingResults"", ""results"": { ""documents"": [ { ""id"": ""0"", ""entities"": [ { ""name"": ""Microsoft"", ""matches"": [ { ""text"": null, ""offset"": 0, ""length"": 9, ""confidenceScore"": 0.26 } ], ""language"": ""en"", ""id"": ""Microsoft"", ""url"": ""https://en.wikipedia.org/wiki/Microsoft"", ""dataSource"": ""Wikipedia"" } ], ""warnings"": [] } ], ""errors"": [], ""modelVersion"": ""2020-02-01"" } }")); var mockResponse = new MockResponse(200); mockResponse.ContentStream = stream; var mockTransport = new MockTransport(new[] { mockResponse }); var client = CreateTestClient(mockTransport); var documents = "Microsoft was founded"; LinkedEntityCollection response = await client.RecognizeLinkedEntitiesAsync(documents); Assert.AreEqual(string.Empty, response.FirstOrDefault().Matches.FirstOrDefault().Text); }
public void ExtractEntityLinking() { string endpoint = TestEnvironment.Endpoint; string apiKey = TestEnvironment.ApiKey; var client = new TextAnalyticsClient(new Uri(endpoint), new AzureKeyCredential(apiKey)); #region Snippet:RecognizeLinkedEntities string document = @"Microsoft was founded by Bill Gates with some friends he met at Harvard. One of his friends, Steve Ballmer, eventually became CEO after Bill Gates as well. Steve Ballmer eventually stepped down as CEO of Microsoft, and was succeeded by Satya Nadella. Microsoft originally moved its headquarters to Bellevue, Washington in Januaray 1979, but is now headquartered in Redmond"; try { Response <LinkedEntityCollection> response = client.RecognizeLinkedEntities(document); LinkedEntityCollection linkedEntities = response.Value; Console.WriteLine($"Recognized {linkedEntities.Count} entities:"); foreach (LinkedEntity linkedEntity in linkedEntities) { Console.WriteLine($" Name: {linkedEntity.Name}"); Console.WriteLine($" Language: {linkedEntity.Language}"); Console.WriteLine($" Data Source: {linkedEntity.DataSource}"); Console.WriteLine($" URL: {linkedEntity.Url}"); Console.WriteLine($" Entity Id in Data Source: {linkedEntity.DataSourceEntityId}"); foreach (LinkedEntityMatch match in linkedEntity.Matches) { Console.WriteLine($" Match Text: {match.Text}"); Console.WriteLine($" Offset: {match.Offset}"); Console.WriteLine($" Length: {match.Length}"); Console.WriteLine($" Confidence score: {match.ConfidenceScore}"); } Console.WriteLine(""); } } catch (RequestFailedException exception) { Console.WriteLine($"Error Code: {exception.ErrorCode}"); Console.WriteLine($"Message: {exception.Message}"); } #endregion }
public async Task ExtractEntityLinkingAsync() { string endpoint = TestEnvironment.Endpoint; string apiKey = TestEnvironment.ApiKey; var client = new TextAnalyticsClient(new Uri(endpoint), new AzureKeyCredential(apiKey)); string document = "Microsoft was founded by Bill Gates and Paul Allen."; LinkedEntityCollection linkedEntities = await client.RecognizeLinkedEntitiesAsync(document); Console.WriteLine($"Extracted {linkedEntities.Count} linked entit{(linkedEntities.Count > 1 ? "ies" : "y")}:"); foreach (LinkedEntity linkedEntity in linkedEntities) { Console.WriteLine($"Name: {linkedEntity.Name}, Language: {linkedEntity.Language}, Data Source: {linkedEntity.DataSource}, Url: {linkedEntity.Url}, Entity Id in Data Source: {linkedEntity.DataSourceEntityId}"); foreach (LinkedEntityMatch match in linkedEntity.Matches) { Console.WriteLine($" Match Text: {match.Text}, Confidence score: {match.ConfidenceScore}"); } } }
private async Task AnalyzeTextAsync() { try { this.progressControl.IsActive = true; DisplayProcessingUI(); // detect language string input = this.inputText.Text; DetectedLanguage detectedLanguage = await TextAnalyticsHelper.DetectLanguageAsync(input); string languageCode = TextAnalyticsHelper.GetLanguageCode(detectedLanguage); // check supported languages bool isOpinionMiningSupported = TextAnalyticsHelper.OpinionMiningSupportedLanguages.Any(l => string.Equals(l, languageCode, StringComparison.OrdinalIgnoreCase)); bool isSentimentSupported = TextAnalyticsHelper.SentimentAnalysisSupportedLanguages.Any(l => string.Equals(l, languageCode, StringComparison.OrdinalIgnoreCase)); bool isKeyPhraseSupported = TextAnalyticsHelper.KeyPhraseExtractionSupportedLanguages.Any(l => string.Equals(l, languageCode, StringComparison.OrdinalIgnoreCase)); bool isNamedEntitySupported = TextAnalyticsHelper.NamedEntitySupportedLanguages.Any(l => string.Equals(l, languageCode, StringComparison.OrdinalIgnoreCase)); bool isEntityLinkingSupported = TextAnalyticsHelper.EntityLinkingSupportedLanguages.Any(l => string.Equals(l, languageCode, StringComparison.OrdinalIgnoreCase)); // sentiment analysis, key phrase extraction, named entity recognition and entity linking Task <DocumentSentiment> documentSentimentTask = isSentimentSupported ? TextAnalyticsHelper.AnalyzeSentimentAsync(input, languageCode, isOpinionMiningSupported) : Task.FromResult <DocumentSentiment>(null); Task <KeyPhraseCollection> detectedKeyPhrasesTask = isKeyPhraseSupported ? TextAnalyticsHelper.ExtractKeyPhrasesAsync(input, languageCode) : Task.FromResult <KeyPhraseCollection>(null); Task <CategorizedEntityCollection> namedEntitiesResponseTask = isNamedEntitySupported ? TextAnalyticsHelper.RecognizeEntitiesAsync(input, languageCode) : Task.FromResult <CategorizedEntityCollection>(null); Task <LinkedEntityCollection> linkedEntitiesResponseTask = isEntityLinkingSupported ? TextAnalyticsHelper.RecognizeLinkedEntitiesAsync(input, languageCode) : Task.FromResult <LinkedEntityCollection>(null); await Task.WhenAll(documentSentimentTask, detectedKeyPhrasesTask, namedEntitiesResponseTask, linkedEntitiesResponseTask); DocumentSentiment documentSentiment = documentSentimentTask.Result; KeyPhraseCollection detectedKeyPhrases = detectedKeyPhrasesTask.Result; CategorizedEntityCollection namedEntitiesResponse = namedEntitiesResponseTask.Result; LinkedEntityCollection linkedEntitiesResponse = linkedEntitiesResponseTask.Result; // display results this.detectedLangTextBlock.Text = !string.IsNullOrEmpty(detectedLanguage.Name) ? $"{detectedLanguage.Name} (confidence: {(int)(detectedLanguage.ConfidenceScore * 100)}%)" : NotFound; this.detectedKeyPhrasesTextBlock.Text = detectedKeyPhrases != null && detectedKeyPhrases.Any() ? string.Join(", ", detectedKeyPhrases) : isKeyPhraseSupported?NotFound : LanguageNotSupported; this.namesEntitiesGridView.ItemsSource = namedEntitiesResponse != null && namedEntitiesResponse.Any() ? namedEntitiesResponse.Select(x => new { x.Text, Category = $"[{x.Category}]" }) : new[] { new { Text = isNamedEntitySupported ? "No entities" : LanguageNotSupported, Category = "" } }; this.linkedEntitiesGridView.ItemsSource = linkedEntitiesResponse != null && linkedEntitiesResponse.Any() ? linkedEntitiesResponse.Select(x => new { Name = $"{x.Name} ({x.DataSource})", x.Url }) : new[] { isEntityLinkingSupported ? new { Name = "No linked entities", Url = new Uri("about:blank") } : new { Name = LanguageNotSupported, Url = TextAnalyticsHelper.LanguageSupportUri } }; if (isSentimentSupported) { CreateSentimentChart(documentSentiment); // mined opinions OpinionMiningCollection.Clear(); var minedOpinions = documentSentiment?.Sentences.SelectMany(s => s.MinedOpinions); if (minedOpinions != null && minedOpinions.Any()) { var minedOpinionList = minedOpinions.Select(om => new MinedOpinion() { Aspect = om.Aspect.Text, Opinions = string.Join(", ", om.Opinions.Select(o => $"{o.Text} ({o.Sentiment.ToString("G")})")) }); OpinionMiningCollection.AddRange(minedOpinionList); } } else { this.sentimentTextBlock.Text = LanguageNotSupported; this.sentimentChart.Visibility = Visibility.Collapsed; } // prepare json result var jsonResult = new { LanguageDetection = detectedLanguage, KeyPhrases = detectedKeyPhrases, Sentiment = documentSentiment, Entities = namedEntitiesResponse, EntityLinking = linkedEntitiesResponse }; this.jsonResultTextBlock.Text = JsonConvert.SerializeObject(jsonResult, Formatting.Indented); } catch (Exception ex) { await Util.GenericApiCallExceptionHandler(ex, "Failure analyzing text"); } finally { this.progressControl.IsActive = false; } }