diff --git a/sdk/textanalytics/azure-ai-textanalytics/README.md b/sdk/textanalytics/azure-ai-textanalytics/README.md index 0efe4d8ec9afb..57ac922e00171 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/README.md +++ b/sdk/textanalytics/azure-ai-textanalytics/README.md @@ -222,6 +222,11 @@ documentSentiment.getSentences().forEach(sentenceSentiment -> System.out.printf("Analyzed sentence sentiment: %s.%n", sentenceSentiment.getSentiment())); ``` For samples on using the production recommended option `AnalyzeSentimentBatch` see [here][analyze_sentiment_sample]. + +To get more granular information about the opinions related to aspects of a product/service, also knows as Aspect-based +Sentiment Analysis in Natural Language Processing (NLP), see sample on sentiment analysis with opinion mining see +[here][analyze_sentiment_with_opinion_mining_sample]. + Please refer to the service documentation for a conceptual discussion of [sentiment analysis][sentiment_analysis]. ### Detect language @@ -270,14 +275,16 @@ document. It recognizes and categorizes PII entities in its input text, such as Social Security Numbers, bank account information, credit card numbers, and more. This endpoint is only supported for API versions v3.1-preview.1 and above. - + ```java String document = "My SSN is 859-98-0987"; textAnalyticsClient.recognizePiiEntities(document).forEach(entity -> System.out.printf( "Recognized Personally Identifiable Information entity: %s, entity category: %s, entity subcategory: %s," + " confidence score: %f.%n", + entity.getText(), entity.getCategory(), entity.getSubcategory(), entity.getConfidenceScore())); ``` +For samples on using the production recommended option `RecognizePiiEntitiesBatch` see [here][recognize_pii_entities_sample]. Please refer to the service documentation for [supported PII entity types][pii_entity_recognition]. ### Recognize linked entities @@ -394,8 +401,10 @@ This project has adopted the [Microsoft Open Source Code of Conduct][coc]. For m [samples_readme]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/README.md [detect_language_sample]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/DetectLanguageBatchDocuments.java [analyze_sentiment_sample]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/AnalyzeSentimentBatchDocuments.java +[analyze_sentiment_with_opinion_mining_sample]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/AnalyzeSentimentWithOpinionMining.java [extract_key_phrases_sample]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/ExtractKeyPhrasesBatchDocuments.java [recognize_entities_sample]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/RecognizeEntitiesBatchDocuments.java +[recognize_pii_entities_sample]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/RecognizePiiEntitiesBatchDocuments.java [recognize_linked_entities_sample]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/RecognizeLinkedEntitiesBatchDocuments.java ![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-java%2Fsdk%2Ftextanalytics%2Fazure-ai-textanalytics%2FREADME.png) diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/samples/README.md b/sdk/textanalytics/azure-ai-textanalytics/src/samples/README.md index 8331b0b9f0644..4f30dd0c0572d 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/samples/README.md +++ b/sdk/textanalytics/azure-ai-textanalytics/src/samples/README.md @@ -27,12 +27,16 @@ The following sections provide several code snippets covering some of the most c - [Detect language in a document with asynchronous client][async_sample_detect_language] - [Recognize entities in a document][sample_entities] - [Recognize entities in a document with asynchronous client][async_sample_entities] +- [Recognize Personally Identifiable Information in a document][sample_pii_entities] +- [Recognize Personally Identifiable Information in a document with asynchronous client][async_sample_pii_entities] - [Recognize linked entities in a document][sample_linked_entities] - [Recognize linked entities in a document with asynchronous client][async_sample_linked_entities] - [Extract key phrases in a document][sample_key_phrases] - [Extract key phrases in a document with asynchronous client][async_sample_key_phrases] - [Analyze sentiment in a document][sample_sentiment] - [Analyze sentiment in a document with asynchronous client][async_sample_sentiment] +- [Analyze sentiment with opinion mining in a document][sample_sentiment_opinion_mining] +- [Analyze sentiment with opinion mining in a document with asynchronous client][async_sample_sentiment_opinion_mining] - [Rotate key credential][sample_rotate_key] - [Rotate key credential with asynchronous client][async_sample_rotate_key] @@ -45,6 +49,10 @@ Batch Samples: - [Recognize entities in a batch of documents(Convenience)][sample_entities_batch_convenience] - [Recognize entities in a batch of documents with asynchronous client][async_sample_entities_batch] - [Recognize entities in a batch of documents with asynchronous client(Convenience)][async_sample_entities_batch_convenience] +- [Recognize Personally Identifiable Information in a batch of documents][sample_pii_entities_batch] +- [Recognize Personally Identifiable Information in a batch of documents(Convenience)][sample_pii_entities_batch_convenience] +- [Recognize Personally Identifiable Information in a batch of documents with asynchronous client][async_sample_pii_entities_batch] +- [Recognize Personally Identifiable Information in a batch of documents with asynchronous client(Convenience)][async_sample_pii_entities_batch_convenience] - [Recognize linked entities in a batch of documents][sample_linked_entities_batch] - [Recognize linked entities in a batch of documents(Convenience)][sample_linked_entities_batch_convenience] - [Recognize linked entities in a batch of documents with asynchronous client][async_sample_linked_entities_batch] @@ -57,7 +65,6 @@ Batch Samples: - [Analyze sentiment in a batch of documents(Convenience)][sample_sentiment_batch_convenience] - [Analyze sentiment in a batch of documents with asynchronous client][async_sample_sentiment_batch] - [Analyze sentiment in a batch of documents with asynchronous client(Convenience)][async_sample_sentiment_batch_convenience] - ## Troubleshooting Troubleshooting steps can be found [here][SDK_README_TROUBLESHOOTING]. @@ -82,6 +89,9 @@ This project welcomes contributions and suggestions. Find [more contributing][SD [async_sample_entities]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/RecognizeEntitiesAsync.java [async_sample_entities_batch]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/RecognizeEntitiesBatchDocumentsAsync.java [async_sample_entities_batch_convenience]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/RecognizeEntitiesBatchStringDocumentsAsync.java +[async_sample_pii_entities]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/RecognizePiiEntitiesAsync.java +[async_sample_pii_entities_batch]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/RecognizePiiEntitiesBatchDocumentsAsync.java +[async_sample_pii_entities_batch_convenience]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/RecognizeEntitiesBatchStringDocumentsAsync.java [async_sample_linked_entities]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/RecognizeLinkedEntitiesAsync.java [async_sample_linked_entities_batch]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/RecognizeLinkedEntitiesBatchDocumentsAsync.java [async_sample_linked_entities_batch_convenience]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/RecognizeLinkedEntitiesBatchStringDocumentsAsync.java @@ -92,6 +102,7 @@ This project welcomes contributions and suggestions. Find [more contributing][SD [async_sample_sentiment]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/AnalyzeSentimentAsync.java [async_sample_sentiment_batch]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/AnalyzeSentimentBatchDocumentsAsync.java [async_sample_sentiment_batch_convenience]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/AnalyzeSentimentBatchStringDocumentsAsync.java +[async_sample_sentiment_opinion_mining]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/AnalyzeSentimentWithOpinionMiningAsync.java [sample_detect_language]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/DetectLanguage.java [sample_detect_language_batch]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/DetectLanguageBatchDocuments.java @@ -99,6 +110,9 @@ This project welcomes contributions and suggestions. Find [more contributing][SD [sample_entities]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/RecognizeEntities.java [sample_entities_batch]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/RecognizeEntitiesBatchDocuments.java [sample_entities_batch_convenience]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/RecognizeEntitiesBatchStringDocuments.java +[sample_pii_entities]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/RecognizePiiEntities.java +[sample_pii_entities_batch]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/RecognizePiiEntitiesBatchDocuments.java +[sample_pii_entities_batch_convenience]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/RecognizePiiEntitiesBatchStringDocuments.java [sample_linked_entities]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/RecognizeLinkedEntities.java [sample_linked_entities_batch]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/RecognizeLinkedEntitiesBatchDocuments.java [sample_linked_entities_batch_convenience]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/RecognizeLinkedEntitiesBatchStringDocuments.java @@ -109,5 +123,6 @@ This project welcomes contributions and suggestions. Find [more contributing][SD [sample_sentiment]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/AnalyzeSentiment.java [sample_sentiment_batch]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/AnalyzeSentimentBatchDocuments.java [sample_sentiment_batch_convenience]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/AnalyzeSentimentBatchStringDocuments.java +[sample_sentiment_opinion_mining]: https://github.com/Azure/azure-sdk-for-java/blob/master/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/AnalyzeSentimentWithOpinionMining.java ![Impressions](https://azure-sdk-impressions.azurewebsites.net/api/impressions/azure-sdk-for-java%2Fsdk%2Ftextanalytics%2Fazure-ai-textanalytics%2FREADME.png) diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/AnalyzeSentimentBatchDocumentsWithOpinionMining.java b/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/AnalyzeSentimentBatchDocumentsWithOpinionMining.java deleted file mode 100644 index 0c0f936ab4606..0000000000000 --- a/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/AnalyzeSentimentBatchDocumentsWithOpinionMining.java +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.ai.textanalytics.batch; - -import com.azure.ai.textanalytics.TextAnalyticsClient; -import com.azure.ai.textanalytics.TextAnalyticsClientBuilder; -import com.azure.ai.textanalytics.models.AnalyzeSentimentOptions; -import com.azure.ai.textanalytics.models.AspectSentiment; -import com.azure.ai.textanalytics.models.DocumentSentiment; -import com.azure.ai.textanalytics.models.OpinionSentiment; -import com.azure.ai.textanalytics.models.SentimentConfidenceScores; -import com.azure.ai.textanalytics.models.TextDocumentBatchStatistics; -import com.azure.ai.textanalytics.models.TextDocumentInput; -import com.azure.ai.textanalytics.util.AnalyzeSentimentResultCollection; -import com.azure.core.credential.AzureKeyCredential; -import com.azure.core.http.rest.Response; -import com.azure.core.util.Context; - -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; - -/** - * Sample demonstrates how to analyze the sentiments of {@link TextDocumentInput} documents with opinion mining. - */ -public class AnalyzeSentimentBatchDocumentsWithOpinionMining { - /** - * Main method to invoke this demo about how to analyze the sentiments of {@link TextDocumentInput} documents. - * - * @param args Unused arguments to the program. - */ - public static void main(String[] args) { - // Instantiate a client that will be used to call the service. - TextAnalyticsClient client = new TextAnalyticsClientBuilder() - .credential(new AzureKeyCredential("{key}")) - .endpoint("{endpoint}") - .buildClient(); - - // The texts that need be analyzed. - List documents = Arrays.asList( - new TextDocumentInput("A", "Great atmosphere. Close to plenty of restaurants, hotels, and transit! Staff are friendly and helpful.").setLanguage("en"), - new TextDocumentInput("B", "Bad atmosphere. Not close to plenty of restaurants, hotels, and transit! Staff are not friendly and helpful.").setLanguage("en") - ); - - AnalyzeSentimentOptions options = new AnalyzeSentimentOptions() - .setIncludeOpinionMining(true).setIncludeStatistics(true).setModelVersion("latest"); - - // Analyzing sentiment for each document in a batch of documents - Response sentimentBatchResultResponse = - client.analyzeSentimentBatchWithResponse(documents, options, Context.NONE); - - // Response's status code - System.out.printf("Status code of request response: %d%n", sentimentBatchResultResponse.getStatusCode()); - AnalyzeSentimentResultCollection sentimentBatchResultCollection = sentimentBatchResultResponse.getValue(); - - // Model version - System.out.printf("Results of Azure Text Analytics \"Sentiment Analysis\" Model, version: %s%n", sentimentBatchResultCollection.getModelVersion()); - - // Batch statistics - TextDocumentBatchStatistics batchStatistics = sentimentBatchResultCollection.getStatistics(); - System.out.printf("Documents statistics: document count = %s, erroneous document count = %s, transaction count = %s, valid document count = %s.%n", - batchStatistics.getDocumentCount(), batchStatistics.getInvalidDocumentCount(), batchStatistics.getTransactionCount(), batchStatistics.getValidDocumentCount()); - - // Analyzed sentiment for each document in a batch of documents - AtomicInteger counter = new AtomicInteger(); - sentimentBatchResultCollection.forEach(analyzeSentimentResult -> { - System.out.printf("%n%s%n", documents.get(counter.getAndIncrement())); - if (analyzeSentimentResult.isError()) { - // Erroneous document - System.out.printf("Cannot analyze sentiment. Error: %s%n", analyzeSentimentResult.getError().getMessage()); - } else { - // Valid document - DocumentSentiment documentSentiment = analyzeSentimentResult.getDocumentSentiment(); - SentimentConfidenceScores scores = documentSentiment.getConfidenceScores(); - System.out.printf("Analyzed document sentiment: %s, positive score: %f, neutral score: %f, negative score: %f.%n", - documentSentiment.getSentiment(), scores.getPositive(), scores.getNeutral(), scores.getNegative()); - documentSentiment.getSentences().forEach(sentenceSentiment -> { - SentimentConfidenceScores sentenceScores = sentenceSentiment.getConfidenceScores(); - System.out.printf("\tSentence sentiment: %s, positive score: %f, neutral score: %f, negative score: %f.%n", - sentenceSentiment.getSentiment(), sentenceScores.getPositive(), sentenceScores.getNeutral(), sentenceScores.getNegative()); - sentenceSentiment.getMinedOpinions().forEach(minedOpinions -> { - AspectSentiment aspectSentiment = minedOpinions.getAspect(); - System.out.printf("\t\tAspect sentiment: %s, aspect text: %s%n", aspectSentiment.getSentiment(), - aspectSentiment.getText()); - for (OpinionSentiment opinionSentiment : minedOpinions.getOpinions()) { - System.out.printf("\t\t\t'%s' opinion sentiment because of \"%s\". Is the opinion negated: %s.%n", - opinionSentiment.getSentiment(), opinionSentiment.getText(), opinionSentiment.isNegated()); - } - }); - }); - } - }); - } -} diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/AnalyzeSentimentBatchDocumentsWithOpinionMiningAsync.java b/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/AnalyzeSentimentBatchDocumentsWithOpinionMiningAsync.java deleted file mode 100644 index 50b8acde5803b..0000000000000 --- a/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/AnalyzeSentimentBatchDocumentsWithOpinionMiningAsync.java +++ /dev/null @@ -1,105 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.ai.textanalytics.batch; - -import com.azure.ai.textanalytics.TextAnalyticsAsyncClient; -import com.azure.ai.textanalytics.TextAnalyticsClientBuilder; -import com.azure.ai.textanalytics.models.AnalyzeSentimentOptions; -import com.azure.ai.textanalytics.models.AnalyzeSentimentResult; -import com.azure.ai.textanalytics.models.AspectSentiment; -import com.azure.ai.textanalytics.models.DocumentSentiment; -import com.azure.ai.textanalytics.models.OpinionSentiment; -import com.azure.ai.textanalytics.models.SentimentConfidenceScores; -import com.azure.ai.textanalytics.models.TextDocumentBatchStatistics; -import com.azure.ai.textanalytics.models.TextDocumentInput; -import com.azure.ai.textanalytics.util.AnalyzeSentimentResultCollection; -import com.azure.core.credential.AzureKeyCredential; - -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; - -/** - * Sample demonstrates how to asynchronously analyze the sentiments of {@link TextDocumentInput} documents with - * opinion mining. - */ -public class AnalyzeSentimentBatchDocumentsWithOpinionMiningAsync { - /** - * Main method to invoke this demo about how to analyze the sentiments of {@link TextDocumentInput} documents. - * - * @param args Unused arguments to the program. - */ - public static void main(String[] args) { - // Instantiate a client that will be used to call the service. - TextAnalyticsAsyncClient client = new TextAnalyticsClientBuilder() - .credential(new AzureKeyCredential("{key}")) - .endpoint("{endpoint}") - .buildAsyncClient(); - - // The texts that need be analyzed. - List documents = Arrays.asList( - new TextDocumentInput("A", "Great atmosphere. Close to plenty of restaurants, hotels, and transit! Staff are friendly and helpful.").setLanguage("en"), - new TextDocumentInput("B", "Bad atmosphere. Not close to plenty of restaurants, hotels, and transit! Staff are not friendly and helpful.").setLanguage("en") - ); - - AnalyzeSentimentOptions options = new AnalyzeSentimentOptions() - .setIncludeOpinionMining(true).setIncludeStatistics(true).setModelVersion("latest"); - - // Analyzing sentiment for each document in a batch of documents - client.analyzeSentimentBatchWithResponse(documents, options).subscribe( - sentimentBatchResultResponse -> { - // Response's status code - System.out.printf("Status code of request response: %d%n", sentimentBatchResultResponse.getStatusCode()); - AnalyzeSentimentResultCollection sentimentBatchResultCollection = sentimentBatchResultResponse.getValue(); - - System.out.printf("Results of Azure Text Analytics \"Sentiment Analysis\" Model, version: %s%n", sentimentBatchResultCollection.getModelVersion()); - - // Batch statistics - TextDocumentBatchStatistics batchStatistics = sentimentBatchResultCollection.getStatistics(); - System.out.printf("Documents statistics: document count = %s, erroneous document count = %s, transaction count = %s, valid document count = %s.%n", - batchStatistics.getDocumentCount(), batchStatistics.getInvalidDocumentCount(), batchStatistics.getTransactionCount(), batchStatistics.getValidDocumentCount()); - - // Analyzed sentiment for each document in a batch of documents - AtomicInteger counter = new AtomicInteger(); - for (AnalyzeSentimentResult analyzeSentimentResult : sentimentBatchResultCollection) { - System.out.printf("%n%s%n", documents.get(counter.getAndIncrement())); - if (analyzeSentimentResult.isError()) { - // Erroneous document - System.out.printf("Cannot analyze sentiment. Error: %s%n", analyzeSentimentResult.getError().getMessage()); - } else { - // Valid document - DocumentSentiment documentSentiment = analyzeSentimentResult.getDocumentSentiment(); - SentimentConfidenceScores scores = documentSentiment.getConfidenceScores(); - System.out.printf("Analyzed document sentiment: %s, positive score: %f, neutral score: %f, negative score: %f.%n", - documentSentiment.getSentiment(), scores.getPositive(), scores.getNeutral(), scores.getNegative()); - documentSentiment.getSentences().forEach(sentenceSentiment -> { - SentimentConfidenceScores sentenceScores = sentenceSentiment.getConfidenceScores(); - System.out.printf("\tSentence sentiment: %s, positive score: %f, neutral score: %f, negative score: %f.%n", - sentenceSentiment.getSentiment(), sentenceScores.getPositive(), sentenceScores.getNeutral(), sentenceScores.getNegative()); - sentenceSentiment.getMinedOpinions().forEach(minedOpinions -> { - AspectSentiment aspectSentiment = minedOpinions.getAspect(); - System.out.printf("\t\tAspect sentiment: %s, aspect text: %s%n", aspectSentiment.getSentiment(), - aspectSentiment.getText()); - for (OpinionSentiment opinionSentiment : minedOpinions.getOpinions()) { - System.out.printf("\t\t\t'%s' opinion sentiment because of \"%s\". Is the opinion negated: %s.%n", - opinionSentiment.getSentiment(), opinionSentiment.getText(), opinionSentiment.isNegated()); - } - }); - }); - } - } - }, - error -> System.err.println("There was an error analyzing sentiment of the documents." + error), - () -> System.out.println("Batch of sentiment analyzed.")); - - // The .subscribe() creation and assignment is not a blocking call. For the purpose of this example, we sleep - // the thread so the program does not end before the send operation is complete. Using .block() instead of - // .subscribe() will turn this into a synchronous call. - try { - TimeUnit.SECONDS.sleep(5); - } catch (InterruptedException ignored) { - } - } -} diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/AnalyzeSentimentBatchStringWithOpinionMining.java b/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/AnalyzeSentimentBatchStringWithOpinionMining.java deleted file mode 100644 index 0508152e9b307..0000000000000 --- a/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/AnalyzeSentimentBatchStringWithOpinionMining.java +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.ai.textanalytics.batch; - -import com.azure.ai.textanalytics.TextAnalyticsClient; -import com.azure.ai.textanalytics.TextAnalyticsClientBuilder; -import com.azure.ai.textanalytics.models.AnalyzeSentimentOptions; -import com.azure.ai.textanalytics.models.AnalyzeSentimentResult; -import com.azure.ai.textanalytics.models.AspectSentiment; -import com.azure.ai.textanalytics.models.DocumentSentiment; -import com.azure.ai.textanalytics.models.OpinionSentiment; -import com.azure.ai.textanalytics.models.SentimentConfidenceScores; -import com.azure.ai.textanalytics.models.TextDocumentInput; -import com.azure.ai.textanalytics.util.AnalyzeSentimentResultCollection; -import com.azure.core.credential.AzureKeyCredential; - -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; - -/** - * Sample demonstrates how to analyze the sentiments of {@code String} documents with opinion mining. - */ -public class AnalyzeSentimentBatchStringWithOpinionMining { - /** - * Main method to invoke this demo about how to analyze the sentiments of {@link TextDocumentInput} documents. - * - * @param args Unused arguments to the program. - */ - public static void main(String[] args) { - // Instantiate a client that will be used to call the service. - TextAnalyticsClient client = new TextAnalyticsClientBuilder() - .credential(new AzureKeyCredential("{key}")) - .endpoint("{endpoint}") - .buildClient(); - - // The documents that need to be analyzed. - List documents = Arrays.asList( - "Great atmosphere. Close to plenty of restaurants, hotels, and transit! Staff are friendly and helpful.", - "Bad atmosphere. Not close to plenty of restaurants, hotels, and transit! Staff are not friendly and helpful." - ); - - AnalyzeSentimentOptions options = new AnalyzeSentimentOptions() - .setIncludeOpinionMining(true).setIncludeStatistics(true).setModelVersion("latest"); - - // Analyzing sentiment for each document in a batch of documents - AnalyzeSentimentResultCollection sentimentBatchResultCollection = client.analyzeSentimentBatch(documents, "en", options); - - // Model version - System.out.printf("Results of Azure Text Analytics \"Sentiment Analysis\" Model, version: %s%n", sentimentBatchResultCollection.getModelVersion()); - - // Analyzed sentiment for each document in a batch of documents - AtomicInteger counter = new AtomicInteger(); - for (AnalyzeSentimentResult analyzeSentimentResult : sentimentBatchResultCollection) { - System.out.printf("%nText = %s%n", documents.get(counter.getAndIncrement())); - DocumentSentiment documentSentiment = analyzeSentimentResult.getDocumentSentiment(); - - SentimentConfidenceScores scores = documentSentiment.getConfidenceScores(); - System.out.printf("Analyzed document sentiment: %s, positive score: %f, neutral score: %f, negative score: %f.%n", - documentSentiment.getSentiment(), scores.getPositive(), scores.getNeutral(), scores.getNegative()); - documentSentiment.getSentences().forEach(sentenceSentiment -> { - SentimentConfidenceScores sentenceScores = sentenceSentiment.getConfidenceScores(); - System.out.printf("\tSentence sentiment: %s, positive score: %f, neutral score: %f, negative score: %f.%n", - sentenceSentiment.getSentiment(), sentenceScores.getPositive(), sentenceScores.getNeutral(), sentenceScores.getNegative()); - sentenceSentiment.getMinedOpinions().forEach(minedOpinions -> { - AspectSentiment aspectSentiment = minedOpinions.getAspect(); - System.out.printf("\t\tAspect sentiment: %s, aspect text: %s%n", aspectSentiment.getSentiment(), - aspectSentiment.getText()); - for (OpinionSentiment opinionSentiment : minedOpinions.getOpinions()) { - System.out.printf("\t\t\t'%s' opinion sentiment because of \"%s\". Is the opinion negated: %s.%n", - opinionSentiment.getSentiment(), opinionSentiment.getText(), opinionSentiment.isNegated()); - } - }); - }); - } - } -} diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/AnalyzeSentimentBatchStringWithOpinionMiningAsync.java b/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/AnalyzeSentimentBatchStringWithOpinionMiningAsync.java deleted file mode 100644 index 43e28939f213a..0000000000000 --- a/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/batch/AnalyzeSentimentBatchStringWithOpinionMiningAsync.java +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.ai.textanalytics.batch; - -import com.azure.ai.textanalytics.TextAnalyticsAsyncClient; -import com.azure.ai.textanalytics.TextAnalyticsClientBuilder; -import com.azure.ai.textanalytics.models.AnalyzeSentimentOptions; -import com.azure.ai.textanalytics.models.AnalyzeSentimentResult; -import com.azure.ai.textanalytics.models.AspectSentiment; -import com.azure.ai.textanalytics.models.DocumentSentiment; -import com.azure.ai.textanalytics.models.OpinionSentiment; -import com.azure.ai.textanalytics.models.SentimentConfidenceScores; -import com.azure.ai.textanalytics.models.TextDocumentBatchStatistics; -import com.azure.core.credential.AzureKeyCredential; - -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; - -/** - * Sample demonstrates how to asynchronously analyze the sentiments of {@code String} documents with opinion mining. - */ -public class AnalyzeSentimentBatchStringWithOpinionMiningAsync { - - /** - * Main method to invoke this demo about how to analyze the sentiments of {@code String} documents. - * - * @param args Unused arguments to the program. - */ - public static void main(String[] args) { - // Instantiate a client that will be used to call the service. - TextAnalyticsAsyncClient client = new TextAnalyticsClientBuilder() - .credential(new AzureKeyCredential("{key}")) - .endpoint("{endpoint}") - .buildAsyncClient(); - - // The texts that need be analyzed. - List documents = Arrays.asList( - "Great atmosphere. Close to plenty of restaurants, hotels, and transit! Staff are friendly and helpful.", - "Bad atmosphere. Not close to plenty of restaurants, hotels, and transit! Staff are not friendly and helpful." - ); - - AnalyzeSentimentOptions options = new AnalyzeSentimentOptions() - .setIncludeOpinionMining(true).setIncludeStatistics(true).setModelVersion("latest"); - - // Analyzing sentiment for each document in a batch of documents - client.analyzeSentimentBatch(documents, "en", options).subscribe( - sentimentBatchResultCollection -> { - System.out.printf("Results of Azure Text Analytics \"Sentiment Analysis\" Model, version: %s%n", sentimentBatchResultCollection.getModelVersion()); - - // Batch statistics - TextDocumentBatchStatistics batchStatistics = sentimentBatchResultCollection.getStatistics(); - System.out.printf("Documents statistics: document count = %s, erroneous document count = %s, transaction count = %s, valid document count = %s.%n", - batchStatistics.getDocumentCount(), batchStatistics.getInvalidDocumentCount(), batchStatistics.getTransactionCount(), batchStatistics.getValidDocumentCount()); - - // Analyzed sentiment for each document in a batch of documents - AtomicInteger counter = new AtomicInteger(); - for (AnalyzeSentimentResult analyzeSentimentResult : sentimentBatchResultCollection) { - // Analyzed sentiment for each document - System.out.printf("%nText = %s%n", documents.get(counter.getAndIncrement())); - if (analyzeSentimentResult.isError()) { - // Erroneous document - System.out.printf("Cannot analyze sentiment. Error: %s%n", analyzeSentimentResult.getError().getMessage()); - } else { - // Valid document - DocumentSentiment documentSentiment = analyzeSentimentResult.getDocumentSentiment(); - SentimentConfidenceScores scores = documentSentiment.getConfidenceScores(); - System.out.printf("Analyzed document sentiment: %s, positive score: %f, neutral score: %f, negative score: %f.%n", - documentSentiment.getSentiment(), scores.getPositive(), scores.getNeutral(), scores.getNegative()); - documentSentiment.getSentences().forEach(sentenceSentiment -> { - SentimentConfidenceScores sentenceScores = sentenceSentiment.getConfidenceScores(); - System.out.printf("\tSentence sentiment: %s, positive score: %f, neutral score: %f, negative score: %f.%n", - sentenceSentiment.getSentiment(), sentenceScores.getPositive(), sentenceScores.getNeutral(), sentenceScores.getNegative()); - sentenceSentiment.getMinedOpinions().forEach(minedOpinions -> { - AspectSentiment aspectSentiment = minedOpinions.getAspect(); - System.out.printf("\t\tAspect sentiment: %s, aspect text: %s%n", aspectSentiment.getSentiment(), - aspectSentiment.getText()); - for (OpinionSentiment opinionSentiment : minedOpinions.getOpinions()) { - System.out.printf("\t\t\t'%s' opinion sentiment because of \"%s\". Is the opinion negated: %s.%n", - opinionSentiment.getSentiment(), opinionSentiment.getText(), opinionSentiment.isNegated()); - } - }); - }); - } - } - }, - error -> System.err.println("There was an error analyzing sentiment of the documents." + error), - () -> System.out.println("Batch of sentiment analyzed.")); - - // The .subscribe() creation and assignment is not a blocking call. For the purpose of this example, we sleep - // the thread so the program does not end before the send operation is complete. Using .block() instead of - // .subscribe() will turn this into a synchronous call. - try { - TimeUnit.SECONDS.sleep(5); - } catch (InterruptedException ignored) { - } - } -}