From 16da16e081c89080d8c26704e0d7e3cd3b8cf509 Mon Sep 17 00:00:00 2001 From: Sameeksha Vaity Date: Thu, 26 Dec 2019 12:34:04 -0800 Subject: [PATCH 1/6] add seperate function clients --- .../textanalytics/AnalyzeSentimentClient.java | 144 +++++ .../textanalytics/DetectLanguageClient.java | 116 ++++ .../textanalytics/ExtractKeyPhraseClient.java | 99 +++ .../textanalytics/RecognizeEntityClient.java | 106 ++++ .../RecognizeLinkedEntityClient.java | 124 ++++ .../RecognizePiiEntityClient.java | 110 ++++ .../TextAnalyticsAsyncClient.java | 575 ++---------------- .../ai/textanalytics/TextAnalyticsClient.java | 46 +- .../azure/ai/textanalytics/Transforms.java | 65 ++ .../TextAnalyticsAsyncClientTest.java | 4 +- 10 files changed, 832 insertions(+), 557 deletions(-) create mode 100644 sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/AnalyzeSentimentClient.java create mode 100644 sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/DetectLanguageClient.java create mode 100644 sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/ExtractKeyPhraseClient.java create mode 100644 sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeEntityClient.java create mode 100644 sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeLinkedEntityClient.java create mode 100644 sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizePiiEntityClient.java create mode 100644 sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/Transforms.java diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/AnalyzeSentimentClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/AnalyzeSentimentClient.java new file mode 100644 index 000000000000..40c8f4dc45e5 --- /dev/null +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/AnalyzeSentimentClient.java @@ -0,0 +1,144 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.ai.textanalytics; + +import com.azure.ai.textanalytics.implementation.TextAnalyticsClientImpl; +import com.azure.ai.textanalytics.implementation.models.DocumentError; +import com.azure.ai.textanalytics.implementation.models.DocumentSentiment; +import com.azure.ai.textanalytics.implementation.models.MultiLanguageBatchInput; +import com.azure.ai.textanalytics.implementation.models.SentimentConfidenceScorePerLabel; +import com.azure.ai.textanalytics.implementation.models.SentimentResponse; +import com.azure.ai.textanalytics.models.AnalyzeSentimentResult; +import com.azure.ai.textanalytics.models.DocumentResultCollection; +import com.azure.ai.textanalytics.models.TextAnalyticsRequestOptions; +import com.azure.ai.textanalytics.models.TextDocumentInput; +import com.azure.ai.textanalytics.models.TextSentiment; +import com.azure.ai.textanalytics.models.TextSentimentClass; +import com.azure.core.http.rest.Response; +import com.azure.core.http.rest.SimpleResponse; +import com.azure.core.util.Context; +import com.azure.core.util.logging.ClientLogger; +import reactor.core.publisher.Mono; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +import static com.azure.ai.textanalytics.Transforms.toTextAnalyticsError; +import static com.azure.ai.textanalytics.Transforms.toMultiLanguageInput; +import static com.azure.ai.textanalytics.Transforms.toTextDocumentStatistics; +import static com.azure.ai.textanalytics.Transforms.toBatchStatistics; +import static com.azure.ai.textanalytics.Transforms.mapByIndex; + +class AnalyzeSentimentClient { + private final ClientLogger logger; + private final TextAnalyticsClientImpl service; + + AnalyzeSentimentClient(TextAnalyticsClientImpl service, ClientLogger logger) { + this.logger = logger; + this.service = service; + } + + Mono> analyzeSentimentWithResponse(String text, String language, Context context) { + Objects.requireNonNull(text, "'text' cannot be null."); + + return analyzeBatchSentimentWithResponse( + Collections.singletonList(new TextDocumentInput("0", text, language)), null, context) + .map(response -> new SimpleResponse<>(response, response.getValue().iterator().next())); + } + + Mono>> analyzeSentimentWithResponse( + List textInputs, String language, Context context) { + Objects.requireNonNull(textInputs, "'textInputs' cannot be null."); + + List documentInputs = mapByIndex(textInputs, (index, value) -> + new TextDocumentInput(index, value, language)); + return analyzeBatchSentimentWithResponse(documentInputs, null, context); + } + + Mono>> analyzeBatchSentimentWithResponse( + List textInputs, TextAnalyticsRequestOptions options, Context context) { + Objects.requireNonNull(textInputs, "'textInputs' cannot be null."); + + final MultiLanguageBatchInput batchInput = new MultiLanguageBatchInput() + .setDocuments(toMultiLanguageInput(textInputs)); + return service.sentimentWithRestResponseAsync( + batchInput, + options == null ? null : options.getModelVersion(), + options == null ? null : options.showStatistics(), context) + .doOnSubscribe(ignoredValue -> logger.info("A batch of text sentiment input - {}", textInputs.toString())) + .doOnSuccess(response -> logger.info("A batch of text sentiment output - {}", response)) + .doOnError(error -> logger.warning("Failed to text sentiment - {}", error)) + .map(response -> new SimpleResponse<>(response, toDocumentResultCollection(response.getValue()))); + } + + /** + * Helper method to convert the service response of {@link SentimentResponse} to {@link DocumentResultCollection}. + * + * @param sentimentResponse the {@link SentimentResponse} returned by the service. + * + * @return the {@link DocumentResultCollection} of {@link AnalyzeSentimentResult} to be returned by the SDK. + */ + private DocumentResultCollection toDocumentResultCollection( + final SentimentResponse sentimentResponse) { + List analyzeSentimentResults = new ArrayList<>(); + for (DocumentSentiment documentSentiment : sentimentResponse.getDocuments()) { + analyzeSentimentResults.add(convertToTextSentimentResult(documentSentiment)); + } + for (DocumentError documentError : sentimentResponse.getErrors()) { + final com.azure.ai.textanalytics.models.TextAnalyticsError error = + toTextAnalyticsError(documentError.getError()); + analyzeSentimentResults.add(new AnalyzeSentimentResult(documentError.getId(), null, + error, null, null)); + } + return new DocumentResultCollection<>(analyzeSentimentResults, + sentimentResponse.getModelVersion(), sentimentResponse.getStatistics() == null ? null + : toBatchStatistics(sentimentResponse.getStatistics())); + } + + private AnalyzeSentimentResult convertToTextSentimentResult(final DocumentSentiment documentSentiment) { + // Document text sentiment + final TextSentimentClass documentSentimentClass = TextSentimentClass.fromString(documentSentiment. + getSentiment().toString()); + if (documentSentimentClass == null) { + // Not throw exception for an invalid Sentiment type because we should not skip processing the + // other response. It is a service issue. + logger.logExceptionAsWarning( + new RuntimeException(String.format("'%s' is not valid text sentiment.", + documentSentiment.getSentiment()))); + } + final SentimentConfidenceScorePerLabel confidenceScorePerLabel = documentSentiment.getDocumentScores(); + + // Sentence text sentiment + final List sentenceSentimentTexts = documentSentiment.getSentences().stream() + .map(sentenceSentiment -> { + TextSentimentClass sentimentClass = TextSentimentClass.fromString(sentenceSentiment + .getSentiment().toString()); + if (sentimentClass == null) { + // Not throw exception for an invalid Sentiment type because we should not skip processing the + // other response. It is a service issue. + logger.logExceptionAsWarning( + new RuntimeException(String.format("'%s' is not valid text sentiment.", + sentenceSentiment.getSentiment()))); + } + SentimentConfidenceScorePerLabel confidenceScorePerSentence = sentenceSentiment.getSentenceScores(); + + return new TextSentiment(sentimentClass, confidenceScorePerSentence.getNegative(), + confidenceScorePerSentence.getNeutral(), confidenceScorePerSentence.getPositive(), + sentenceSentiment.getLength(), sentenceSentiment.getOffset()); + + }).collect(Collectors.toList()); + + return new AnalyzeSentimentResult(documentSentiment.getId(), + documentSentiment.getStatistics() == null ? null + : toTextDocumentStatistics(documentSentiment.getStatistics()), null, + new TextSentiment(documentSentimentClass, confidenceScorePerLabel.getNegative(), + confidenceScorePerLabel.getNeutral(), confidenceScorePerLabel.getPositive(), + sentenceSentimentTexts.stream().mapToInt(TextSentiment::getLength).sum(), 0), + sentenceSentimentTexts); + } + +} diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/DetectLanguageClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/DetectLanguageClient.java new file mode 100644 index 000000000000..c034a45c05b7 --- /dev/null +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/DetectLanguageClient.java @@ -0,0 +1,116 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.ai.textanalytics; + +import com.azure.ai.textanalytics.implementation.TextAnalyticsClientImpl; +import com.azure.ai.textanalytics.implementation.models.DocumentError; +import com.azure.ai.textanalytics.implementation.models.DocumentLanguage; +import com.azure.ai.textanalytics.implementation.models.LanguageBatchInput; +import com.azure.ai.textanalytics.implementation.models.LanguageInput; +import com.azure.ai.textanalytics.implementation.models.LanguageResult; +import com.azure.ai.textanalytics.models.DetectLanguageInput; +import com.azure.ai.textanalytics.models.DetectLanguageResult; +import com.azure.ai.textanalytics.models.DetectedLanguage; +import com.azure.ai.textanalytics.models.DocumentResultCollection; +import com.azure.ai.textanalytics.models.TextAnalyticsRequestOptions; +import com.azure.core.http.rest.Response; +import com.azure.core.http.rest.SimpleResponse; +import com.azure.core.util.Context; +import com.azure.core.util.logging.ClientLogger; +import reactor.core.publisher.Mono; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +import static com.azure.ai.textanalytics.Transforms.mapByIndex; + +class DetectLanguageClient { + private final ClientLogger logger; + private final TextAnalyticsClientImpl service; + + DetectLanguageClient(TextAnalyticsClientImpl service, ClientLogger logger) { + this.logger = logger; + this.service = service; + } + + Mono> detectLanguageWithResponse(String text, String countryHint, Context context) { + Objects.requireNonNull(text, "'text' cannot be null."); + List languageInputs = Collections.singletonList(new DetectLanguageInput("0", + text, countryHint)); + return detectBatchLanguagesWithResponse(languageInputs, null, context).map(response -> + new SimpleResponse<>(response, response.getValue().iterator().next())); + } + + Mono>> detectLanguagesWithResponse(List textInputs, + String countryHint, Context context) { + Objects.requireNonNull(textInputs, "'textInputs' cannot be null."); + List detectLanguageInputs = mapByIndex(textInputs, (index, value) -> + new DetectLanguageInput(index, value, countryHint)); + + return detectBatchLanguagesWithResponse(detectLanguageInputs, null, context); + } + + Mono>> detectBatchLanguagesWithResponse( + List textInputs, TextAnalyticsRequestOptions options, Context context) { + Objects.requireNonNull(textInputs, "'textInputs' cannot be null."); + + final LanguageBatchInput languageBatchInput = new LanguageBatchInput() + .setDocuments(textInputs.stream().map(detectLanguageInput -> new LanguageInput() + .setId(detectLanguageInput.getId()).setText(detectLanguageInput.getText()) + .setCountryHint(detectLanguageInput.getCountryHint())).collect(Collectors.toList())); + + return service.languagesWithRestResponseAsync( + languageBatchInput, options == null ? null : options.getModelVersion(), + options == null ? null : options.showStatistics(), context) + .doOnSubscribe(ignoredValue -> logger.info("A batch of language input - {}", textInputs.toString())) + .doOnSuccess(response -> logger.info("A batch of detected language output - {}", response.getValue())) + .doOnError(error -> logger.warning("Failed to detected languages - {}", error)) + .map(response -> new SimpleResponse<>(response, toDocumentResultCollection(response.getValue()))); + } + + /** + * Helper method to convert the service response of {@link LanguageResult} to {@link DocumentResultCollection}. + * + * @param languageResult the {@link LanguageResult} returned by the service. + * + * @return the {@link DocumentResultCollection} of {@link DetectLanguageResult} to be returned by the SDK. + */ + private DocumentResultCollection toDocumentResultCollection( + final LanguageResult languageResult) { + + final List detectLanguageResults = new ArrayList<>(); + for (DocumentLanguage documentLanguage : languageResult.getDocuments()) { + DetectedLanguage primaryLanguage = null; + if (documentLanguage.getDetectedLanguages().size() >= 1) { + com.azure.ai.textanalytics.implementation.models.DetectedLanguage detectedLanguageResult = + documentLanguage.getDetectedLanguages().get(0); + primaryLanguage = new DetectedLanguage(detectedLanguageResult.getName(), + detectedLanguageResult.getIso6391Name(), detectedLanguageResult.getScore()); + } + detectLanguageResults.add(new DetectLanguageResult(documentLanguage.getId(), + documentLanguage.getStatistics() == null + ? null : Transforms.toTextDocumentStatistics(documentLanguage.getStatistics()), + null, + primaryLanguage, + documentLanguage.getDetectedLanguages().stream().map(detectedLanguage -> + new DetectedLanguage(detectedLanguage.getName(), detectedLanguage.getIso6391Name(), + detectedLanguage.getScore())).collect(Collectors.toList()))); + } + + for (DocumentError documentError : languageResult.getErrors()) { + com.azure.ai.textanalytics.models.TextAnalyticsError error = + Transforms.toTextAnalyticsError(documentError.getError()); + detectLanguageResults.add( + new DetectLanguageResult(documentError.getId(), null, error, null, null)); + } + + return new DocumentResultCollection<>(detectLanguageResults, languageResult.getModelVersion(), + languageResult.getStatistics() == null ? null + : Transforms.toBatchStatistics(languageResult.getStatistics())); + } + +} diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/ExtractKeyPhraseClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/ExtractKeyPhraseClient.java new file mode 100644 index 000000000000..54224d495301 --- /dev/null +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/ExtractKeyPhraseClient.java @@ -0,0 +1,99 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.ai.textanalytics; + +import com.azure.ai.textanalytics.implementation.TextAnalyticsClientImpl; +import com.azure.ai.textanalytics.implementation.models.DocumentError; +import com.azure.ai.textanalytics.implementation.models.DocumentKeyPhrases; +import com.azure.ai.textanalytics.implementation.models.MultiLanguageBatchInput; +import com.azure.ai.textanalytics.models.DocumentResultCollection; +import com.azure.ai.textanalytics.models.ExtractKeyPhraseResult; +import com.azure.ai.textanalytics.models.TextAnalyticsRequestOptions; +import com.azure.ai.textanalytics.models.TextDocumentInput; +import com.azure.core.http.rest.Response; +import com.azure.core.http.rest.SimpleResponse; +import com.azure.core.util.Context; +import com.azure.core.util.logging.ClientLogger; +import reactor.core.publisher.Mono; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +import static com.azure.ai.textanalytics.Transforms.toTextAnalyticsError; +import static com.azure.ai.textanalytics.Transforms.toMultiLanguageInput; +import static com.azure.ai.textanalytics.Transforms.toTextDocumentStatistics; +import static com.azure.ai.textanalytics.Transforms.toBatchStatistics; +import static com.azure.ai.textanalytics.Transforms.mapByIndex; +import static com.azure.core.util.FluxUtil.monoError; + +class ExtractKeyPhraseClient { + private final ClientLogger logger; + private final TextAnalyticsClientImpl service; + + ExtractKeyPhraseClient(TextAnalyticsClientImpl service, ClientLogger logger) { + this.logger = logger; + this.service = service; + } + + Mono> extractKeyPhrasesWithResponse(String text, String language, + Context context) { + Objects.requireNonNull(text, "'text' cannot be null."); + + return extractBatchKeyPhrasesWithResponse( + Collections.singletonList(new TextDocumentInput("0", text, language)), null, context) + .map(response -> new SimpleResponse<>(response, response.getValue().iterator().next())); + } + + Mono>> extractKeyPhrasesWithResponse( + List textInputs, String language, Context context) { + Objects.requireNonNull(textInputs, "'textInputs' cannot be null."); + + List documentInputs = mapByIndex(textInputs, (index, value) -> + new TextDocumentInput(index, value, language)); + try { + return extractBatchKeyPhrasesWithResponse(documentInputs, null, context); + } catch (RuntimeException ex) { + return monoError(logger, ex); + } + } + + Mono>> extractBatchKeyPhrasesWithResponse( + List textInputs, TextAnalyticsRequestOptions options, Context context) { + Objects.requireNonNull(textInputs, "'textInputs' cannot be null."); + + final MultiLanguageBatchInput batchInput = new MultiLanguageBatchInput() + .setDocuments(toMultiLanguageInput(textInputs)); + return service.keyPhrasesWithRestResponseAsync( + batchInput, + options == null ? null : options.getModelVersion(), + options == null ? null : options.showStatistics(), context) + .doOnSubscribe(ignoredValue -> logger.info("A batch of key phrases input - {}", textInputs.toString())) + .doOnSuccess(response -> logger.info("A batch of key phrases output - {}", response.getValue())) + .doOnError(error -> logger.warning("Failed to key phrases - {}", error)) + .map(response -> new SimpleResponse<>(response, toDocumentResultCollection(response.getValue()))); + } + + private DocumentResultCollection toDocumentResultCollection( + final com.azure.ai.textanalytics.implementation.models.KeyPhraseResult keyPhraseResult) { + List keyPhraseResultList = new ArrayList<>(); + for (DocumentKeyPhrases documentKeyPhrases : keyPhraseResult.getDocuments()) { + keyPhraseResultList.add(new ExtractKeyPhraseResult(documentKeyPhrases.getId(), + documentKeyPhrases.getStatistics() == null ? null + : toTextDocumentStatistics(documentKeyPhrases.getStatistics()), null, + documentKeyPhrases.getKeyPhrases())); + } + + for (DocumentError documentError : keyPhraseResult.getErrors()) { + final com.azure.ai.textanalytics.models.TextAnalyticsError error = + toTextAnalyticsError(documentError.getError()); + keyPhraseResultList.add(new ExtractKeyPhraseResult(documentError.getId(), null, error, null)); + } + + return new DocumentResultCollection<>(keyPhraseResultList, + keyPhraseResult.getModelVersion(), keyPhraseResult.getStatistics() == null ? null + : toBatchStatistics(keyPhraseResult.getStatistics())); + } +} diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeEntityClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeEntityClient.java new file mode 100644 index 000000000000..d3ea6d5bac9a --- /dev/null +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeEntityClient.java @@ -0,0 +1,106 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.ai.textanalytics; + +import com.azure.ai.textanalytics.implementation.TextAnalyticsClientImpl; +import com.azure.ai.textanalytics.implementation.models.DocumentEntities; +import com.azure.ai.textanalytics.implementation.models.DocumentError; +import com.azure.ai.textanalytics.implementation.models.EntitiesResult; +import com.azure.ai.textanalytics.implementation.models.MultiLanguageBatchInput; +import com.azure.ai.textanalytics.models.DetectLanguageResult; +import com.azure.ai.textanalytics.models.DocumentResultCollection; +import com.azure.ai.textanalytics.models.NamedEntity; +import com.azure.ai.textanalytics.models.RecognizeEntitiesResult; +import com.azure.ai.textanalytics.models.TextAnalyticsRequestOptions; +import com.azure.ai.textanalytics.models.TextDocumentInput; +import com.azure.core.http.rest.Response; +import com.azure.core.http.rest.SimpleResponse; +import com.azure.core.util.Context; +import com.azure.core.util.logging.ClientLogger; +import reactor.core.publisher.Mono; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +import static com.azure.ai.textanalytics.Transforms.toTextAnalyticsError; +import static com.azure.ai.textanalytics.Transforms.toTextDocumentStatistics; +import static com.azure.ai.textanalytics.Transforms.toBatchStatistics; +import static com.azure.ai.textanalytics.Transforms.mapByIndex; + +class RecognizeEntityClient { + private final ClientLogger logger; + private final TextAnalyticsClientImpl service; + + RecognizeEntityClient(TextAnalyticsClientImpl service, ClientLogger logger) { + this.logger = logger; + this.service = service; + } + + Mono> recognizeEntitiesWithResponse(String text, String language, + Context context) { + Objects.requireNonNull(text, "'text' cannot be null."); + + return recognizeBatchEntitiesWithResponse( + Collections.singletonList(new TextDocumentInput("0", text, language)), null, context) + .map(response -> new SimpleResponse<>(response, response.getValue().iterator().next())); + } + + Mono>> recognizeEntitiesWithResponse( + List textInputs, String language, Context context) { + Objects.requireNonNull(textInputs, "'textInputs' cannot be null."); + + List documentInputs = mapByIndex(textInputs, (index, value) -> + new TextDocumentInput(index, value, language)); + return recognizeBatchEntitiesWithResponse(documentInputs, null, context); + } + + Mono>> recognizeBatchEntitiesWithResponse( + List textInputs, TextAnalyticsRequestOptions options, Context context) { + Objects.requireNonNull(textInputs, "'textInputs' cannot be null."); + + final MultiLanguageBatchInput batchInput = new MultiLanguageBatchInput() + .setDocuments(Transforms.toMultiLanguageInput(textInputs)); + return service.entitiesRecognitionGeneralWithRestResponseAsync( + batchInput, + options == null ? null : options.getModelVersion(), + options == null ? null : options.showStatistics(), context) + .doOnSubscribe(ignoredValue -> logger.info("A batch of named entities input - {}", textInputs.toString())) + .doOnSuccess(response -> logger.info("A batch of named entities output - {}", response.getValue())) + .doOnError(error -> logger.warning("Failed to named entities - {}", error)) + .map(response -> new SimpleResponse<>(response, toDocumentResultCollection(response.getValue()))); + } + + /** + * Helper method to convert the service response of {@link EntitiesResult} to {@link DocumentResultCollection}. + * + * @param entitiesResult the {@link EntitiesResult} returned by the service. + * + * @return the {@link DocumentResultCollection} of {@link DetectLanguageResult} to be returned by the SDK. + */ + private DocumentResultCollection toDocumentResultCollection( + final EntitiesResult entitiesResult) { + List recognizeEntitiesResults = new ArrayList<>(); + for (DocumentEntities documentEntities : entitiesResult.getDocuments()) { + recognizeEntitiesResults.add(new RecognizeEntitiesResult(documentEntities.getId(), + documentEntities.getStatistics() == null ? null + : toTextDocumentStatistics(documentEntities.getStatistics()), + null, documentEntities.getEntities().stream().map(entity -> + new NamedEntity(entity.getText(), entity.getType(), entity.getSubtype(), entity.getOffset(), + entity.getLength(), entity.getScore())).collect(Collectors.toList()))); + } + + for (DocumentError documentError : entitiesResult.getErrors()) { + final com.azure.ai.textanalytics.models.TextAnalyticsError error = + toTextAnalyticsError(documentError.getError()); + recognizeEntitiesResults.add(new RecognizeEntitiesResult(documentError.getId(), null, error, null)); + } + + return new DocumentResultCollection<>(recognizeEntitiesResults, + entitiesResult.getModelVersion(), entitiesResult.getStatistics() == null ? null + : toBatchStatistics(entitiesResult.getStatistics())); + } +} diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeLinkedEntityClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeLinkedEntityClient.java new file mode 100644 index 000000000000..961255b0b5d5 --- /dev/null +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeLinkedEntityClient.java @@ -0,0 +1,124 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.ai.textanalytics; + +import com.azure.ai.textanalytics.implementation.TextAnalyticsClientImpl; +import com.azure.ai.textanalytics.implementation.models.DocumentError; +import com.azure.ai.textanalytics.implementation.models.DocumentLinkedEntities; +import com.azure.ai.textanalytics.implementation.models.EntityLinkingResult; +import com.azure.ai.textanalytics.implementation.models.LinkedEntity; +import com.azure.ai.textanalytics.implementation.models.MultiLanguageBatchInput; +import com.azure.ai.textanalytics.models.DocumentResultCollection; +import com.azure.ai.textanalytics.models.LinkedEntityMatch; +import com.azure.ai.textanalytics.models.RecognizeLinkedEntitiesResult; +import com.azure.ai.textanalytics.models.TextAnalyticsRequestOptions; +import com.azure.ai.textanalytics.models.TextDocumentInput; +import com.azure.core.http.rest.Response; +import com.azure.core.http.rest.SimpleResponse; +import com.azure.core.util.Context; +import com.azure.core.util.logging.ClientLogger; +import reactor.core.publisher.Mono; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +import static com.azure.ai.textanalytics.Transforms.toTextAnalyticsError; +import static com.azure.ai.textanalytics.Transforms.toMultiLanguageInput; +import static com.azure.ai.textanalytics.Transforms.toTextDocumentStatistics; +import static com.azure.ai.textanalytics.Transforms.toBatchStatistics; +import static com.azure.ai.textanalytics.Transforms.mapByIndex; +import static com.azure.core.util.FluxUtil.monoError; + +class RecognizeLinkedEntityClient { + private final ClientLogger logger; + private final TextAnalyticsClientImpl service; + + RecognizeLinkedEntityClient(TextAnalyticsClientImpl service, ClientLogger logger) { + this.logger = logger; + this.service = service; + } + + Mono> recognizeLinkedEntitiesWithResponse(String text, String language, + Context context) { + Objects.requireNonNull(text, "'text' cannot be null."); + + return recognizeBatchLinkedEntitiesWithResponse( + Collections.singletonList(new TextDocumentInput("0", text, language)), null, context) + .map(response -> new SimpleResponse<>(response, response.getValue().iterator().next())); + } + + Mono>> recognizeLinkedEntitiesWithResponse( + List textInputs, String language, Context context) { + Objects.requireNonNull(textInputs, "'textInputs' cannot be null."); + + List documentInputs = mapByIndex(textInputs, (index, value) -> + new TextDocumentInput(index, value, language)); + try { + return recognizeBatchLinkedEntitiesWithResponse(documentInputs, null, context); + } catch (RuntimeException ex) { + return monoError(logger, ex); + } + } + + Mono>> recognizeBatchLinkedEntitiesWithResponse( + List textInputs, TextAnalyticsRequestOptions options, Context context) { + Objects.requireNonNull(textInputs, "'textInputs' cannot be null."); + + final MultiLanguageBatchInput batchInput = new MultiLanguageBatchInput() + .setDocuments(toMultiLanguageInput(textInputs)); + return service.entitiesLinkingWithRestResponseAsync( + batchInput, + options == null ? null : options.getModelVersion(), + options == null ? null : options.showStatistics(), context) + .doOnSubscribe(ignoredValue -> logger.info("A batch of linked entities input - {}", textInputs.toString())) + .doOnSuccess(response -> logger.info("A batch of linked entities output - {}", response.getValue())) + .doOnError(error -> logger.warning("Failed to linked entities - {}", error)) + .map(response -> new SimpleResponse<>(response, toDocumentResultCollection(response.getValue()))); + } + + + private List mapLinkedEntity(List linkedEntities) { + List linkedEntitiesList = new ArrayList<>(); + for (LinkedEntity linkedEntity : linkedEntities) { + linkedEntitiesList.add(new com.azure.ai.textanalytics.models.LinkedEntity(linkedEntity.getName(), + linkedEntity.getMatches().stream().map(match -> + new LinkedEntityMatch(match.getText(), match.getScore(), match.getLength(), + match.getOffset())).collect(Collectors.toList()), linkedEntity.getLanguage(), + linkedEntity.getId(), linkedEntity.getUrl(), linkedEntity.getDataSource())); + } + return linkedEntitiesList; + } + + /** + * Helper method to convert the service response of {@link EntityLinkingResult} to {@link DocumentResultCollection}. + * + * @param entityLinkingResult the {@link EntityLinkingResult} returned by the service. + * + * @return the {@link DocumentResultCollection} of {@link RecognizeLinkedEntitiesResult} to be returned by the SDK. + */ + private DocumentResultCollection toDocumentResultCollection( + final EntityLinkingResult entityLinkingResult) { + List linkedEntitiesResults = new ArrayList<>(); + for (DocumentLinkedEntities documentLinkedEntities : entityLinkingResult.getDocuments()) { + linkedEntitiesResults.add(new RecognizeLinkedEntitiesResult(documentLinkedEntities.getId(), + documentLinkedEntities.getStatistics() == null ? null + : toTextDocumentStatistics(documentLinkedEntities.getStatistics()), + null, mapLinkedEntity(documentLinkedEntities.getEntities()))); + } + for (DocumentError documentError : entityLinkingResult.getErrors()) { + final com.azure.ai.textanalytics.models.TextAnalyticsError error = + toTextAnalyticsError(documentError.getError()); + linkedEntitiesResults.add(new RecognizeLinkedEntitiesResult(documentError.getId(), null, error, null)); + } + + return new DocumentResultCollection<>(linkedEntitiesResults, + entityLinkingResult.getModelVersion(), entityLinkingResult.getStatistics() == null ? null + : toBatchStatistics(entityLinkingResult.getStatistics())); + } + + +} diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizePiiEntityClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizePiiEntityClient.java new file mode 100644 index 000000000000..70237e665ee2 --- /dev/null +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizePiiEntityClient.java @@ -0,0 +1,110 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.ai.textanalytics; + +import com.azure.ai.textanalytics.implementation.TextAnalyticsClientImpl; +import com.azure.ai.textanalytics.implementation.models.DocumentEntities; +import com.azure.ai.textanalytics.implementation.models.DocumentError; +import com.azure.ai.textanalytics.implementation.models.EntitiesResult; +import com.azure.ai.textanalytics.implementation.models.MultiLanguageBatchInput; +import com.azure.ai.textanalytics.models.DocumentResultCollection; +import com.azure.ai.textanalytics.models.NamedEntity; +import com.azure.ai.textanalytics.models.RecognizePiiEntitiesResult; +import com.azure.ai.textanalytics.models.TextAnalyticsRequestOptions; +import com.azure.ai.textanalytics.models.TextDocumentInput; +import com.azure.core.http.rest.Response; +import com.azure.core.http.rest.SimpleResponse; +import com.azure.core.util.Context; +import com.azure.core.util.logging.ClientLogger; +import reactor.core.publisher.Mono; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +import static com.azure.ai.textanalytics.Transforms.toTextAnalyticsError; +import static com.azure.ai.textanalytics.Transforms.toMultiLanguageInput; +import static com.azure.ai.textanalytics.Transforms.toTextDocumentStatistics; +import static com.azure.ai.textanalytics.Transforms.toBatchStatistics; +import static com.azure.ai.textanalytics.Transforms.mapByIndex; +import static com.azure.core.util.FluxUtil.monoError; + +class RecognizePiiEntityClient { + private final ClientLogger logger; + private final TextAnalyticsClientImpl service; + + RecognizePiiEntityClient(TextAnalyticsClientImpl service, ClientLogger logger) { + this.logger = logger; + this.service = service; + } + + Mono> recognizePiiEntitiesWithResponse(String text, String language, + Context context) { + Objects.requireNonNull(text, "'text' cannot be null."); + + return recognizeBatchPiiEntitiesWithResponse( + Collections.singletonList(new TextDocumentInput("0", text, language)), null, context) + .map(response -> new SimpleResponse<>(response, response.getValue().iterator().next())); + } + + Mono>> recognizePiiEntitiesWithResponse( + List textInputs, String language, Context context) { + Objects.requireNonNull(textInputs, "'textInputs' cannot be null."); + + List documentInputs = mapByIndex(textInputs, (index, value) -> + new TextDocumentInput(index, value, language)); + try { + return recognizeBatchPiiEntitiesWithResponse(documentInputs, null, context); + } catch (RuntimeException ex) { + return monoError(logger, ex); + } + } + + Mono>> recognizeBatchPiiEntitiesWithResponse( + List textInputs, TextAnalyticsRequestOptions options, Context context) { + Objects.requireNonNull(textInputs, "'textInputs' cannot be null."); + final MultiLanguageBatchInput batchInput = new MultiLanguageBatchInput() + .setDocuments(toMultiLanguageInput(textInputs)); + return service.entitiesRecognitionPiiWithRestResponseAsync( + batchInput, + options == null ? null : options.getModelVersion(), + options == null ? null : options.showStatistics(), context) + .doOnSubscribe(ignoredValue -> logger.info("A batch of PII entities input - {}", textInputs.toString())) + .doOnSuccess(response -> logger.info("A batch of PII entities output - {}", response.getValue())) + .doOnError(error -> logger.warning("Failed to PII entities - {}", error)) + .map(response -> new SimpleResponse<>(response, toPiiDocumentResultCollection(response.getValue()))); + } + + /** + * Helper method to convert the service response of {@link EntitiesResult} to {@link DocumentResultCollection}. + * + * @param entitiesResult the {@link EntitiesResult} returned by the service. + * + * @return the {@link DocumentResultCollection} of {@link RecognizePiiEntitiesResult} to be returned by the SDK. + */ + private DocumentResultCollection toPiiDocumentResultCollection( + final EntitiesResult entitiesResult) { + List recognizePiiEntitiesResults = new ArrayList<>(); + for (DocumentEntities documentEntities : entitiesResult.getDocuments()) { + recognizePiiEntitiesResults.add(new RecognizePiiEntitiesResult(documentEntities.getId(), + documentEntities.getStatistics() == null ? null + : toTextDocumentStatistics(documentEntities.getStatistics()), + null, documentEntities.getEntities().stream().map(entity -> + new NamedEntity(entity.getText(), entity.getType(), entity.getSubtype(), entity.getOffset(), + entity.getLength(), entity.getScore())).collect(Collectors.toList()))); + } + + for (DocumentError documentError : entitiesResult.getErrors()) { + final com.azure.ai.textanalytics.models.TextAnalyticsError error = + toTextAnalyticsError(documentError.getError()); + recognizePiiEntitiesResults.add(new RecognizePiiEntitiesResult(documentError.getId(), null, error, null)); + } + + return new DocumentResultCollection<>(recognizePiiEntitiesResults, + entitiesResult.getModelVersion(), entitiesResult.getStatistics() == null ? null + : toBatchStatistics(entitiesResult.getStatistics())); + } +} diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/TextAnalyticsAsyncClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/TextAnalyticsAsyncClient.java index c969f8c0d74c..a5aa29a1b1e7 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/TextAnalyticsAsyncClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/TextAnalyticsAsyncClient.java @@ -4,61 +4,26 @@ package com.azure.ai.textanalytics; import com.azure.ai.textanalytics.implementation.TextAnalyticsClientImpl; -import com.azure.ai.textanalytics.implementation.models.DocumentEntities; -import com.azure.ai.textanalytics.implementation.models.DocumentError; -import com.azure.ai.textanalytics.implementation.models.DocumentKeyPhrases; -import com.azure.ai.textanalytics.implementation.models.DocumentLanguage; -import com.azure.ai.textanalytics.implementation.models.DocumentLinkedEntities; -import com.azure.ai.textanalytics.implementation.models.DocumentSentiment; -import com.azure.ai.textanalytics.implementation.models.DocumentStatistics; -import com.azure.ai.textanalytics.implementation.models.EntitiesResult; -import com.azure.ai.textanalytics.implementation.models.EntityLinkingResult; -import com.azure.ai.textanalytics.implementation.models.LanguageBatchInput; -import com.azure.ai.textanalytics.implementation.models.LanguageInput; -import com.azure.ai.textanalytics.implementation.models.LanguageResult; -import com.azure.ai.textanalytics.implementation.models.LinkedEntity; -import com.azure.ai.textanalytics.implementation.models.MultiLanguageBatchInput; -import com.azure.ai.textanalytics.implementation.models.MultiLanguageInput; -import com.azure.ai.textanalytics.implementation.models.RequestStatistics; -import com.azure.ai.textanalytics.implementation.models.SentimentConfidenceScorePerLabel; -import com.azure.ai.textanalytics.implementation.models.SentimentResponse; -import com.azure.ai.textanalytics.implementation.models.TextAnalyticsError; import com.azure.ai.textanalytics.models.AnalyzeSentimentResult; import com.azure.ai.textanalytics.models.DetectLanguageInput; import com.azure.ai.textanalytics.models.DetectLanguageResult; -import com.azure.ai.textanalytics.models.DetectedLanguage; import com.azure.ai.textanalytics.models.DocumentResultCollection; -import com.azure.ai.textanalytics.models.ErrorCodeValue; import com.azure.ai.textanalytics.models.ExtractKeyPhraseResult; -import com.azure.ai.textanalytics.models.LinkedEntityMatch; -import com.azure.ai.textanalytics.models.NamedEntity; import com.azure.ai.textanalytics.models.RecognizeEntitiesResult; import com.azure.ai.textanalytics.models.RecognizeLinkedEntitiesResult; import com.azure.ai.textanalytics.models.RecognizePiiEntitiesResult; import com.azure.ai.textanalytics.models.TextAnalyticsClientOptions; import com.azure.ai.textanalytics.models.TextAnalyticsRequestOptions; -import com.azure.ai.textanalytics.models.TextDocumentBatchStatistics; import com.azure.ai.textanalytics.models.TextDocumentInput; -import com.azure.ai.textanalytics.models.TextDocumentStatistics; -import com.azure.ai.textanalytics.models.TextSentiment; -import com.azure.ai.textanalytics.models.TextSentimentClass; import com.azure.core.annotation.ReturnType; import com.azure.core.annotation.ServiceClient; import com.azure.core.annotation.ServiceMethod; import com.azure.core.http.rest.Response; -import com.azure.core.http.rest.SimpleResponse; -import com.azure.core.util.Context; import com.azure.core.util.FluxUtil; import com.azure.core.util.logging.ClientLogger; import reactor.core.publisher.Mono; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; -import java.util.Objects; -import java.util.function.BiFunction; -import java.util.stream.Collectors; -import java.util.stream.IntStream; import static com.azure.core.util.FluxUtil.monoError; import static com.azure.core.util.FluxUtil.withContext; @@ -82,6 +47,12 @@ public final class TextAnalyticsAsyncClient { private final TextAnalyticsServiceVersion serviceVersion; private final String defaultCountryHint; private final String defaultLanguage; + final DetectLanguageClient detectLanguageClient; + final AnalyzeSentimentClient analyzeSentimentClient; + final ExtractKeyPhraseClient extractKeyPhraseClient; + final RecognizeEntityClient recognizeEntityClient; + final RecognizePiiEntityClient recognizePiiEntityClient; + final RecognizeLinkedEntityClient recognizeLinkedEntityClient; /** * Create a {@code TextAnalyticsAsyncClient} that sends requests to the Text Analytics services's endpoint. Each @@ -100,6 +71,12 @@ public final class TextAnalyticsAsyncClient { this.serviceVersion = serviceVersion; defaultCountryHint = clientOptions == null ? null : clientOptions.getDefaultCountryHint(); defaultLanguage = clientOptions == null ? null : clientOptions.getDefaultLanguage(); + this.detectLanguageClient = new DetectLanguageClient(service, logger); + this.analyzeSentimentClient = new AnalyzeSentimentClient(service, logger); + this.extractKeyPhraseClient = new ExtractKeyPhraseClient(service, logger); + this.recognizeEntityClient = new RecognizeEntityClient(service, logger); + this.recognizePiiEntityClient = new RecognizePiiEntityClient(service, logger); + this.recognizeLinkedEntityClient = new RecognizeLinkedEntityClient(service, logger); } /** @@ -164,20 +141,12 @@ public Mono detectLanguage(String text) { @ServiceMethod(returns = ReturnType.SINGLE) public Mono> detectLanguageWithResponse(String text, String countryHint) { try { - return withContext(context -> detectLanguageWithResponse(text, countryHint, context)); + return withContext(context -> detectLanguageClient.detectLanguageWithResponse(text, countryHint, context)); } catch (RuntimeException ex) { return monoError(logger, ex); } } - Mono> detectLanguageWithResponse(String text, String countryHint, Context context) { - Objects.requireNonNull(text, "'text' cannot be null."); - List languageInputs = Collections.singletonList(new DetectLanguageInput("0", - text, countryHint)); - return detectBatchLanguagesWithResponse(languageInputs, null, context).map(response -> - new SimpleResponse<>(response, response.getValue().iterator().next())); - } - /** * Returns the detected language for a batch of input. * @@ -213,21 +182,13 @@ public Mono> detectLanguages(List public Mono>> detectLanguagesWithResponse( List textInputs, String countryHint) { try { - return withContext(context -> detectLanguagesWithResponse(textInputs, countryHint, context)); + return withContext(context -> detectLanguageClient.detectLanguagesWithResponse(textInputs, countryHint, + context)); } catch (RuntimeException ex) { return monoError(logger, ex); } } - Mono>> detectLanguagesWithResponse(List textInputs, - String countryHint, Context context) { - Objects.requireNonNull(textInputs, "'textInputs' cannot be null."); - List detectLanguageInputs = mapByIndex(textInputs, (index, value) -> - new DetectLanguageInput(index, value, countryHint)); - - return detectBatchLanguagesWithResponse(detectLanguageInputs, null, context); - } - /** * Returns the detected language for a batch of input. * @@ -265,30 +226,12 @@ public Mono>> detectBatc List textInputs, TextAnalyticsRequestOptions options) { try { return withContext( - context -> detectBatchLanguagesWithResponse(textInputs, options, context)); + context -> detectLanguageClient.detectBatchLanguagesWithResponse(textInputs, options, context)); } catch (RuntimeException ex) { return monoError(logger, ex); } } - Mono>> detectBatchLanguagesWithResponse( - List textInputs, TextAnalyticsRequestOptions options, Context context) { - Objects.requireNonNull(textInputs, "'textInputs' cannot be null."); - - final LanguageBatchInput languageBatchInput = new LanguageBatchInput() - .setDocuments(textInputs.stream().map(detectLanguageInput -> new LanguageInput() - .setId(detectLanguageInput.getId()).setText(detectLanguageInput.getText()) - .setCountryHint(detectLanguageInput.getCountryHint())).collect(Collectors.toList())); - - return service.languagesWithRestResponseAsync( - languageBatchInput, options == null ? null : options.getModelVersion(), - options == null ? null : options.showStatistics(), context) - .doOnSubscribe(ignoredValue -> logger.info("A batch of language input - {}", textInputs.toString())) - .doOnSuccess(response -> logger.info("A batch of detected language output - {}", response.getValue())) - .doOnError(error -> logger.warning("Failed to detected languages - {}", error)) - .map(response -> new SimpleResponse<>(response, toDocumentResultCollection(response.getValue()))); - } - // Named Entity /** * Returns a list of general named entities in the provided text. For a list of supported entity types, check: @@ -327,21 +270,12 @@ public Mono recognizeEntities(String text) { @ServiceMethod(returns = ReturnType.SINGLE) public Mono> recognizeEntitiesWithResponse(String text, String language) { try { - return withContext(context -> recognizeEntitiesWithResponse(text, language, context)); + return withContext(context -> recognizeEntityClient.recognizeEntitiesWithResponse(text, language, context)); } catch (RuntimeException ex) { return monoError(logger, ex); } } - Mono> recognizeEntitiesWithResponse(String text, String language, - Context context) { - Objects.requireNonNull(text, "'text' cannot be null."); - - return recognizeBatchEntitiesWithResponse( - Collections.singletonList(new TextDocumentInput("0", text, language)), null, context) - .map(response -> new SimpleResponse<>(response, response.getValue().iterator().next())); - } - /** * Returns a list of general named entities for the provided list of texts. * @@ -377,21 +311,13 @@ public Mono> recognizeEntities public Mono>> recognizeEntitiesWithResponse( List textInputs, String language) { try { - return withContext(context -> recognizeEntitiesWithResponse(textInputs, language, context)); + return withContext(context -> recognizeEntityClient.recognizeEntitiesWithResponse(textInputs, language, + context)); } catch (RuntimeException ex) { return monoError(logger, ex); } } - Mono>> recognizeEntitiesWithResponse( - List textInputs, String language, Context context) { - Objects.requireNonNull(textInputs, "'textInputs' cannot be null."); - - List documentInputs = mapByIndex(textInputs, (index, value) -> - new TextDocumentInput(index, value, language)); - return recognizeBatchEntitiesWithResponse(documentInputs, null, context); - } - /** * Returns a list of general named entities for the provided list of text inputs. * @@ -428,28 +354,13 @@ public Mono> recognizeBatchEnt public Mono>> recognizeBatchEntitiesWithResponse( List textInputs, TextAnalyticsRequestOptions options) { try { - return withContext(context -> recognizeBatchEntitiesWithResponse(textInputs, options, context)); + return withContext(context -> recognizeEntityClient.recognizeBatchEntitiesWithResponse(textInputs, options, + context)); } catch (RuntimeException ex) { return monoError(logger, ex); } } - Mono>> recognizeBatchEntitiesWithResponse( - List textInputs, TextAnalyticsRequestOptions options, Context context) { - Objects.requireNonNull(textInputs, "'textInputs' cannot be null."); - - final MultiLanguageBatchInput batchInput = new MultiLanguageBatchInput() - .setDocuments(convertToMultiLanguageInput(textInputs)); - return service.entitiesRecognitionGeneralWithRestResponseAsync( - batchInput, - options == null ? null : options.getModelVersion(), - options == null ? null : options.showStatistics(), context) - .doOnSubscribe(ignoredValue -> logger.info("A batch of named entities input - {}", textInputs.toString())) - .doOnSuccess(response -> logger.info("A batch of named entities output - {}", response.getValue())) - .doOnError(error -> logger.warning("Failed to named entities - {}", error)) - .map(response -> new SimpleResponse<>(response, toDocumentResultCollection(response.getValue()))); - } - // PII Entity /** * Returns a list of personal information entities ("SSN", "Bank Account", etc) in the text. For the list of @@ -488,21 +399,13 @@ public Mono recognizePiiEntities(String text) { @ServiceMethod(returns = ReturnType.SINGLE) public Mono> recognizePiiEntitiesWithResponse(String text, String language) { try { - return withContext(context -> recognizePiiEntitiesWithResponse(text, language, context)); + return withContext(context -> recognizePiiEntityClient.recognizePiiEntitiesWithResponse(text, language, + context)); } catch (RuntimeException ex) { return monoError(logger, ex); } } - Mono> recognizePiiEntitiesWithResponse(String text, String language, - Context context) { - Objects.requireNonNull(text, "'text' cannot be null."); - - return recognizeBatchPiiEntitiesWithResponse( - Collections.singletonList(new TextDocumentInput("0", text, language)), null, context) - .map(response -> new SimpleResponse<>(response, response.getValue().iterator().next())); - } - /** * Returns a list of personal information entities ("SSN", "Bank Account", etc) in the list of texts. For the list * of supported entity types, check: . For a list of enabled languages, @@ -543,20 +446,8 @@ public Mono> recognizePiiEn public Mono>> recognizePiiEntitiesWithResponse( List textInputs, String language) { try { - return withContext(context -> recognizePiiEntitiesWithResponse(textInputs, language, context)); - } catch (RuntimeException ex) { - return monoError(logger, ex); - } - } - - Mono>> recognizePiiEntitiesWithResponse( - List textInputs, String language, Context context) { - Objects.requireNonNull(textInputs, "'textInputs' cannot be null."); - - List documentInputs = mapByIndex(textInputs, (index, value) -> - new TextDocumentInput(index, value, language)); - try { - return recognizeBatchPiiEntitiesWithResponse(documentInputs, null, context); + return withContext(context -> recognizePiiEntityClient.recognizePiiEntitiesWithResponse(textInputs, + language, context)); } catch (RuntimeException ex) { return monoError(logger, ex); } @@ -602,27 +493,13 @@ public Mono> recognizeBatch public Mono>> recognizeBatchPiiEntitiesWithResponse( List textInputs, TextAnalyticsRequestOptions options) { try { - return withContext(context -> recognizeBatchPiiEntitiesWithResponse(textInputs, options, context)); + return withContext(context -> recognizePiiEntityClient.recognizeBatchPiiEntitiesWithResponse(textInputs, + options, context)); } catch (RuntimeException ex) { return monoError(logger, ex); } } - Mono>> recognizeBatchPiiEntitiesWithResponse( - List textInputs, TextAnalyticsRequestOptions options, Context context) { - Objects.requireNonNull(textInputs, "'textInputs' cannot be null."); - final MultiLanguageBatchInput batchInput = new MultiLanguageBatchInput() - .setDocuments(convertToMultiLanguageInput(textInputs)); - return service.entitiesRecognitionPiiWithRestResponseAsync( - batchInput, - options == null ? null : options.getModelVersion(), - options == null ? null : options.showStatistics(), context) - .doOnSubscribe(ignoredValue -> logger.info("A batch of PII entities input - {}", textInputs.toString())) - .doOnSuccess(response -> logger.info("A batch of PII entities output - {}", response.getValue())) - .doOnError(error -> logger.warning("Failed to PII entities - {}", error)) - .map(response -> new SimpleResponse<>(response, toPiiDocumentResultCollection(response.getValue()))); - } - // Linked Entity /** * Returns a list of recognized entities with links to a well-known knowledge base for the provided text. See @@ -660,21 +537,13 @@ public Mono recognizeLinkedEntities(String text) public Mono> recognizeLinkedEntitiesWithResponse(String text, String language) { try { - return withContext(context -> recognizeLinkedEntitiesWithResponse(text, language, context)); + return withContext(context -> recognizeLinkedEntityClient.recognizeLinkedEntitiesWithResponse(text, + language, context)); } catch (RuntimeException ex) { return monoError(logger, ex); } } - Mono> recognizeLinkedEntitiesWithResponse(String text, String language, - Context context) { - Objects.requireNonNull(text, "'text' cannot be null."); - - return recognizeBatchLinkedEntitiesWithResponse( - Collections.singletonList(new TextDocumentInput("0", text, language)), null, context) - .map(response -> new SimpleResponse<>(response, response.getValue().iterator().next())); - } - /** * Returns a list of recognized entities with links to a well-known knowledge base for the list of texts. See * for supported languages in Text Analytics API. @@ -714,20 +583,8 @@ public Mono> recognizeLi public Mono>> recognizeLinkedEntitiesWithResponse( List textInputs, String language) { try { - return withContext(context -> recognizeLinkedEntitiesWithResponse(textInputs, language, context)); - } catch (RuntimeException ex) { - return monoError(logger, ex); - } - } - - Mono>> recognizeLinkedEntitiesWithResponse( - List textInputs, String language, Context context) { - Objects.requireNonNull(textInputs, "'textInputs' cannot be null."); - - List documentInputs = mapByIndex(textInputs, (index, value) -> - new TextDocumentInput(index, value, language)); - try { - return recognizeBatchLinkedEntitiesWithResponse(documentInputs, null, context); + return withContext(context -> recognizeLinkedEntityClient.recognizeLinkedEntitiesWithResponse(textInputs, + language, context)); } catch (RuntimeException ex) { return monoError(logger, ex); } @@ -772,29 +629,13 @@ public Mono> recognizeBa recognizeBatchLinkedEntitiesWithResponse(List textInputs, TextAnalyticsRequestOptions options) { try { - return withContext(context -> recognizeBatchLinkedEntitiesWithResponse(textInputs, options, context)); + return withContext(context -> recognizeLinkedEntityClient.recognizeBatchLinkedEntitiesWithResponse( + textInputs, options, context)); } catch (RuntimeException ex) { return monoError(logger, ex); } } - Mono>> recognizeBatchLinkedEntitiesWithResponse( - List textInputs, TextAnalyticsRequestOptions options, Context context) { - Objects.requireNonNull(textInputs, "'textInputs' cannot be null."); - - final MultiLanguageBatchInput batchInput = new MultiLanguageBatchInput() - .setDocuments(convertToMultiLanguageInput(textInputs)); - return service.entitiesLinkingWithRestResponseAsync( - batchInput, - options == null ? null : options.getModelVersion(), - options == null ? null : options.showStatistics(), context) - .doOnSubscribe(ignoredValue -> logger.info("A batch of linked entities input - {}", textInputs.toString())) - .doOnSuccess(response -> logger.info("A batch of linked entities output - {}", response.getValue())) - .doOnError(error -> logger.warning("Failed to linked entities - {}", error)) - .map(response -> new SimpleResponse<>(response, toDocumentResultCollection(response.getValue()))); - } - - // Key Phrases /** * Returns a list of strings denoting the key phrases in the input text. @@ -830,21 +671,13 @@ public Mono extractKeyPhrases(String text) { @ServiceMethod(returns = ReturnType.SINGLE) public Mono> extractKeyPhrasesWithResponse(String text, String language) { try { - return withContext(context -> extractKeyPhrasesWithResponse(text, language, context)); + return withContext(context -> extractKeyPhraseClient.extractKeyPhrasesWithResponse(text, language, + context)); } catch (RuntimeException ex) { return monoError(logger, ex); } } - Mono> extractKeyPhrasesWithResponse(String text, String language, - Context context) { - Objects.requireNonNull(text, "'text' cannot be null."); - - return extractBatchKeyPhrasesWithResponse( - Collections.singletonList(new TextDocumentInput("0", text, language)), null, context) - .map(response -> new SimpleResponse<>(response, response.getValue().iterator().next())); - } - /** * Returns a list of strings denoting the key phrases in the input text. * @@ -881,20 +714,8 @@ public Mono> extractKeyPhrases( public Mono>> extractKeyPhrasesWithResponse( List textInputs, String language) { try { - return withContext(context -> extractKeyPhrasesWithResponse(textInputs, language, context)); - } catch (RuntimeException ex) { - return monoError(logger, ex); - } - } - - Mono>> extractKeyPhrasesWithResponse( - List textInputs, String language, Context context) { - Objects.requireNonNull(textInputs, "'textInputs' cannot be null."); - - List documentInputs = mapByIndex(textInputs, (index, value) -> - new TextDocumentInput(index, value, language)); - try { - return extractBatchKeyPhrasesWithResponse(documentInputs, null, context); + return withContext(context -> extractKeyPhraseClient.extractKeyPhrasesWithResponse(textInputs, + language, context)); } catch (RuntimeException ex) { return monoError(logger, ex); } @@ -937,48 +758,13 @@ public Mono> extractBatchKeyPhr public Mono>> extractBatchKeyPhrasesWithResponse( List textInputs, TextAnalyticsRequestOptions options) { try { - return withContext(context -> extractBatchKeyPhrasesWithResponse(textInputs, options, context)); + return withContext(context -> extractKeyPhraseClient.extractBatchKeyPhrasesWithResponse(textInputs, options, + context)); } catch (RuntimeException ex) { return monoError(logger, ex); } } - Mono>> extractBatchKeyPhrasesWithResponse( - List textInputs, TextAnalyticsRequestOptions options, Context context) { - Objects.requireNonNull(textInputs, "'textInputs' cannot be null."); - - final MultiLanguageBatchInput batchInput = new MultiLanguageBatchInput() - .setDocuments(convertToMultiLanguageInput(textInputs)); - return service.keyPhrasesWithRestResponseAsync( - batchInput, - options == null ? null : options.getModelVersion(), - options == null ? null : options.showStatistics(), context) - .doOnSubscribe(ignoredValue -> logger.info("A batch of key phrases input - {}", textInputs.toString())) - .doOnSuccess(response -> logger.info("A batch of key phrases output - {}", response.getValue())) - .doOnError(error -> logger.warning("Failed to key phrases - {}", error)) - .map(response -> new SimpleResponse<>(response, toDocumentResultCollection(response.getValue()))); - } - - private DocumentResultCollection toDocumentResultCollection( - final com.azure.ai.textanalytics.implementation.models.KeyPhraseResult keyPhraseResult) { - List keyPhraseResultList = new ArrayList<>(); - for (DocumentKeyPhrases documentKeyPhrases : keyPhraseResult.getDocuments()) { - keyPhraseResultList.add(new ExtractKeyPhraseResult(documentKeyPhrases.getId(), - documentKeyPhrases.getStatistics() == null ? null - : convertToTextDocumentStatistics(documentKeyPhrases.getStatistics()), null, - documentKeyPhrases.getKeyPhrases())); - } - - for (DocumentError documentError : keyPhraseResult.getErrors()) { - final com.azure.ai.textanalytics.models.TextAnalyticsError error = convertToError(documentError.getError()); - keyPhraseResultList.add(new ExtractKeyPhraseResult(documentError.getId(), null, error, null)); - } - - return new DocumentResultCollection<>(keyPhraseResultList, - keyPhraseResult.getModelVersion(), keyPhraseResult.getStatistics() == null ? null - : mapBatchStatistics(keyPhraseResult.getStatistics())); - } - // Sentiment /** * Returns a sentiment prediction, as well as sentiment scores for each sentiment class (Positive, Negative, and @@ -1015,20 +801,12 @@ public Mono analyzeSentiment(String text) { @ServiceMethod(returns = ReturnType.SINGLE) public Mono> analyzeSentimentWithResponse(String text, String language) { try { - return withContext(context -> analyzeSentimentWithResponse(text, language, context)); + return withContext(context -> analyzeSentimentClient.analyzeSentimentWithResponse(text, language, context)); } catch (RuntimeException ex) { return monoError(logger, ex); } } - Mono> analyzeSentimentWithResponse(String text, String language, Context context) { - Objects.requireNonNull(text, "'text' cannot be null."); - - return analyzeBatchSentimentWithResponse( - Collections.singletonList(new TextDocumentInput("0", text, language)), null, context) - .map(response -> new SimpleResponse<>(response, response.getValue().iterator().next())); - } - /** * Returns a sentiment prediction, as well as sentiment scores for each sentiment class (Positive, Negative, and * Neutral) for the document and each sentence within it. @@ -1066,21 +844,13 @@ public Mono> analyzeSentiment(L public Mono>> analyzeSentimentWithResponse( List textInputs, String language) { try { - return withContext(context -> analyzeSentimentWithResponse(textInputs, language, context)); + return withContext(context -> analyzeSentimentClient.analyzeSentimentWithResponse(textInputs, language, + context)); } catch (RuntimeException ex) { return monoError(logger, ex); } } - Mono>> analyzeSentimentWithResponse( - List textInputs, String language, Context context) { - Objects.requireNonNull(textInputs, "'textInputs' cannot be null."); - - List documentInputs = mapByIndex(textInputs, (index, value) -> - new TextDocumentInput(index, value, language)); - return analyzeBatchSentimentWithResponse(documentInputs, null, context); - } - /** * Returns a sentiment prediction, as well as sentiment scores for each sentiment class (Positive, Negative, and * Neutral) for the document and each sentence within it. @@ -1119,267 +889,10 @@ public Mono> analyzeBatchSentim public Mono>> analyzeBatchSentimentWithResponse( List textInputs, TextAnalyticsRequestOptions options) { try { - return withContext(context -> analyzeBatchSentimentWithResponse(textInputs, options, context)); + return withContext(context -> analyzeSentimentClient.analyzeBatchSentimentWithResponse(textInputs, + options, context)); } catch (RuntimeException ex) { return monoError(logger, ex); } } - - Mono>> analyzeBatchSentimentWithResponse( - List textInputs, TextAnalyticsRequestOptions options, Context context) { - Objects.requireNonNull(textInputs, "'textInputs' cannot be null."); - - final MultiLanguageBatchInput batchInput = new MultiLanguageBatchInput() - .setDocuments(convertToMultiLanguageInput(textInputs)); - return service.sentimentWithRestResponseAsync( - batchInput, - options == null ? null : options.getModelVersion(), - options == null ? null : options.showStatistics(), context) - .doOnSubscribe(ignoredValue -> logger.info("A batch of text sentiment input - {}", textInputs.toString())) - .doOnSuccess(response -> logger.info("A batch of text sentiment output - {}", response)) - .doOnError(error -> logger.warning("Failed to text sentiment - {}", error)) - .map(response -> new SimpleResponse<>(response, toDocumentResultCollection(response.getValue()))); - } - - private List convertToMultiLanguageInput(List textInputs) { - List multiLanguageInputs = new ArrayList<>(); - for (TextDocumentInput textDocumentInput : textInputs) { - multiLanguageInputs.add(new MultiLanguageInput().setId(textDocumentInput.getId()) - .setText(textDocumentInput.getText()).setLanguage(textDocumentInput.getLanguage())); - } - return multiLanguageInputs; - } - - /** - * Helper method to convert the service response of {@link SentimentResponse} to {@link DocumentResultCollection}. - * - * @param sentimentResponse the {@link SentimentResponse} returned by the service. - * - * @return the {@link DocumentResultCollection} of {@link AnalyzeSentimentResult} to be returned by the SDK. - */ - private DocumentResultCollection toDocumentResultCollection( - final SentimentResponse sentimentResponse) { - List analyzeSentimentResults = new ArrayList<>(); - for (DocumentSentiment documentSentiment : sentimentResponse.getDocuments()) { - analyzeSentimentResults.add(convertToTextSentimentResult(documentSentiment)); - } - for (DocumentError documentError : sentimentResponse.getErrors()) { - final com.azure.ai.textanalytics.models.TextAnalyticsError error = convertToError(documentError.getError()); - analyzeSentimentResults.add(new AnalyzeSentimentResult(documentError.getId(), null, error, null, - null)); - } - return new DocumentResultCollection<>(analyzeSentimentResults, - sentimentResponse.getModelVersion(), sentimentResponse.getStatistics() == null ? null - : mapBatchStatistics(sentimentResponse.getStatistics())); - } - - private AnalyzeSentimentResult convertToTextSentimentResult(final DocumentSentiment documentSentiment) { - // Document text sentiment - final TextSentimentClass documentSentimentClass = TextSentimentClass.fromString(documentSentiment. - getSentiment().toString()); - if (documentSentimentClass == null) { - // Not throw exception for an invalid Sentiment type because we should not skip processing the - // other response. It is a service issue. - logger.logExceptionAsWarning( - new RuntimeException(String.format("'%s' is not valid text sentiment.", - documentSentiment.getSentiment()))); - } - final SentimentConfidenceScorePerLabel confidenceScorePerLabel = documentSentiment.getDocumentScores(); - - // Sentence text sentiment - final List sentenceSentimentTexts = documentSentiment.getSentences().stream() - .map(sentenceSentiment -> { - TextSentimentClass sentimentClass = TextSentimentClass.fromString(sentenceSentiment - .getSentiment().toString()); - if (sentimentClass == null) { - // Not throw exception for an invalid Sentiment type because we should not skip processing the - // other response. It is a service issue. - logger.logExceptionAsWarning( - new RuntimeException(String.format("'%s' is not valid text sentiment.", - sentenceSentiment.getSentiment()))); - } - SentimentConfidenceScorePerLabel confidenceScorePerSentence = sentenceSentiment.getSentenceScores(); - - return new TextSentiment(sentimentClass, confidenceScorePerSentence.getNegative(), - confidenceScorePerSentence.getNeutral(), confidenceScorePerSentence.getPositive(), - sentenceSentiment.getLength(), sentenceSentiment.getOffset()); - - }).collect(Collectors.toList()); - - return new AnalyzeSentimentResult(documentSentiment.getId(), - documentSentiment.getStatistics() == null ? null - : convertToTextDocumentStatistics(documentSentiment.getStatistics()), null, - new TextSentiment(documentSentimentClass, confidenceScorePerLabel.getNegative(), - confidenceScorePerLabel.getNeutral(), confidenceScorePerLabel.getPositive(), - sentenceSentimentTexts.stream().mapToInt(TextSentiment::getLength).sum(), 0), - sentenceSentimentTexts); - } - - /** - * Helper method to convert the service response of {@link LanguageResult} to {@link DocumentResultCollection}. - * - * @param languageResult the {@link LanguageResult} returned by the service. - * - * @return the {@link DocumentResultCollection} of {@link DetectLanguageResult} to be returned by the SDK. - */ - private DocumentResultCollection toDocumentResultCollection( - final LanguageResult languageResult) { - - final List detectLanguageResults = new ArrayList<>(); - for (DocumentLanguage documentLanguage : languageResult.getDocuments()) { - DetectedLanguage primaryLanguage = null; - if (documentLanguage.getDetectedLanguages().size() >= 1) { - com.azure.ai.textanalytics.implementation.models.DetectedLanguage detectedLanguageResult = - documentLanguage.getDetectedLanguages().get(0); - primaryLanguage = new DetectedLanguage(detectedLanguageResult.getName(), - detectedLanguageResult.getIso6391Name(), detectedLanguageResult.getScore()); - } - detectLanguageResults.add(new DetectLanguageResult(documentLanguage.getId(), - documentLanguage.getStatistics() == null - ? null : convertToTextDocumentStatistics(documentLanguage.getStatistics()), - null, - primaryLanguage, - documentLanguage.getDetectedLanguages().stream().map(detectedLanguage -> - new DetectedLanguage(detectedLanguage.getName(), detectedLanguage.getIso6391Name(), - detectedLanguage.getScore())).collect(Collectors.toList()))); - } - - for (DocumentError documentError : languageResult.getErrors()) { - com.azure.ai.textanalytics.models.TextAnalyticsError error = convertToError(documentError.getError()); - detectLanguageResults.add( - new DetectLanguageResult(documentError.getId(), null, error, null, null)); - } - - return new DocumentResultCollection<>(detectLanguageResults, languageResult.getModelVersion(), - languageResult.getStatistics() == null ? null : mapBatchStatistics(languageResult.getStatistics())); - } - - /** - * Helper method to convert the service response of {@link EntitiesResult} to {@link DocumentResultCollection}. - * - * @param entitiesResult the {@link EntitiesResult} returned by the service. - * - * @return the {@link DocumentResultCollection} of {@link DetectLanguageResult} to be returned by the SDK. - */ - private DocumentResultCollection toDocumentResultCollection( - final EntitiesResult entitiesResult) { - List recognizeEntitiesResults = new ArrayList<>(); - for (DocumentEntities documentEntities : entitiesResult.getDocuments()) { - recognizeEntitiesResults.add(new RecognizeEntitiesResult(documentEntities.getId(), - documentEntities.getStatistics() == null ? null - : convertToTextDocumentStatistics(documentEntities.getStatistics()), - null, documentEntities.getEntities().stream().map(entity -> - new NamedEntity(entity.getText(), entity.getType(), entity.getSubtype(), entity.getOffset(), - entity.getLength(), entity.getScore())).collect(Collectors.toList()))); - } - - for (DocumentError documentError : entitiesResult.getErrors()) { - final com.azure.ai.textanalytics.models.TextAnalyticsError error = convertToError(documentError.getError()); - recognizeEntitiesResults.add(new RecognizeEntitiesResult(documentError.getId(), null, error, null)); - } - - return new DocumentResultCollection<>(recognizeEntitiesResults, - entitiesResult.getModelVersion(), entitiesResult.getStatistics() == null ? null - : mapBatchStatistics(entitiesResult.getStatistics())); - } - - /** - * Helper method to convert the service response of {@link EntitiesResult} to {@link DocumentResultCollection}. - * - * @param entitiesResult the {@link EntitiesResult} returned by the service. - * - * @return the {@link DocumentResultCollection} of {@link RecognizePiiEntitiesResult} to be returned by the SDK. - */ - private DocumentResultCollection toPiiDocumentResultCollection( - final EntitiesResult entitiesResult) { - List recognizePiiEntitiesResults = new ArrayList<>(); - for (DocumentEntities documentEntities : entitiesResult.getDocuments()) { - recognizePiiEntitiesResults.add(new RecognizePiiEntitiesResult(documentEntities.getId(), - documentEntities.getStatistics() == null ? null - : convertToTextDocumentStatistics(documentEntities.getStatistics()), - null, documentEntities.getEntities().stream().map(entity -> - new NamedEntity(entity.getText(), entity.getType(), entity.getSubtype(), entity.getOffset(), - entity.getLength(), entity.getScore())).collect(Collectors.toList()))); - } - - for (DocumentError documentError : entitiesResult.getErrors()) { - final com.azure.ai.textanalytics.models.TextAnalyticsError error = convertToError(documentError.getError()); - recognizePiiEntitiesResults.add(new RecognizePiiEntitiesResult(documentError.getId(), null, error, null)); - } - - return new DocumentResultCollection<>(recognizePiiEntitiesResults, - entitiesResult.getModelVersion(), entitiesResult.getStatistics() == null ? null - : mapBatchStatistics(entitiesResult.getStatistics())); - } - - /** - * Helper method to convert the service response of {@link EntityLinkingResult} to {@link DocumentResultCollection}. - * - * @param entityLinkingResult the {@link EntityLinkingResult} returned by the service. - * - * @return the {@link DocumentResultCollection} of {@link RecognizeLinkedEntitiesResult} to be returned by the SDK. - */ - private DocumentResultCollection toDocumentResultCollection( - final EntityLinkingResult entityLinkingResult) { - List linkedEntitiesResults = new ArrayList<>(); - for (DocumentLinkedEntities documentLinkedEntities : entityLinkingResult.getDocuments()) { - linkedEntitiesResults.add(new RecognizeLinkedEntitiesResult(documentLinkedEntities.getId(), - documentLinkedEntities.getStatistics() == null ? null - : convertToTextDocumentStatistics(documentLinkedEntities.getStatistics()), - null, mapLinkedEntity(documentLinkedEntities.getEntities()))); - } - for (DocumentError documentError : entityLinkingResult.getErrors()) { - final com.azure.ai.textanalytics.models.TextAnalyticsError error = convertToError(documentError.getError()); - linkedEntitiesResults.add(new RecognizeLinkedEntitiesResult(documentError.getId(), null, error, null)); - } - - return new DocumentResultCollection<>(linkedEntitiesResults, - entityLinkingResult.getModelVersion(), entityLinkingResult.getStatistics() == null ? null - : mapBatchStatistics(entityLinkingResult.getStatistics())); - } - - private static List mapByIndex(List textInputs, BiFunction mappingFunction) { - return IntStream.range(0, textInputs.size()) - .mapToObj(index -> mappingFunction.apply(String.valueOf(index), textInputs.get(index))) - .collect(Collectors.toList()); - } - - private TextDocumentStatistics convertToTextDocumentStatistics(DocumentStatistics statistics) { - return new TextDocumentStatistics(statistics.getCharactersCount(), statistics.getTransactionsCount()); - } - - private TextDocumentBatchStatistics mapBatchStatistics(RequestStatistics statistics) { - return new TextDocumentBatchStatistics(statistics.getDocumentsCount(), statistics.getErroneousDocumentsCount(), - statistics.getValidDocumentsCount(), statistics.getTransactionsCount()); - } - - private List mapLinkedEntity(List linkedEntities) { - List linkedEntitiesList = new ArrayList<>(); - for (LinkedEntity linkedEntity : linkedEntities) { - linkedEntitiesList.add(new com.azure.ai.textanalytics.models.LinkedEntity(linkedEntity.getName(), - linkedEntity.getMatches().stream().map(match -> - new LinkedEntityMatch(match.getText(), match.getScore(), match.getLength(), - match.getOffset())).collect(Collectors.toList()), linkedEntity.getLanguage(), - linkedEntity.getId(), linkedEntity.getUrl(), linkedEntity.getDataSource())); - } - return linkedEntitiesList; - } - - private com.azure.ai.textanalytics.models.TextAnalyticsError convertToError(TextAnalyticsError textAnalyticsError) { - return new com.azure.ai.textanalytics.models.TextAnalyticsError( - ErrorCodeValue.fromString(textAnalyticsError.getCode().toString()), textAnalyticsError.getMessage(), - textAnalyticsError.getTarget(), textAnalyticsError.getDetails() == null ? null - : setErrors(textAnalyticsError.getDetails())); - } - - private List setErrors(List details) { - List detailsList = new ArrayList<>(); - for (TextAnalyticsError error : details) { - detailsList.add(new com.azure.ai.textanalytics.models.TextAnalyticsError( - ErrorCodeValue.fromString(error.getCode().toString()), - error.getMessage(), - error.getTarget(), error.getDetails() == null ? null : setErrors(error.getDetails()))); - } - return detailsList; - } } diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/TextAnalyticsClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/TextAnalyticsClient.java index a549176746e1..26ab90c15d14 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/TextAnalyticsClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/TextAnalyticsClient.java @@ -3,16 +3,16 @@ package com.azure.ai.textanalytics; +import com.azure.ai.textanalytics.models.AnalyzeSentimentResult; import com.azure.ai.textanalytics.models.DetectLanguageInput; import com.azure.ai.textanalytics.models.DetectLanguageResult; import com.azure.ai.textanalytics.models.DocumentResultCollection; import com.azure.ai.textanalytics.models.ExtractKeyPhraseResult; -import com.azure.ai.textanalytics.models.RecognizeLinkedEntitiesResult; import com.azure.ai.textanalytics.models.RecognizeEntitiesResult; +import com.azure.ai.textanalytics.models.RecognizeLinkedEntitiesResult; import com.azure.ai.textanalytics.models.RecognizePiiEntitiesResult; import com.azure.ai.textanalytics.models.TextAnalyticsRequestOptions; import com.azure.ai.textanalytics.models.TextDocumentInput; -import com.azure.ai.textanalytics.models.AnalyzeSentimentResult; import com.azure.core.annotation.ReturnType; import com.azure.core.annotation.ServiceClient; import com.azure.core.annotation.ServiceMethod; @@ -36,7 +36,6 @@ @ServiceClient(builder = TextAnalyticsClientBuilder.class) public final class TextAnalyticsClient { private final TextAnalyticsAsyncClient client; - /** * Create a {@code TextAnalyticsClient client} that sends requests to the Text Analytics service's endpoint. * Each service call goes through the {@link TextAnalyticsClientBuilder#pipeline http pipeline}. @@ -90,7 +89,7 @@ public DetectLanguageResult detectLanguage(String text, String countryHint) { */ @ServiceMethod(returns = ReturnType.SINGLE) public Response detectLanguageWithResponse(String text, String countryHint, Context context) { - return client.detectLanguageWithResponse(text, countryHint, context).block(); + return client.detectLanguageClient.detectLanguageWithResponse(text, countryHint, context).block(); } /** @@ -122,7 +121,7 @@ public DocumentResultCollection detectLanguages(List> detectLanguagesWithResponse( List textInputs, String countryHint, Context context) { - return client.detectLanguagesWithResponse(textInputs, countryHint, context).block(); + return client.detectLanguageClient.detectLanguagesWithResponse(textInputs, countryHint, context).block(); } /** @@ -153,11 +152,10 @@ public DocumentResultCollection detectBatchLanguages(List< @ServiceMethod(returns = ReturnType.SINGLE) public Response> detectBatchLanguagesWithResponse( List textInputs, TextAnalyticsRequestOptions options, Context context) { - return client.detectBatchLanguagesWithResponse(textInputs, options, context).block(); + return client.detectLanguageClient.detectBatchLanguagesWithResponse(textInputs, options, context).block(); } // Named Entity - /** * Returns a list of general named entities in the provided text. * For a list of supported entity types, check: @@ -187,7 +185,7 @@ public RecognizeEntitiesResult recognizeEntities(String text) { @ServiceMethod(returns = ReturnType.SINGLE) public Response recognizeEntitiesWithResponse( String text, String language, Context context) { - return client.recognizeEntitiesWithResponse(text, language, context).block(); + return client.recognizeEntityClient.recognizeEntitiesWithResponse(text, language, context).block(); } /** @@ -218,7 +216,7 @@ public DocumentResultCollection recognizeEntities(List< @ServiceMethod(returns = ReturnType.SINGLE) public Response> recognizeEntitiesWithResponse( List textInputs, String language, Context context) { - return client.recognizeEntitiesWithResponse(textInputs, language, context).block(); + return client.recognizeEntityClient.recognizeEntitiesWithResponse(textInputs, language, context).block(); } /** @@ -250,7 +248,7 @@ public DocumentResultCollection recognizeBatchEntities( @ServiceMethod(returns = ReturnType.SINGLE) public Response> recognizeBatchEntitiesWithResponse( List textInputs, TextAnalyticsRequestOptions options, Context context) { - return client.recognizeBatchEntitiesWithResponse(textInputs, options, context).block(); + return client.recognizeEntityClient.recognizeBatchEntitiesWithResponse(textInputs, options, context).block(); } // PII Entities @@ -286,7 +284,7 @@ public RecognizePiiEntitiesResult recognizePiiEntities(String text) { @ServiceMethod(returns = ReturnType.SINGLE) public Response recognizePiiEntitiesWithResponse(String text, String language, Context context) { - return client.recognizePiiEntitiesWithResponse(text, language, context).block(); + return client.recognizePiiEntityClient.recognizePiiEntitiesWithResponse(text, language, context).block(); } /** @@ -322,7 +320,7 @@ public DocumentResultCollection recognizePiiEntities @ServiceMethod(returns = ReturnType.SINGLE) public Response> recognizePiiEntitiesWithResponse( List textInputs, String language, Context context) { - return client.recognizePiiEntitiesWithResponse(textInputs, language, context).block(); + return client.recognizePiiEntityClient.recognizePiiEntitiesWithResponse(textInputs, language, context).block(); } /** @@ -358,7 +356,8 @@ public DocumentResultCollection recognizeBatchPiiEnt @ServiceMethod(returns = ReturnType.SINGLE) public Response> recognizeBatchPiiEntitiesWithResponse( List textInputs, TextAnalyticsRequestOptions options, Context context) { - return client.recognizeBatchPiiEntitiesWithResponse(textInputs, options, context).block(); + return client.recognizePiiEntityClient.recognizeBatchPiiEntitiesWithResponse(textInputs, options, + context).block(); } // Linked Entities @@ -392,7 +391,7 @@ public RecognizeLinkedEntitiesResult recognizeLinkedEntities(String text) { @ServiceMethod(returns = ReturnType.SINGLE) public Response recognizeLinkedEntitiesWithResponse(String text, String language, Context context) { - return client.recognizeLinkedEntitiesWithResponse(text, language, context).block(); + return client.recognizeLinkedEntityClient.recognizeLinkedEntitiesWithResponse(text, language, context).block(); } /** @@ -426,7 +425,8 @@ public DocumentResultCollection recognizeLinkedEn @ServiceMethod(returns = ReturnType.SINGLE) public Response> recognizeLinkedEntitiesWithResponse( List textInputs, String language, Context context) { - return client.recognizeLinkedEntitiesWithResponse(textInputs, language, context).block(); + return client.recognizeLinkedEntityClient.recognizeLinkedEntitiesWithResponse(textInputs, language, + context).block(); } /** @@ -460,11 +460,11 @@ public DocumentResultCollection recognizeBatchLin @ServiceMethod(returns = ReturnType.SINGLE) public Response> recognizeBatchLinkedEntitiesWithResponse( List textInputs, TextAnalyticsRequestOptions options, Context context) { - return client.recognizeBatchLinkedEntitiesWithResponse(textInputs, options, context).block(); + return client.recognizeLinkedEntityClient.recognizeBatchLinkedEntitiesWithResponse(textInputs, options, + context).block(); } // Key Phrase - /** * Returns a list of strings denoting the key phrases in the input text. * @@ -494,7 +494,7 @@ public ExtractKeyPhraseResult extractKeyPhrases(String text) { @ServiceMethod(returns = ReturnType.SINGLE) public Response extractKeyPhrasesWithResponse(String text, String language, Context context) { - return client.extractKeyPhrasesWithResponse(text, language, context).block(); + return client.extractKeyPhraseClient.extractKeyPhrasesWithResponse(text, language, context).block(); } /** @@ -526,7 +526,7 @@ public DocumentResultCollection extractKeyPhrases(List> extractKeyPhrasesWithResponse( List textInputs, String language, Context context) { - return client.extractKeyPhrasesWithResponse(textInputs, language, context).block(); + return client.extractKeyPhraseClient.extractKeyPhrasesWithResponse(textInputs, language, context).block(); } /** @@ -558,7 +558,7 @@ public DocumentResultCollection extractBatchKeyPhrases(L @ServiceMethod(returns = ReturnType.SINGLE) public Response> extractBatchKeyPhrasesWithResponse( List textInputs, TextAnalyticsRequestOptions options, Context context) { - return client.extractBatchKeyPhrasesWithResponse(textInputs, options, context).block(); + return client.extractKeyPhraseClient.extractBatchKeyPhrasesWithResponse(textInputs, options, context).block(); } // Sentiment @@ -591,7 +591,7 @@ public AnalyzeSentimentResult analyzeSentiment(String text) { @ServiceMethod(returns = ReturnType.SINGLE) public Response analyzeBatchSentimentWithResponse( String text, String language, Context context) { - return client.analyzeSentimentWithResponse(text, language, context).block(); + return client.analyzeSentimentClient.analyzeSentimentWithResponse(text, language, context).block(); } /** @@ -625,7 +625,7 @@ public DocumentResultCollection analyzeSentiment(List> analyzeSentimentWithResponse( List textInputs, String language, Context context) { - return client.analyzeSentimentWithResponse(textInputs, language, context).block(); + return client.analyzeSentimentClient.analyzeSentimentWithResponse(textInputs, language, context).block(); } /** @@ -658,6 +658,6 @@ public DocumentResultCollection analyzeBatchSentiment(Li @ServiceMethod(returns = ReturnType.SINGLE) public Response> analyzeBatchSentimentWithResponse( List textInputs, TextAnalyticsRequestOptions options, Context context) { - return client.analyzeBatchSentimentWithResponse(textInputs, options, context).block(); + return client.analyzeSentimentClient.analyzeBatchSentimentWithResponse(textInputs, options, context).block(); } } diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/Transforms.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/Transforms.java new file mode 100644 index 000000000000..a8f7ee2817a5 --- /dev/null +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/Transforms.java @@ -0,0 +1,65 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.ai.textanalytics; + +import com.azure.ai.textanalytics.implementation.models.DocumentStatistics; +import com.azure.ai.textanalytics.implementation.models.MultiLanguageInput; +import com.azure.ai.textanalytics.implementation.models.RequestStatistics; +import com.azure.ai.textanalytics.implementation.models.TextAnalyticsError; +import com.azure.ai.textanalytics.models.ErrorCodeValue; +import com.azure.ai.textanalytics.models.TextDocumentBatchStatistics; +import com.azure.ai.textanalytics.models.TextDocumentInput; +import com.azure.ai.textanalytics.models.TextDocumentStatistics; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiFunction; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +class Transforms { + static List mapByIndex(List textInputs, BiFunction mappingFunction) { + return IntStream.range(0, textInputs.size()) + .mapToObj(index -> mappingFunction.apply(String.valueOf(index), textInputs.get(index))) + .collect(Collectors.toList()); + } + + static TextDocumentStatistics toTextDocumentStatistics(DocumentStatistics statistics) { + return new TextDocumentStatistics(statistics.getCharactersCount(), statistics.getTransactionsCount()); + } + + static TextDocumentBatchStatistics toBatchStatistics(RequestStatistics statistics) { + return new TextDocumentBatchStatistics(statistics.getDocumentsCount(), statistics.getErroneousDocumentsCount(), + statistics.getValidDocumentsCount(), statistics.getTransactionsCount()); + } + + static com.azure.ai.textanalytics.models.TextAnalyticsError toTextAnalyticsError( + TextAnalyticsError textAnalyticsError) { + return new com.azure.ai.textanalytics.models.TextAnalyticsError( + ErrorCodeValue.fromString(textAnalyticsError.getCode().toString()), textAnalyticsError.getMessage(), + textAnalyticsError.getTarget(), textAnalyticsError.getDetails() == null ? null + : setErrors(textAnalyticsError.getDetails())); + } + + static List toMultiLanguageInput(List textInputs) { + List multiLanguageInputs = new ArrayList<>(); + for (TextDocumentInput textDocumentInput : textInputs) { + multiLanguageInputs.add(new MultiLanguageInput().setId(textDocumentInput.getId()) + .setText(textDocumentInput.getText()).setLanguage(textDocumentInput.getLanguage())); + } + return multiLanguageInputs; + } + + private static List setErrors( + List details) { + List detailsList = new ArrayList<>(); + for (TextAnalyticsError error : details) { + detailsList.add(new com.azure.ai.textanalytics.models.TextAnalyticsError( + ErrorCodeValue.fromString(error.getCode().toString()), + error.getMessage(), + error.getTarget(), error.getDetails() == null ? null : setErrors(error.getDetails()))); + } + return detailsList; + } +} diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/test/java/com/azure/ai/textanalytics/TextAnalyticsAsyncClientTest.java b/sdk/textanalytics/azure-ai-textanalytics/src/test/java/com/azure/ai/textanalytics/TextAnalyticsAsyncClientTest.java index 5af526254fbe..047b0d56827f 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/test/java/com/azure/ai/textanalytics/TextAnalyticsAsyncClientTest.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/test/java/com/azure/ai/textanalytics/TextAnalyticsAsyncClientTest.java @@ -14,7 +14,6 @@ import com.azure.ai.textanalytics.models.TextSentiment; import com.azure.ai.textanalytics.models.TextSentimentClass; import com.azure.core.exception.HttpResponseException; -import com.azure.core.util.Context; import org.junit.jupiter.api.Test; import reactor.test.StepVerifier; @@ -36,7 +35,6 @@ protected void beforeTest() { } // Detected Languages - /** * Verify that we can get statistics on the collection result when given a batch input with options. */ @@ -137,7 +135,7 @@ public void detectLanguageFaultyText() { @Test public void detectLanguageDuplicateIdInput() { detectLanguageDuplicateIdRunner((inputs, options) -> { - StepVerifier.create(client.detectBatchLanguagesWithResponse(inputs, options, Context.NONE)) + StepVerifier.create(client.detectBatchLanguagesWithResponse(inputs, options)) .verifyErrorSatisfies(ex -> assertRestException(ex, HttpResponseException.class, 400)); }); } From ab29f4cddd294bbaf3615076eb23ac887731e46b Mon Sep 17 00:00:00 2001 From: Sameeksha Vaity Date: Mon, 30 Dec 2019 13:25:34 -0800 Subject: [PATCH 2/6] add javadoc --- .../ai/textanalytics/AnalyzeSentimentClient.java | 10 ++++++++++ .../ai/textanalytics/DetectLanguageClient.java | 3 +++ .../ai/textanalytics/ExtractKeyPhraseClient.java | 15 ++++++++++++++- .../ai/textanalytics/RecognizeEntityClient.java | 3 +++ .../RecognizeLinkedEntityClient.java | 3 +++ .../textanalytics/RecognizePiiEntityClient.java | 3 +++ 6 files changed, 36 insertions(+), 1 deletion(-) diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/AnalyzeSentimentClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/AnalyzeSentimentClient.java index 40c8f4dc45e5..f9a13097dda4 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/AnalyzeSentimentClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/AnalyzeSentimentClient.java @@ -33,6 +33,9 @@ import static com.azure.ai.textanalytics.Transforms.toBatchStatistics; import static com.azure.ai.textanalytics.Transforms.mapByIndex; +/** + * Helper class for managing sentiment analysis endpoint. + */ class AnalyzeSentimentClient { private final ClientLogger logger; private final TextAnalyticsClientImpl service; @@ -99,6 +102,13 @@ private DocumentResultCollection toDocumentResultCollect : toBatchStatistics(sentimentResponse.getStatistics())); } + /** + * Helper method to convert the service response of {@link DocumentSentiment} to {@link AnalyzeSentimentResult}. + * + * @param documentSentiment the {@link DocumentSentiment} returned by the service. + * + * @return the {@link AnalyzeSentimentResult} to be returned by the SDK. + */ private AnalyzeSentimentResult convertToTextSentimentResult(final DocumentSentiment documentSentiment) { // Document text sentiment final TextSentimentClass documentSentimentClass = TextSentimentClass.fromString(documentSentiment. diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/DetectLanguageClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/DetectLanguageClient.java index c034a45c05b7..d7ef73e374c7 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/DetectLanguageClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/DetectLanguageClient.java @@ -28,6 +28,9 @@ import static com.azure.ai.textanalytics.Transforms.mapByIndex; +/** + * Helper class for managing detect language endpoint. + */ class DetectLanguageClient { private final ClientLogger logger; private final TextAnalyticsClientImpl service; diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/ExtractKeyPhraseClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/ExtractKeyPhraseClient.java index 54224d495301..7bc3f2af2a73 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/ExtractKeyPhraseClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/ExtractKeyPhraseClient.java @@ -6,7 +6,10 @@ import com.azure.ai.textanalytics.implementation.TextAnalyticsClientImpl; import com.azure.ai.textanalytics.implementation.models.DocumentError; import com.azure.ai.textanalytics.implementation.models.DocumentKeyPhrases; +import com.azure.ai.textanalytics.implementation.models.KeyPhraseResult; +import com.azure.ai.textanalytics.implementation.models.LanguageResult; import com.azure.ai.textanalytics.implementation.models.MultiLanguageBatchInput; +import com.azure.ai.textanalytics.models.DetectLanguageResult; import com.azure.ai.textanalytics.models.DocumentResultCollection; import com.azure.ai.textanalytics.models.ExtractKeyPhraseResult; import com.azure.ai.textanalytics.models.TextAnalyticsRequestOptions; @@ -29,6 +32,9 @@ import static com.azure.ai.textanalytics.Transforms.mapByIndex; import static com.azure.core.util.FluxUtil.monoError; +/** + * Helper class for managing extract keyphrase endpoint. + */ class ExtractKeyPhraseClient { private final ClientLogger logger; private final TextAnalyticsClientImpl service; @@ -76,8 +82,15 @@ Mono>> extractBatchKey .map(response -> new SimpleResponse<>(response, toDocumentResultCollection(response.getValue()))); } + /** + * Helper method to convert the service response of {@link KeyPhraseResult} to {@link DocumentResultCollection}. + * + * @param keyPhraseResult the {@link KeyPhraseResult} returned by the service. + * + * @return the {@link DocumentResultCollection} of {@link KeyPhraseResult} to be returned by the SDK. + */ private DocumentResultCollection toDocumentResultCollection( - final com.azure.ai.textanalytics.implementation.models.KeyPhraseResult keyPhraseResult) { + final KeyPhraseResult keyPhraseResult) { List keyPhraseResultList = new ArrayList<>(); for (DocumentKeyPhrases documentKeyPhrases : keyPhraseResult.getDocuments()) { keyPhraseResultList.add(new ExtractKeyPhraseResult(documentKeyPhrases.getId(), diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeEntityClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeEntityClient.java index d3ea6d5bac9a..1219e2b23600 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeEntityClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeEntityClient.java @@ -31,6 +31,9 @@ import static com.azure.ai.textanalytics.Transforms.toBatchStatistics; import static com.azure.ai.textanalytics.Transforms.mapByIndex; +/** + * Helper class for managing recognize entity endpoint. + */ class RecognizeEntityClient { private final ClientLogger logger; private final TextAnalyticsClientImpl service; diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeLinkedEntityClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeLinkedEntityClient.java index 961255b0b5d5..529b67a03cef 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeLinkedEntityClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeLinkedEntityClient.java @@ -33,6 +33,9 @@ import static com.azure.ai.textanalytics.Transforms.mapByIndex; import static com.azure.core.util.FluxUtil.monoError; +/** + * Helper class for managing recognize linked entity endpoint. + */ class RecognizeLinkedEntityClient { private final ClientLogger logger; private final TextAnalyticsClientImpl service; diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizePiiEntityClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizePiiEntityClient.java index 70237e665ee2..a37ec02b71bb 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizePiiEntityClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizePiiEntityClient.java @@ -32,6 +32,9 @@ import static com.azure.ai.textanalytics.Transforms.mapByIndex; import static com.azure.core.util.FluxUtil.monoError; +/** + * Helper class for managing recognize pii entity endpoint. + */ class RecognizePiiEntityClient { private final ClientLogger logger; private final TextAnalyticsClientImpl service; From 609571962b79ab894bf7b40f9a6570a50606f905 Mon Sep 17 00:00:00 2001 From: Sameeksha Vaity Date: Mon, 30 Dec 2019 14:05:09 -0800 Subject: [PATCH 3/6] docs + checkstyle --- .../textanalytics/AnalyzeSentimentClient.java | 13 ++++-- .../textanalytics/DetectLanguageClient.java | 7 ++++ .../textanalytics/ExtractKeyPhraseClient.java | 15 ++++--- .../textanalytics/RecognizeEntityClient.java | 7 ++++ .../RecognizeLinkedEntityClient.java | 7 ++++ .../RecognizePiiEntityClient.java | 7 ++++ .../azure/ai/textanalytics/Transforms.java | 42 +++++++++++++++++++ .../azure/ai/textanalytics/RecognizePii.java | 2 +- 8 files changed, 91 insertions(+), 9 deletions(-) diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/AnalyzeSentimentClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/AnalyzeSentimentClient.java index f9a13097dda4..60d456ef7150 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/AnalyzeSentimentClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/AnalyzeSentimentClient.java @@ -27,11 +27,11 @@ import java.util.Objects; import java.util.stream.Collectors; -import static com.azure.ai.textanalytics.Transforms.toTextAnalyticsError; +import static com.azure.ai.textanalytics.Transforms.mapByIndex; +import static com.azure.ai.textanalytics.Transforms.toBatchStatistics; import static com.azure.ai.textanalytics.Transforms.toMultiLanguageInput; +import static com.azure.ai.textanalytics.Transforms.toTextAnalyticsError; import static com.azure.ai.textanalytics.Transforms.toTextDocumentStatistics; -import static com.azure.ai.textanalytics.Transforms.toBatchStatistics; -import static com.azure.ai.textanalytics.Transforms.mapByIndex; /** * Helper class for managing sentiment analysis endpoint. @@ -40,6 +40,13 @@ class AnalyzeSentimentClient { private final ClientLogger logger; private final TextAnalyticsClientImpl service; + /** + * Create a {@code AnalyzeSentimentClient} that sends requests to the Text Analytics services's sentiment analysis + * endpoint. + * + * @param service The proxy service used to perform REST calls. + * @param logger The logger for the {@link TextAnalyticsAsyncClient} class. + */ AnalyzeSentimentClient(TextAnalyticsClientImpl service, ClientLogger logger) { this.logger = logger; this.service = service; diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/DetectLanguageClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/DetectLanguageClient.java index d7ef73e374c7..7d24c30f93eb 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/DetectLanguageClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/DetectLanguageClient.java @@ -35,6 +35,13 @@ class DetectLanguageClient { private final ClientLogger logger; private final TextAnalyticsClientImpl service; + /** + * Create a {@code DetectLanguageClient} that sends requests to the Text Analytics services's detect language + * endpoint. + * + * @param service The proxy service used to perform REST calls. + * @param logger The logger for the {@link TextAnalyticsAsyncClient} class. + */ DetectLanguageClient(TextAnalyticsClientImpl service, ClientLogger logger) { this.logger = logger; this.service = service; diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/ExtractKeyPhraseClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/ExtractKeyPhraseClient.java index 7bc3f2af2a73..f98cbdfde018 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/ExtractKeyPhraseClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/ExtractKeyPhraseClient.java @@ -7,9 +7,7 @@ import com.azure.ai.textanalytics.implementation.models.DocumentError; import com.azure.ai.textanalytics.implementation.models.DocumentKeyPhrases; import com.azure.ai.textanalytics.implementation.models.KeyPhraseResult; -import com.azure.ai.textanalytics.implementation.models.LanguageResult; import com.azure.ai.textanalytics.implementation.models.MultiLanguageBatchInput; -import com.azure.ai.textanalytics.models.DetectLanguageResult; import com.azure.ai.textanalytics.models.DocumentResultCollection; import com.azure.ai.textanalytics.models.ExtractKeyPhraseResult; import com.azure.ai.textanalytics.models.TextAnalyticsRequestOptions; @@ -25,11 +23,11 @@ import java.util.List; import java.util.Objects; -import static com.azure.ai.textanalytics.Transforms.toTextAnalyticsError; +import static com.azure.ai.textanalytics.Transforms.mapByIndex; +import static com.azure.ai.textanalytics.Transforms.toBatchStatistics; import static com.azure.ai.textanalytics.Transforms.toMultiLanguageInput; +import static com.azure.ai.textanalytics.Transforms.toTextAnalyticsError; import static com.azure.ai.textanalytics.Transforms.toTextDocumentStatistics; -import static com.azure.ai.textanalytics.Transforms.toBatchStatistics; -import static com.azure.ai.textanalytics.Transforms.mapByIndex; import static com.azure.core.util.FluxUtil.monoError; /** @@ -39,6 +37,13 @@ class ExtractKeyPhraseClient { private final ClientLogger logger; private final TextAnalyticsClientImpl service; + /** + * Create a {@code ExtractKeyPhraseClient} that sends requests to the Text Analytics services's extract keyphrase + * endpoint. + * + * @param service The proxy service used to perform REST calls. + * @param logger The logger for the {@link TextAnalyticsAsyncClient} class. + */ ExtractKeyPhraseClient(TextAnalyticsClientImpl service, ClientLogger logger) { this.logger = logger; this.service = service; diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeEntityClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeEntityClient.java index 1219e2b23600..7c8769b7bb08 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeEntityClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeEntityClient.java @@ -38,6 +38,13 @@ class RecognizeEntityClient { private final ClientLogger logger; private final TextAnalyticsClientImpl service; + /** + * Create a {@code RecognizeEntityClient} that sends requests to the Text Analytics services's recognize entity + * endpoint. + * + * @param service The proxy service used to perform REST calls. + * @param logger The logger for the {@link TextAnalyticsAsyncClient} class. + */ RecognizeEntityClient(TextAnalyticsClientImpl service, ClientLogger logger) { this.logger = logger; this.service = service; diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeLinkedEntityClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeLinkedEntityClient.java index 529b67a03cef..0e3e1a220fa9 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeLinkedEntityClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeLinkedEntityClient.java @@ -40,6 +40,13 @@ class RecognizeLinkedEntityClient { private final ClientLogger logger; private final TextAnalyticsClientImpl service; + /** + * Create a {@code RecognizeLinkedEntityClient} that sends requests to the Text Analytics services's recognize + * linked entity endpoint. + * + * @param service The proxy service used to perform REST calls. + * @param logger The logger for the {@link TextAnalyticsAsyncClient} class. + */ RecognizeLinkedEntityClient(TextAnalyticsClientImpl service, ClientLogger logger) { this.logger = logger; this.service = service; diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizePiiEntityClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizePiiEntityClient.java index a37ec02b71bb..771f38cfc639 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizePiiEntityClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizePiiEntityClient.java @@ -39,6 +39,13 @@ class RecognizePiiEntityClient { private final ClientLogger logger; private final TextAnalyticsClientImpl service; + /** + * Create a {@code RecognizePiiEntityClient} that sends requests to the Text Analytics services's recognize pii + * entity endpoint. + * + * @param service The proxy service used to perform REST calls. + * @param logger The logger for the {@link TextAnalyticsAsyncClient} class. + */ RecognizePiiEntityClient(TextAnalyticsClientImpl service, ClientLogger logger) { this.logger = logger; this.service = service; diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/Transforms.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/Transforms.java index a8f7ee2817a5..55a2d2765606 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/Transforms.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/Transforms.java @@ -18,22 +18,52 @@ import java.util.stream.Collectors; import java.util.stream.IntStream; +/** + * Helper class to convert service level models to SDK exposes models. + */ class Transforms { + + /** + * Given a list of inputs will apply the indexing function to it and return the updated list. + * + * @param textInputs the inputs to apply the mapping function to. + * @param mappingFunction the function which applies the index to the incoming input value. + * @param the type of items being returned in the list. + * @return The list holding all the generic items combined. + */ static List mapByIndex(List textInputs, BiFunction mappingFunction) { return IntStream.range(0, textInputs.size()) .mapToObj(index -> mappingFunction.apply(String.valueOf(index), textInputs.get(index))) .collect(Collectors.toList()); } + /** + * Convert {@link DocumentStatistics} to {@link TextDocumentStatistics} + * + * @param statistics the {@link DocumentStatistics} provided by the service. + * @return the {@link TextDocumentStatistics} returned by the SDK. + */ static TextDocumentStatistics toTextDocumentStatistics(DocumentStatistics statistics) { return new TextDocumentStatistics(statistics.getCharactersCount(), statistics.getTransactionsCount()); } + /** + * Convert {@link RequestStatistics} to {@link TextDocumentBatchStatistics} + * + * @param statistics the {@link RequestStatistics} provided by the service. + * @return the {@link TextDocumentBatchStatistics} returned by the SDK. + */ static TextDocumentBatchStatistics toBatchStatistics(RequestStatistics statistics) { return new TextDocumentBatchStatistics(statistics.getDocumentsCount(), statistics.getErroneousDocumentsCount(), statistics.getValidDocumentsCount(), statistics.getTransactionsCount()); } + /** + * Convert {@link TextAnalyticsError} to {@link com.azure.ai.textanalytics.models.TextAnalyticsError} + * + * @param textAnalyticsError the {@link TextAnalyticsError} returned by the service. + * @return the {@link com.azure.ai.textanalytics.models.TextAnalyticsError} returned by the SDK. + */ static com.azure.ai.textanalytics.models.TextAnalyticsError toTextAnalyticsError( TextAnalyticsError textAnalyticsError) { return new com.azure.ai.textanalytics.models.TextAnalyticsError( @@ -42,6 +72,12 @@ static com.azure.ai.textanalytics.models.TextAnalyticsError toTextAnalyticsError : setErrors(textAnalyticsError.getDetails())); } + /** + * Convert the incoming input {@link TextDocumentInput} to the service expected {@link MultiLanguageInput}. + * + * @param textInputs the user provided input in {@link TextDocumentInput} + * @return the service required input {@link MultiLanguageInput} + */ static List toMultiLanguageInput(List textInputs) { List multiLanguageInputs = new ArrayList<>(); for (TextDocumentInput textDocumentInput : textInputs) { @@ -51,6 +87,12 @@ static List toMultiLanguageInput(List tex return multiLanguageInputs; } + /** + * Helper method to set error details on {@link TextAnalyticsError}. + * + * @param details about specific errors that led to this reported error. + * @return the {@link TextAnalyticsError} returned by the SDK. + */ private static List setErrors( List details) { List detailsList = new ArrayList<>(); diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/RecognizePii.java b/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/RecognizePii.java index 257da41ea72b..f3a141c8af59 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/RecognizePii.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/samples/java/com/azure/ai/textanalytics/RecognizePii.java @@ -28,7 +28,7 @@ public static void main(String[] args) { System.out.printf( "Recognized PII Entity: %s, Entity Type: %s, Entity Subtype: %s, Offset: %s, Length: %s, Score: %s.%n", entity.getText(), - entity.getType() , + entity.getType(), entity.getSubtype() == null || entity.getSubtype().isEmpty() ? "N/A" : entity.getSubtype(), entity.getOffset(), entity.getLength(), From c1099d46f3494d72a224653db3547e8c8e9c615a Mon Sep 17 00:00:00 2001 From: Sameeksha Vaity Date: Thu, 2 Jan 2020 11:18:02 -0800 Subject: [PATCH 4/6] fix 7072 --- .../ai/textanalytics/TextAnalyticsClient.java | 1 + .../com/azure/ai/textanalytics/Transforms.java | 4 ++-- .../textanalytics/TextAnalyticsClientTestBase.java | 14 ++++++++------ 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/TextAnalyticsClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/TextAnalyticsClient.java index 26ab90c15d14..f2ad6fa63ad1 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/TextAnalyticsClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/TextAnalyticsClient.java @@ -36,6 +36,7 @@ @ServiceClient(builder = TextAnalyticsClientBuilder.class) public final class TextAnalyticsClient { private final TextAnalyticsAsyncClient client; + /** * Create a {@code TextAnalyticsClient client} that sends requests to the Text Analytics service's endpoint. * Each service call goes through the {@link TextAnalyticsClientBuilder#pipeline http pipeline}. diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/Transforms.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/Transforms.java index 55a2d2765606..bb87131a9018 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/Transforms.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/Transforms.java @@ -54,8 +54,8 @@ static TextDocumentStatistics toTextDocumentStatistics(DocumentStatistics statis * @return the {@link TextDocumentBatchStatistics} returned by the SDK. */ static TextDocumentBatchStatistics toBatchStatistics(RequestStatistics statistics) { - return new TextDocumentBatchStatistics(statistics.getDocumentsCount(), statistics.getErroneousDocumentsCount(), - statistics.getValidDocumentsCount(), statistics.getTransactionsCount()); + return new TextDocumentBatchStatistics(statistics.getDocumentsCount(), statistics.getValidDocumentsCount(), + statistics.getErroneousDocumentsCount(), statistics.getTransactionsCount()); } /** diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/test/java/com/azure/ai/textanalytics/TextAnalyticsClientTestBase.java b/sdk/textanalytics/azure-ai-textanalytics/src/test/java/com/azure/ai/textanalytics/TextAnalyticsClientTestBase.java index d8bfd0841a03..d510d441aa9c 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/test/java/com/azure/ai/textanalytics/TextAnalyticsClientTestBase.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/test/java/com/azure/ai/textanalytics/TextAnalyticsClientTestBase.java @@ -462,6 +462,7 @@ void analyseBatchSentimentShowStatsRunner( new TextDocumentInput("1", "The restaurant had amazing gnocchi. The hotel was dark and unclean.") ); TextAnalyticsRequestOptions options = new TextAnalyticsRequestOptions().setShowStatistics(true); + showStatistics = true; testRunner.accept(textDocumentInputs, options); } @@ -695,6 +696,7 @@ private static void validateLinkedEntityMatches(List expected /** * Helper method to verify the error document. + * * @param expectedError the Error returned from the service. * @param actualError the Error returned from the API. */ @@ -890,7 +892,7 @@ static DocumentResultCollection getExpectedBatchDetectedLa DetectLanguageResult detectLanguageResult2 = new DetectLanguageResult("1", textDocumentStatistics2, null, detectedLanguage2, detectedLanguageList2); DetectLanguageResult detectLanguageResult3 = new DetectLanguageResult("2", textDocumentStatistics3, null, detectedLanguage3, detectedLanguageList3); - TextDocumentBatchStatistics textDocumentBatchStatistics = new TextDocumentBatchStatistics(3, 0, 3, 3); + TextDocumentBatchStatistics textDocumentBatchStatistics = new TextDocumentBatchStatistics(3, 3, 0, 3); List detectLanguageResultList = Arrays.asList(detectLanguageResult1, detectLanguageResult2, detectLanguageResult3); return new DocumentResultCollection<>(detectLanguageResultList, MODEL_VERSION, textDocumentBatchStatistics); @@ -910,7 +912,7 @@ static DocumentResultCollection getExpectedBatchNamedEn RecognizeEntitiesResult recognizeEntitiesResult1 = new RecognizeEntitiesResult("0", textDocumentStatistics1, null, namedEntityList1); RecognizeEntitiesResult recognizeEntitiesResult2 = new RecognizeEntitiesResult("1", textDocumentStatistics2, null, namedEntityList2); - TextDocumentBatchStatistics textDocumentBatchStatistics = new TextDocumentBatchStatistics(2, 0, 2, 2); + TextDocumentBatchStatistics textDocumentBatchStatistics = new TextDocumentBatchStatistics(2, 2, 0, 2); List recognizeEntitiesResultList = Arrays.asList(recognizeEntitiesResult1, recognizeEntitiesResult2); return new DocumentResultCollection<>(recognizeEntitiesResultList, MODEL_VERSION, textDocumentBatchStatistics); @@ -929,7 +931,7 @@ static DocumentResultCollection getExpectedBatchPiiE RecognizePiiEntitiesResult recognizeEntitiesResult1 = new RecognizePiiEntitiesResult("0", textDocumentStatistics1, null, namedEntityList1); RecognizePiiEntitiesResult recognizeEntitiesResult2 = new RecognizePiiEntitiesResult("1", textDocumentStatistics2, null, namedEntityList2); - TextDocumentBatchStatistics textDocumentBatchStatistics = new TextDocumentBatchStatistics(2, 0, 2, 2); + TextDocumentBatchStatistics textDocumentBatchStatistics = new TextDocumentBatchStatistics(2, 2, 0, 2); List recognizeEntitiesResultList = Arrays.asList(recognizeEntitiesResult1, recognizeEntitiesResult2); return new DocumentResultCollection<>(recognizeEntitiesResultList, MODEL_VERSION, textDocumentBatchStatistics); @@ -958,7 +960,7 @@ static DocumentResultCollection getExpectedBatchL RecognizeLinkedEntitiesResult recognizeLinkedEntitiesResult1 = new RecognizeLinkedEntitiesResult("0", textDocumentStatistics1, null, linkedEntityList1); RecognizeLinkedEntitiesResult recognizeLinkedEntitiesResult2 = new RecognizeLinkedEntitiesResult("1", textDocumentStatistics2, null, linkedEntityList2); - TextDocumentBatchStatistics textDocumentBatchStatistics = new TextDocumentBatchStatistics(2, 0, 2, 2); + TextDocumentBatchStatistics textDocumentBatchStatistics = new TextDocumentBatchStatistics(2, 2, 0, 2); List recognizeLinkedEntitiesResultList = Arrays.asList(recognizeLinkedEntitiesResult1, recognizeLinkedEntitiesResult2); return new DocumentResultCollection<>(recognizeLinkedEntitiesResultList, MODEL_VERSION, textDocumentBatchStatistics); @@ -974,7 +976,7 @@ static DocumentResultCollection getExpectedBatchKeyPhras ExtractKeyPhraseResult extractKeyPhraseResult1 = new ExtractKeyPhraseResult("0", textDocumentStatistics1, null, keyPhrasesList1); ExtractKeyPhraseResult extractKeyPhraseResult2 = new ExtractKeyPhraseResult("1", textDocumentStatistics2, null, keyPhrasesList2); - TextDocumentBatchStatistics textDocumentBatchStatistics = new TextDocumentBatchStatistics(2, 0, 2, 2); + TextDocumentBatchStatistics textDocumentBatchStatistics = new TextDocumentBatchStatistics(2, 2, 0, 2); List extractKeyPhraseResultList = Arrays.asList(extractKeyPhraseResult1, extractKeyPhraseResult2); return new DocumentResultCollection<>(extractKeyPhraseResultList, MODEL_VERSION, textDocumentBatchStatistics); @@ -1005,6 +1007,6 @@ static DocumentResultCollection getExpectedBatchTextSent return new DocumentResultCollection<>(Arrays.asList(analyzeSentimentResult1, analyzeSentimentResult2), MODEL_VERSION, - new TextDocumentBatchStatistics(2, 0, 2, 2)); + new TextDocumentBatchStatistics(2, 2, 0, 2)); } } From f094d1f9303e2c69f7b1f9326b11d484b0fc572e Mon Sep 17 00:00:00 2001 From: Sameeksha Vaity Date: Thu, 2 Jan 2020 13:30:49 -0800 Subject: [PATCH 5/6] update review feedback --- ....java => AnalyzeSentimentAsyncClient.java} | 12 ++-- ...nt.java => DetectLanguageAsyncClient.java} | 10 ++- ....java => ExtractKeyPhraseAsyncClient.java} | 19 ++--- ...t.java => RecognizeEntityAsyncClient.java} | 10 ++- ... => RecognizeLinkedEntityAsyncClient.java} | 23 +++--- ...ava => RecognizePiiEntityAsyncClient.java} | 23 +++--- .../TextAnalyticsAsyncClient.java | 71 ++++++++++--------- .../ai/textanalytics/TextAnalyticsClient.java | 41 ++++++----- 8 files changed, 95 insertions(+), 114 deletions(-) rename sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/{AnalyzeSentimentClient.java => AnalyzeSentimentAsyncClient.java} (95%) rename sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/{DetectLanguageClient.java => DetectLanguageAsyncClient.java} (94%) rename sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/{ExtractKeyPhraseClient.java => ExtractKeyPhraseAsyncClient.java} (88%) rename sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/{RecognizeEntityClient.java => RecognizeEntityAsyncClient.java} (93%) rename sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/{RecognizeLinkedEntityClient.java => RecognizeLinkedEntityAsyncClient.java} (90%) rename sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/{RecognizePiiEntityClient.java => RecognizePiiEntityAsyncClient.java} (89%) diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/AnalyzeSentimentClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/AnalyzeSentimentAsyncClient.java similarity index 95% rename from sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/AnalyzeSentimentClient.java rename to sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/AnalyzeSentimentAsyncClient.java index 60d456ef7150..c52a80749d34 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/AnalyzeSentimentClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/AnalyzeSentimentAsyncClient.java @@ -36,19 +36,17 @@ /** * Helper class for managing sentiment analysis endpoint. */ -class AnalyzeSentimentClient { - private final ClientLogger logger; +class AnalyzeSentimentAsyncClient { + private final ClientLogger logger = new ClientLogger(AnalyzeSentimentAsyncClient.class); private final TextAnalyticsClientImpl service; /** - * Create a {@code AnalyzeSentimentClient} that sends requests to the Text Analytics services's sentiment analysis - * endpoint. + * Create a {@code AnalyzeSentimentAsyncClient} that sends requests to the Text Analytics services's sentiment + * analysis endpoint. * * @param service The proxy service used to perform REST calls. - * @param logger The logger for the {@link TextAnalyticsAsyncClient} class. */ - AnalyzeSentimentClient(TextAnalyticsClientImpl service, ClientLogger logger) { - this.logger = logger; + AnalyzeSentimentAsyncClient(TextAnalyticsClientImpl service) { this.service = service; } diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/DetectLanguageClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/DetectLanguageAsyncClient.java similarity index 94% rename from sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/DetectLanguageClient.java rename to sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/DetectLanguageAsyncClient.java index 7d24c30f93eb..07666f6ea200 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/DetectLanguageClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/DetectLanguageAsyncClient.java @@ -31,19 +31,17 @@ /** * Helper class for managing detect language endpoint. */ -class DetectLanguageClient { - private final ClientLogger logger; +class DetectLanguageAsyncClient { + private final ClientLogger logger = new ClientLogger(DetectLanguageAsyncClient.class); private final TextAnalyticsClientImpl service; /** - * Create a {@code DetectLanguageClient} that sends requests to the Text Analytics services's detect language + * Create a {@code DetectLanguageAsyncClient} that sends requests to the Text Analytics services's detect language * endpoint. * * @param service The proxy service used to perform REST calls. - * @param logger The logger for the {@link TextAnalyticsAsyncClient} class. */ - DetectLanguageClient(TextAnalyticsClientImpl service, ClientLogger logger) { - this.logger = logger; + DetectLanguageAsyncClient(TextAnalyticsClientImpl service) { this.service = service; } diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/ExtractKeyPhraseClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/ExtractKeyPhraseAsyncClient.java similarity index 88% rename from sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/ExtractKeyPhraseClient.java rename to sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/ExtractKeyPhraseAsyncClient.java index f98cbdfde018..cd57683dfa36 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/ExtractKeyPhraseClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/ExtractKeyPhraseAsyncClient.java @@ -28,24 +28,21 @@ import static com.azure.ai.textanalytics.Transforms.toMultiLanguageInput; import static com.azure.ai.textanalytics.Transforms.toTextAnalyticsError; import static com.azure.ai.textanalytics.Transforms.toTextDocumentStatistics; -import static com.azure.core.util.FluxUtil.monoError; /** * Helper class for managing extract keyphrase endpoint. */ -class ExtractKeyPhraseClient { - private final ClientLogger logger; +class ExtractKeyPhraseAsyncClient { + private final ClientLogger logger = new ClientLogger(ExtractKeyPhraseAsyncClient.class); private final TextAnalyticsClientImpl service; /** - * Create a {@code ExtractKeyPhraseClient} that sends requests to the Text Analytics services's extract keyphrase - * endpoint. + * Create a {@code ExtractKeyPhraseAsyncClient} that sends requests to the Text Analytics services's extract + * keyphrase endpoint. * * @param service The proxy service used to perform REST calls. - * @param logger The logger for the {@link TextAnalyticsAsyncClient} class. */ - ExtractKeyPhraseClient(TextAnalyticsClientImpl service, ClientLogger logger) { - this.logger = logger; + ExtractKeyPhraseAsyncClient(TextAnalyticsClientImpl service) { this.service = service; } @@ -64,11 +61,7 @@ Mono>> extractKeyPhras List documentInputs = mapByIndex(textInputs, (index, value) -> new TextDocumentInput(index, value, language)); - try { - return extractBatchKeyPhrasesWithResponse(documentInputs, null, context); - } catch (RuntimeException ex) { - return monoError(logger, ex); - } + return extractBatchKeyPhrasesWithResponse(documentInputs, null, context); } Mono>> extractBatchKeyPhrasesWithResponse( diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeEntityClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeEntityAsyncClient.java similarity index 93% rename from sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeEntityClient.java rename to sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeEntityAsyncClient.java index 7c8769b7bb08..f34edae012e7 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeEntityClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeEntityAsyncClient.java @@ -34,19 +34,17 @@ /** * Helper class for managing recognize entity endpoint. */ -class RecognizeEntityClient { - private final ClientLogger logger; +class RecognizeEntityAsyncClient { + private final ClientLogger logger = new ClientLogger(RecognizeEntityAsyncClient.class); private final TextAnalyticsClientImpl service; /** - * Create a {@code RecognizeEntityClient} that sends requests to the Text Analytics services's recognize entity + * Create a {@code RecognizeEntityAsyncClient} that sends requests to the Text Analytics services's recognize entity * endpoint. * * @param service The proxy service used to perform REST calls. - * @param logger The logger for the {@link TextAnalyticsAsyncClient} class. */ - RecognizeEntityClient(TextAnalyticsClientImpl service, ClientLogger logger) { - this.logger = logger; + RecognizeEntityAsyncClient(TextAnalyticsClientImpl service) { this.service = service; } diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeLinkedEntityClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeLinkedEntityAsyncClient.java similarity index 90% rename from sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeLinkedEntityClient.java rename to sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeLinkedEntityAsyncClient.java index 0e3e1a220fa9..e4176ae68f39 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeLinkedEntityClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeLinkedEntityAsyncClient.java @@ -26,29 +26,26 @@ import java.util.Objects; import java.util.stream.Collectors; -import static com.azure.ai.textanalytics.Transforms.toTextAnalyticsError; +import static com.azure.ai.textanalytics.Transforms.mapByIndex; +import static com.azure.ai.textanalytics.Transforms.toBatchStatistics; import static com.azure.ai.textanalytics.Transforms.toMultiLanguageInput; +import static com.azure.ai.textanalytics.Transforms.toTextAnalyticsError; import static com.azure.ai.textanalytics.Transforms.toTextDocumentStatistics; -import static com.azure.ai.textanalytics.Transforms.toBatchStatistics; -import static com.azure.ai.textanalytics.Transforms.mapByIndex; -import static com.azure.core.util.FluxUtil.monoError; /** * Helper class for managing recognize linked entity endpoint. */ -class RecognizeLinkedEntityClient { - private final ClientLogger logger; +class RecognizeLinkedEntityAsyncClient { + private final ClientLogger logger = new ClientLogger(RecognizeLinkedEntityAsyncClient.class); private final TextAnalyticsClientImpl service; /** - * Create a {@code RecognizeLinkedEntityClient} that sends requests to the Text Analytics services's recognize + * Create a {@code RecognizeLinkedEntityAsyncClient} that sends requests to the Text Analytics services's recognize * linked entity endpoint. * * @param service The proxy service used to perform REST calls. - * @param logger The logger for the {@link TextAnalyticsAsyncClient} class. */ - RecognizeLinkedEntityClient(TextAnalyticsClientImpl service, ClientLogger logger) { - this.logger = logger; + RecognizeLinkedEntityAsyncClient(TextAnalyticsClientImpl service) { this.service = service; } @@ -67,11 +64,7 @@ Mono>> recogniz List documentInputs = mapByIndex(textInputs, (index, value) -> new TextDocumentInput(index, value, language)); - try { - return recognizeBatchLinkedEntitiesWithResponse(documentInputs, null, context); - } catch (RuntimeException ex) { - return monoError(logger, ex); - } + return recognizeBatchLinkedEntitiesWithResponse(documentInputs, null, context); } Mono>> recognizeBatchLinkedEntitiesWithResponse( diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizePiiEntityClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizePiiEntityAsyncClient.java similarity index 89% rename from sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizePiiEntityClient.java rename to sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizePiiEntityAsyncClient.java index 771f38cfc639..0cfeafa5923e 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizePiiEntityClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizePiiEntityAsyncClient.java @@ -25,29 +25,26 @@ import java.util.Objects; import java.util.stream.Collectors; -import static com.azure.ai.textanalytics.Transforms.toTextAnalyticsError; +import static com.azure.ai.textanalytics.Transforms.mapByIndex; +import static com.azure.ai.textanalytics.Transforms.toBatchStatistics; import static com.azure.ai.textanalytics.Transforms.toMultiLanguageInput; +import static com.azure.ai.textanalytics.Transforms.toTextAnalyticsError; import static com.azure.ai.textanalytics.Transforms.toTextDocumentStatistics; -import static com.azure.ai.textanalytics.Transforms.toBatchStatistics; -import static com.azure.ai.textanalytics.Transforms.mapByIndex; -import static com.azure.core.util.FluxUtil.monoError; /** * Helper class for managing recognize pii entity endpoint. */ -class RecognizePiiEntityClient { - private final ClientLogger logger; +class RecognizePiiEntityAsyncClient { + private final ClientLogger logger = new ClientLogger(RecognizePiiEntityAsyncClient.class); private final TextAnalyticsClientImpl service; /** - * Create a {@code RecognizePiiEntityClient} that sends requests to the Text Analytics services's recognize pii + * Create a {@code RecognizePiiEntityAsyncClient} that sends requests to the Text Analytics services's recognize pii * entity endpoint. * * @param service The proxy service used to perform REST calls. - * @param logger The logger for the {@link TextAnalyticsAsyncClient} class. */ - RecognizePiiEntityClient(TextAnalyticsClientImpl service, ClientLogger logger) { - this.logger = logger; + RecognizePiiEntityAsyncClient(TextAnalyticsClientImpl service) { this.service = service; } @@ -66,11 +63,7 @@ Mono>> recognizePi List documentInputs = mapByIndex(textInputs, (index, value) -> new TextDocumentInput(index, value, language)); - try { - return recognizeBatchPiiEntitiesWithResponse(documentInputs, null, context); - } catch (RuntimeException ex) { - return monoError(logger, ex); - } + return recognizeBatchPiiEntitiesWithResponse(documentInputs, null, context); } Mono>> recognizeBatchPiiEntitiesWithResponse( diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/TextAnalyticsAsyncClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/TextAnalyticsAsyncClient.java index a5aa29a1b1e7..34e03ee54dd3 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/TextAnalyticsAsyncClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/TextAnalyticsAsyncClient.java @@ -47,12 +47,12 @@ public final class TextAnalyticsAsyncClient { private final TextAnalyticsServiceVersion serviceVersion; private final String defaultCountryHint; private final String defaultLanguage; - final DetectLanguageClient detectLanguageClient; - final AnalyzeSentimentClient analyzeSentimentClient; - final ExtractKeyPhraseClient extractKeyPhraseClient; - final RecognizeEntityClient recognizeEntityClient; - final RecognizePiiEntityClient recognizePiiEntityClient; - final RecognizeLinkedEntityClient recognizeLinkedEntityClient; + final DetectLanguageAsyncClient detectLanguageAsyncClient; + final AnalyzeSentimentAsyncClient analyzeSentimentAsyncClient; + final ExtractKeyPhraseAsyncClient extractKeyPhraseAsyncClient; + final RecognizeEntityAsyncClient recognizeEntityAsyncClient; + final RecognizePiiEntityAsyncClient recognizePiiEntityAsyncClient; + final RecognizeLinkedEntityAsyncClient recognizeLinkedEntityAsyncClient; /** * Create a {@code TextAnalyticsAsyncClient} that sends requests to the Text Analytics services's endpoint. Each @@ -71,12 +71,12 @@ public final class TextAnalyticsAsyncClient { this.serviceVersion = serviceVersion; defaultCountryHint = clientOptions == null ? null : clientOptions.getDefaultCountryHint(); defaultLanguage = clientOptions == null ? null : clientOptions.getDefaultLanguage(); - this.detectLanguageClient = new DetectLanguageClient(service, logger); - this.analyzeSentimentClient = new AnalyzeSentimentClient(service, logger); - this.extractKeyPhraseClient = new ExtractKeyPhraseClient(service, logger); - this.recognizeEntityClient = new RecognizeEntityClient(service, logger); - this.recognizePiiEntityClient = new RecognizePiiEntityClient(service, logger); - this.recognizeLinkedEntityClient = new RecognizeLinkedEntityClient(service, logger); + this.detectLanguageAsyncClient = new DetectLanguageAsyncClient(service); + this.analyzeSentimentAsyncClient = new AnalyzeSentimentAsyncClient(service); + this.extractKeyPhraseAsyncClient = new ExtractKeyPhraseAsyncClient(service); + this.recognizeEntityAsyncClient = new RecognizeEntityAsyncClient(service); + this.recognizePiiEntityAsyncClient = new RecognizePiiEntityAsyncClient(service); + this.recognizeLinkedEntityAsyncClient = new RecognizeLinkedEntityAsyncClient(service); } /** @@ -141,7 +141,8 @@ public Mono detectLanguage(String text) { @ServiceMethod(returns = ReturnType.SINGLE) public Mono> detectLanguageWithResponse(String text, String countryHint) { try { - return withContext(context -> detectLanguageClient.detectLanguageWithResponse(text, countryHint, context)); + return withContext(context -> + detectLanguageAsyncClient.detectLanguageWithResponse(text, countryHint, context)); } catch (RuntimeException ex) { return monoError(logger, ex); } @@ -182,7 +183,7 @@ public Mono> detectLanguages(List public Mono>> detectLanguagesWithResponse( List textInputs, String countryHint) { try { - return withContext(context -> detectLanguageClient.detectLanguagesWithResponse(textInputs, countryHint, + return withContext(context -> detectLanguageAsyncClient.detectLanguagesWithResponse(textInputs, countryHint, context)); } catch (RuntimeException ex) { return monoError(logger, ex); @@ -226,7 +227,7 @@ public Mono>> detectBatc List textInputs, TextAnalyticsRequestOptions options) { try { return withContext( - context -> detectLanguageClient.detectBatchLanguagesWithResponse(textInputs, options, context)); + context -> detectLanguageAsyncClient.detectBatchLanguagesWithResponse(textInputs, options, context)); } catch (RuntimeException ex) { return monoError(logger, ex); } @@ -270,7 +271,8 @@ public Mono recognizeEntities(String text) { @ServiceMethod(returns = ReturnType.SINGLE) public Mono> recognizeEntitiesWithResponse(String text, String language) { try { - return withContext(context -> recognizeEntityClient.recognizeEntitiesWithResponse(text, language, context)); + return withContext(context -> + recognizeEntityAsyncClient.recognizeEntitiesWithResponse(text, language, context)); } catch (RuntimeException ex) { return monoError(logger, ex); } @@ -311,7 +313,7 @@ public Mono> recognizeEntities public Mono>> recognizeEntitiesWithResponse( List textInputs, String language) { try { - return withContext(context -> recognizeEntityClient.recognizeEntitiesWithResponse(textInputs, language, + return withContext(context -> recognizeEntityAsyncClient.recognizeEntitiesWithResponse(textInputs, language, context)); } catch (RuntimeException ex) { return monoError(logger, ex); @@ -354,8 +356,8 @@ public Mono> recognizeBatchEnt public Mono>> recognizeBatchEntitiesWithResponse( List textInputs, TextAnalyticsRequestOptions options) { try { - return withContext(context -> recognizeEntityClient.recognizeBatchEntitiesWithResponse(textInputs, options, - context)); + return withContext(context -> + recognizeEntityAsyncClient.recognizeBatchEntitiesWithResponse(textInputs, options, context)); } catch (RuntimeException ex) { return monoError(logger, ex); } @@ -399,7 +401,7 @@ public Mono recognizePiiEntities(String text) { @ServiceMethod(returns = ReturnType.SINGLE) public Mono> recognizePiiEntitiesWithResponse(String text, String language) { try { - return withContext(context -> recognizePiiEntityClient.recognizePiiEntitiesWithResponse(text, language, + return withContext(context -> recognizePiiEntityAsyncClient.recognizePiiEntitiesWithResponse(text, language, context)); } catch (RuntimeException ex) { return monoError(logger, ex); @@ -446,7 +448,7 @@ public Mono> recognizePiiEn public Mono>> recognizePiiEntitiesWithResponse( List textInputs, String language) { try { - return withContext(context -> recognizePiiEntityClient.recognizePiiEntitiesWithResponse(textInputs, + return withContext(context -> recognizePiiEntityAsyncClient.recognizePiiEntitiesWithResponse(textInputs, language, context)); } catch (RuntimeException ex) { return monoError(logger, ex); @@ -493,8 +495,8 @@ public Mono> recognizeBatch public Mono>> recognizeBatchPiiEntitiesWithResponse( List textInputs, TextAnalyticsRequestOptions options) { try { - return withContext(context -> recognizePiiEntityClient.recognizeBatchPiiEntitiesWithResponse(textInputs, - options, context)); + return withContext(context -> + recognizePiiEntityAsyncClient.recognizeBatchPiiEntitiesWithResponse(textInputs, options, context)); } catch (RuntimeException ex) { return monoError(logger, ex); } @@ -537,7 +539,7 @@ public Mono recognizeLinkedEntities(String text) public Mono> recognizeLinkedEntitiesWithResponse(String text, String language) { try { - return withContext(context -> recognizeLinkedEntityClient.recognizeLinkedEntitiesWithResponse(text, + return withContext(context -> recognizeLinkedEntityAsyncClient.recognizeLinkedEntitiesWithResponse(text, language, context)); } catch (RuntimeException ex) { return monoError(logger, ex); @@ -583,8 +585,8 @@ public Mono> recognizeLi public Mono>> recognizeLinkedEntitiesWithResponse( List textInputs, String language) { try { - return withContext(context -> recognizeLinkedEntityClient.recognizeLinkedEntitiesWithResponse(textInputs, - language, context)); + return withContext(context -> + recognizeLinkedEntityAsyncClient.recognizeLinkedEntitiesWithResponse(textInputs, language, context)); } catch (RuntimeException ex) { return monoError(logger, ex); } @@ -629,7 +631,7 @@ public Mono> recognizeBa recognizeBatchLinkedEntitiesWithResponse(List textInputs, TextAnalyticsRequestOptions options) { try { - return withContext(context -> recognizeLinkedEntityClient.recognizeBatchLinkedEntitiesWithResponse( + return withContext(context -> recognizeLinkedEntityAsyncClient.recognizeBatchLinkedEntitiesWithResponse( textInputs, options, context)); } catch (RuntimeException ex) { return monoError(logger, ex); @@ -671,7 +673,7 @@ public Mono extractKeyPhrases(String text) { @ServiceMethod(returns = ReturnType.SINGLE) public Mono> extractKeyPhrasesWithResponse(String text, String language) { try { - return withContext(context -> extractKeyPhraseClient.extractKeyPhrasesWithResponse(text, language, + return withContext(context -> extractKeyPhraseAsyncClient.extractKeyPhrasesWithResponse(text, language, context)); } catch (RuntimeException ex) { return monoError(logger, ex); @@ -714,7 +716,7 @@ public Mono> extractKeyPhrases( public Mono>> extractKeyPhrasesWithResponse( List textInputs, String language) { try { - return withContext(context -> extractKeyPhraseClient.extractKeyPhrasesWithResponse(textInputs, + return withContext(context -> extractKeyPhraseAsyncClient.extractKeyPhrasesWithResponse(textInputs, language, context)); } catch (RuntimeException ex) { return monoError(logger, ex); @@ -758,8 +760,8 @@ public Mono> extractBatchKeyPhr public Mono>> extractBatchKeyPhrasesWithResponse( List textInputs, TextAnalyticsRequestOptions options) { try { - return withContext(context -> extractKeyPhraseClient.extractBatchKeyPhrasesWithResponse(textInputs, options, - context)); + return withContext(context -> + extractKeyPhraseAsyncClient.extractBatchKeyPhrasesWithResponse(textInputs, options, context)); } catch (RuntimeException ex) { return monoError(logger, ex); } @@ -801,7 +803,8 @@ public Mono analyzeSentiment(String text) { @ServiceMethod(returns = ReturnType.SINGLE) public Mono> analyzeSentimentWithResponse(String text, String language) { try { - return withContext(context -> analyzeSentimentClient.analyzeSentimentWithResponse(text, language, context)); + return withContext(context -> + analyzeSentimentAsyncClient.analyzeSentimentWithResponse(text, language, context)); } catch (RuntimeException ex) { return monoError(logger, ex); } @@ -844,7 +847,7 @@ public Mono> analyzeSentiment(L public Mono>> analyzeSentimentWithResponse( List textInputs, String language) { try { - return withContext(context -> analyzeSentimentClient.analyzeSentimentWithResponse(textInputs, language, + return withContext(context -> analyzeSentimentAsyncClient.analyzeSentimentWithResponse(textInputs, language, context)); } catch (RuntimeException ex) { return monoError(logger, ex); @@ -889,7 +892,7 @@ public Mono> analyzeBatchSentim public Mono>> analyzeBatchSentimentWithResponse( List textInputs, TextAnalyticsRequestOptions options) { try { - return withContext(context -> analyzeSentimentClient.analyzeBatchSentimentWithResponse(textInputs, + return withContext(context -> analyzeSentimentAsyncClient.analyzeBatchSentimentWithResponse(textInputs, options, context)); } catch (RuntimeException ex) { return monoError(logger, ex); diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/TextAnalyticsClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/TextAnalyticsClient.java index f2ad6fa63ad1..288d93f61489 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/TextAnalyticsClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/TextAnalyticsClient.java @@ -90,7 +90,7 @@ public DetectLanguageResult detectLanguage(String text, String countryHint) { */ @ServiceMethod(returns = ReturnType.SINGLE) public Response detectLanguageWithResponse(String text, String countryHint, Context context) { - return client.detectLanguageClient.detectLanguageWithResponse(text, countryHint, context).block(); + return client.detectLanguageAsyncClient.detectLanguageWithResponse(text, countryHint, context).block(); } /** @@ -122,7 +122,7 @@ public DocumentResultCollection detectLanguages(List> detectLanguagesWithResponse( List textInputs, String countryHint, Context context) { - return client.detectLanguageClient.detectLanguagesWithResponse(textInputs, countryHint, context).block(); + return client.detectLanguageAsyncClient.detectLanguagesWithResponse(textInputs, countryHint, context).block(); } /** @@ -153,7 +153,7 @@ public DocumentResultCollection detectBatchLanguages(List< @ServiceMethod(returns = ReturnType.SINGLE) public Response> detectBatchLanguagesWithResponse( List textInputs, TextAnalyticsRequestOptions options, Context context) { - return client.detectLanguageClient.detectBatchLanguagesWithResponse(textInputs, options, context).block(); + return client.detectLanguageAsyncClient.detectBatchLanguagesWithResponse(textInputs, options, context).block(); } // Named Entity @@ -186,7 +186,7 @@ public RecognizeEntitiesResult recognizeEntities(String text) { @ServiceMethod(returns = ReturnType.SINGLE) public Response recognizeEntitiesWithResponse( String text, String language, Context context) { - return client.recognizeEntityClient.recognizeEntitiesWithResponse(text, language, context).block(); + return client.recognizeEntityAsyncClient.recognizeEntitiesWithResponse(text, language, context).block(); } /** @@ -217,7 +217,7 @@ public DocumentResultCollection recognizeEntities(List< @ServiceMethod(returns = ReturnType.SINGLE) public Response> recognizeEntitiesWithResponse( List textInputs, String language, Context context) { - return client.recognizeEntityClient.recognizeEntitiesWithResponse(textInputs, language, context).block(); + return client.recognizeEntityAsyncClient.recognizeEntitiesWithResponse(textInputs, language, context).block(); } /** @@ -249,7 +249,8 @@ public DocumentResultCollection recognizeBatchEntities( @ServiceMethod(returns = ReturnType.SINGLE) public Response> recognizeBatchEntitiesWithResponse( List textInputs, TextAnalyticsRequestOptions options, Context context) { - return client.recognizeEntityClient.recognizeBatchEntitiesWithResponse(textInputs, options, context).block(); + return client.recognizeEntityAsyncClient.recognizeBatchEntitiesWithResponse(textInputs, options, + context).block(); } // PII Entities @@ -285,7 +286,7 @@ public RecognizePiiEntitiesResult recognizePiiEntities(String text) { @ServiceMethod(returns = ReturnType.SINGLE) public Response recognizePiiEntitiesWithResponse(String text, String language, Context context) { - return client.recognizePiiEntityClient.recognizePiiEntitiesWithResponse(text, language, context).block(); + return client.recognizePiiEntityAsyncClient.recognizePiiEntitiesWithResponse(text, language, context).block(); } /** @@ -321,7 +322,8 @@ public DocumentResultCollection recognizePiiEntities @ServiceMethod(returns = ReturnType.SINGLE) public Response> recognizePiiEntitiesWithResponse( List textInputs, String language, Context context) { - return client.recognizePiiEntityClient.recognizePiiEntitiesWithResponse(textInputs, language, context).block(); + return client.recognizePiiEntityAsyncClient.recognizePiiEntitiesWithResponse(textInputs, language, + context).block(); } /** @@ -357,7 +359,7 @@ public DocumentResultCollection recognizeBatchPiiEnt @ServiceMethod(returns = ReturnType.SINGLE) public Response> recognizeBatchPiiEntitiesWithResponse( List textInputs, TextAnalyticsRequestOptions options, Context context) { - return client.recognizePiiEntityClient.recognizeBatchPiiEntitiesWithResponse(textInputs, options, + return client.recognizePiiEntityAsyncClient.recognizeBatchPiiEntitiesWithResponse(textInputs, options, context).block(); } @@ -392,7 +394,8 @@ public RecognizeLinkedEntitiesResult recognizeLinkedEntities(String text) { @ServiceMethod(returns = ReturnType.SINGLE) public Response recognizeLinkedEntitiesWithResponse(String text, String language, Context context) { - return client.recognizeLinkedEntityClient.recognizeLinkedEntitiesWithResponse(text, language, context).block(); + return client.recognizeLinkedEntityAsyncClient.recognizeLinkedEntitiesWithResponse(text, language, + context).block(); } /** @@ -426,7 +429,7 @@ public DocumentResultCollection recognizeLinkedEn @ServiceMethod(returns = ReturnType.SINGLE) public Response> recognizeLinkedEntitiesWithResponse( List textInputs, String language, Context context) { - return client.recognizeLinkedEntityClient.recognizeLinkedEntitiesWithResponse(textInputs, language, + return client.recognizeLinkedEntityAsyncClient.recognizeLinkedEntitiesWithResponse(textInputs, language, context).block(); } @@ -461,7 +464,7 @@ public DocumentResultCollection recognizeBatchLin @ServiceMethod(returns = ReturnType.SINGLE) public Response> recognizeBatchLinkedEntitiesWithResponse( List textInputs, TextAnalyticsRequestOptions options, Context context) { - return client.recognizeLinkedEntityClient.recognizeBatchLinkedEntitiesWithResponse(textInputs, options, + return client.recognizeLinkedEntityAsyncClient.recognizeBatchLinkedEntitiesWithResponse(textInputs, options, context).block(); } @@ -495,7 +498,7 @@ public ExtractKeyPhraseResult extractKeyPhrases(String text) { @ServiceMethod(returns = ReturnType.SINGLE) public Response extractKeyPhrasesWithResponse(String text, String language, Context context) { - return client.extractKeyPhraseClient.extractKeyPhrasesWithResponse(text, language, context).block(); + return client.extractKeyPhraseAsyncClient.extractKeyPhrasesWithResponse(text, language, context).block(); } /** @@ -527,7 +530,7 @@ public DocumentResultCollection extractKeyPhrases(List> extractKeyPhrasesWithResponse( List textInputs, String language, Context context) { - return client.extractKeyPhraseClient.extractKeyPhrasesWithResponse(textInputs, language, context).block(); + return client.extractKeyPhraseAsyncClient.extractKeyPhrasesWithResponse(textInputs, language, context).block(); } /** @@ -559,7 +562,8 @@ public DocumentResultCollection extractBatchKeyPhrases(L @ServiceMethod(returns = ReturnType.SINGLE) public Response> extractBatchKeyPhrasesWithResponse( List textInputs, TextAnalyticsRequestOptions options, Context context) { - return client.extractKeyPhraseClient.extractBatchKeyPhrasesWithResponse(textInputs, options, context).block(); + return client.extractKeyPhraseAsyncClient.extractBatchKeyPhrasesWithResponse(textInputs, options, + context).block(); } // Sentiment @@ -592,7 +596,7 @@ public AnalyzeSentimentResult analyzeSentiment(String text) { @ServiceMethod(returns = ReturnType.SINGLE) public Response analyzeBatchSentimentWithResponse( String text, String language, Context context) { - return client.analyzeSentimentClient.analyzeSentimentWithResponse(text, language, context).block(); + return client.analyzeSentimentAsyncClient.analyzeSentimentWithResponse(text, language, context).block(); } /** @@ -626,7 +630,7 @@ public DocumentResultCollection analyzeSentiment(List> analyzeSentimentWithResponse( List textInputs, String language, Context context) { - return client.analyzeSentimentClient.analyzeSentimentWithResponse(textInputs, language, context).block(); + return client.analyzeSentimentAsyncClient.analyzeSentimentWithResponse(textInputs, language, context).block(); } /** @@ -659,6 +663,7 @@ public DocumentResultCollection analyzeBatchSentiment(Li @ServiceMethod(returns = ReturnType.SINGLE) public Response> analyzeBatchSentimentWithResponse( List textInputs, TextAnalyticsRequestOptions options, Context context) { - return client.analyzeSentimentClient.analyzeBatchSentimentWithResponse(textInputs, options, context).block(); + return client.analyzeSentimentAsyncClient.analyzeBatchSentimentWithResponse(textInputs, options, + context).block(); } } From b2f32fc79777bc17e8ccb5d4198e2864b96e62b9 Mon Sep 17 00:00:00 2001 From: Sameeksha Vaity Date: Thu, 2 Jan 2020 14:10:43 -0800 Subject: [PATCH 6/6] update log statements --- .../com/azure/ai/textanalytics/AnalyzeSentimentAsyncClient.java | 2 +- .../com/azure/ai/textanalytics/DetectLanguageAsyncClient.java | 2 +- .../com/azure/ai/textanalytics/ExtractKeyPhraseAsyncClient.java | 2 +- .../com/azure/ai/textanalytics/RecognizeEntityAsyncClient.java | 2 +- .../ai/textanalytics/RecognizeLinkedEntityAsyncClient.java | 2 +- .../azure/ai/textanalytics/RecognizePiiEntityAsyncClient.java | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/AnalyzeSentimentAsyncClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/AnalyzeSentimentAsyncClient.java index c52a80749d34..6c3afcff0eaf 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/AnalyzeSentimentAsyncClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/AnalyzeSentimentAsyncClient.java @@ -79,7 +79,7 @@ Mono>> analyzeBatchSen options == null ? null : options.showStatistics(), context) .doOnSubscribe(ignoredValue -> logger.info("A batch of text sentiment input - {}", textInputs.toString())) .doOnSuccess(response -> logger.info("A batch of text sentiment output - {}", response)) - .doOnError(error -> logger.warning("Failed to text sentiment - {}", error)) + .doOnError(error -> logger.warning("Failed to analyze text sentiment - {}", error)) .map(response -> new SimpleResponse<>(response, toDocumentResultCollection(response.getValue()))); } diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/DetectLanguageAsyncClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/DetectLanguageAsyncClient.java index 07666f6ea200..af2ab897ac65 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/DetectLanguageAsyncClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/DetectLanguageAsyncClient.java @@ -76,7 +76,7 @@ Mono>> detectBatchLangua options == null ? null : options.showStatistics(), context) .doOnSubscribe(ignoredValue -> logger.info("A batch of language input - {}", textInputs.toString())) .doOnSuccess(response -> logger.info("A batch of detected language output - {}", response.getValue())) - .doOnError(error -> logger.warning("Failed to detected languages - {}", error)) + .doOnError(error -> logger.warning("Failed to detect languages - {}", error)) .map(response -> new SimpleResponse<>(response, toDocumentResultCollection(response.getValue()))); } diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/ExtractKeyPhraseAsyncClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/ExtractKeyPhraseAsyncClient.java index cd57683dfa36..05c76b9d2716 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/ExtractKeyPhraseAsyncClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/ExtractKeyPhraseAsyncClient.java @@ -76,7 +76,7 @@ Mono>> extractBatchKey options == null ? null : options.showStatistics(), context) .doOnSubscribe(ignoredValue -> logger.info("A batch of key phrases input - {}", textInputs.toString())) .doOnSuccess(response -> logger.info("A batch of key phrases output - {}", response.getValue())) - .doOnError(error -> logger.warning("Failed to key phrases - {}", error)) + .doOnError(error -> logger.warning("Failed to extract key phrases - {}", error)) .map(response -> new SimpleResponse<>(response, toDocumentResultCollection(response.getValue()))); } diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeEntityAsyncClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeEntityAsyncClient.java index f34edae012e7..9a12fcfb3661 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeEntityAsyncClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeEntityAsyncClient.java @@ -78,7 +78,7 @@ Mono>> recognizeBatch options == null ? null : options.showStatistics(), context) .doOnSubscribe(ignoredValue -> logger.info("A batch of named entities input - {}", textInputs.toString())) .doOnSuccess(response -> logger.info("A batch of named entities output - {}", response.getValue())) - .doOnError(error -> logger.warning("Failed to named entities - {}", error)) + .doOnError(error -> logger.warning("Failed to recognize named entities - {}", error)) .map(response -> new SimpleResponse<>(response, toDocumentResultCollection(response.getValue()))); } diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeLinkedEntityAsyncClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeLinkedEntityAsyncClient.java index e4176ae68f39..9d87ab08de67 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeLinkedEntityAsyncClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizeLinkedEntityAsyncClient.java @@ -79,7 +79,7 @@ Mono>> recogniz options == null ? null : options.showStatistics(), context) .doOnSubscribe(ignoredValue -> logger.info("A batch of linked entities input - {}", textInputs.toString())) .doOnSuccess(response -> logger.info("A batch of linked entities output - {}", response.getValue())) - .doOnError(error -> logger.warning("Failed to linked entities - {}", error)) + .doOnError(error -> logger.warning("Failed to recognize linked entities - {}", error)) .map(response -> new SimpleResponse<>(response, toDocumentResultCollection(response.getValue()))); } diff --git a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizePiiEntityAsyncClient.java b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizePiiEntityAsyncClient.java index 0cfeafa5923e..781432dbd2c9 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizePiiEntityAsyncClient.java +++ b/sdk/textanalytics/azure-ai-textanalytics/src/main/java/com/azure/ai/textanalytics/RecognizePiiEntityAsyncClient.java @@ -77,7 +77,7 @@ Mono>> recognizeBa options == null ? null : options.showStatistics(), context) .doOnSubscribe(ignoredValue -> logger.info("A batch of PII entities input - {}", textInputs.toString())) .doOnSuccess(response -> logger.info("A batch of PII entities output - {}", response.getValue())) - .doOnError(error -> logger.warning("Failed to PII entities - {}", error)) + .doOnError(error -> logger.warning("Failed to recognize PII entities - {}", error)) .map(response -> new SimpleResponse<>(response, toPiiDocumentResultCollection(response.getValue()))); }