Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions sdk/parents/azure-client-sdk-parent/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1074,6 +1074,7 @@
--add-opens com.azure.core/com.azure.core.implementation.serializer=ALL-UNNAMED
--add-opens com.azure.ai.formrecognizer/com.azure.ai.formrecognizer=ALL-UNNAMED
--add-opens com.azure.ai.textanalytics/com.azure.ai.textanalytics=ALL-UNNAMED
Comment thread
samvaity marked this conversation as resolved.
--add-opens com.azure.ai.textanalytics/com.azure.ai.textanalytics.implementation.models=com.azure.core
Comment thread
mssfang marked this conversation as resolved.
--add-opens com.azure.data.appconfiguration/com.azure.data.appconfiguration=ALL-UNNAMED
--add-opens com.azure.security.keyvault.certificates/com.azure.security.keyvault.certificates=ALL-UNNAMED
--add-opens com.azure.security.keyvault.secrets/com.azure.security.keyvault.secrets=ALL-UNNAMED
Expand Down
6 changes: 3 additions & 3 deletions sdk/textanalytics/azure-ai-textanalytics/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -230,16 +230,16 @@ documentSentiment.getSentences().forEach(sentenceSentiment ->
String document = "Bonjour tout le monde";
DetectedLanguage detectedLanguage = textAnalyticsClient.detectLanguage(document);
System.out.printf("Detected language name: %s, ISO 6391 name: %s, score: %f.%n",
Comment thread
mssfang marked this conversation as resolved.
Outdated
detectedLanguage.getName(), detectedLanguage.getIso6391Name(), detectedLanguage.getScore());
detectedLanguage.getName(), detectedLanguage.getIso6391Name(), detectedLanguage.getConfidenceScore());
```

### Recognize entity
<!-- embedme ./src/samples/java/com/azure/ai/textanalytics/ReadmeSamples.java#L123-L126 -->
```java
String document = "Satya Nadella is the CEO of Microsoft";
textAnalyticsClient.recognizeEntities(document).forEach(entity ->
System.out.printf("Recognized entity: %s, category: %s, subCategory: %s, score: %f.%n",
entity.getText(), entity.getCategory(), entity.getSubCategory(), entity.getConfidenceScore()));
System.out.printf("Recognized entity: %s, category: %s, subcategory: %s, score: %f.%n",
entity.getText(), entity.getCategory(), entity.getSubcategory(), entity.getConfidenceScore()));
```

### Recognize linked entity
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,23 @@
package com.azure.ai.textanalytics;

import com.azure.ai.textanalytics.implementation.TextAnalyticsClientImpl;
import com.azure.ai.textanalytics.implementation.models.AnalyzeSentimentResultImpl;
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.SentenceSentimentImpl;
import com.azure.ai.textanalytics.implementation.models.SentimentConfidenceScorePerLabel;
import com.azure.ai.textanalytics.implementation.models.SentimentConfidenceScoresImpl;
import com.azure.ai.textanalytics.implementation.models.SentimentResponse;
import com.azure.ai.textanalytics.implementation.models.TextAnalyticsErrorException;
import com.azure.ai.textanalytics.models.AnalyzeSentimentResult;
import com.azure.ai.textanalytics.models.SentenceSentiment;
import com.azure.ai.textanalytics.models.SentimentConfidenceScores;
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.util.TextAnalyticsPagedFlux;
import com.azure.ai.textanalytics.util.TextAnalyticsPagedResponse;
import com.azure.core.exception.HttpResponseException;
import com.azure.core.http.rest.SimpleResponse;
import com.azure.core.util.Context;
import com.azure.core.util.IterableStream;
Expand Down Expand Up @@ -119,7 +123,7 @@ private TextAnalyticsPagedResponse<AnalyzeSentimentResult> toTextAnalyticsPagedR
analyzeSentimentResults.add(convertToAnalyzeSentimentResult(documentSentiment));
}
for (DocumentError documentError : sentimentResponse.getErrors()) {
analyzeSentimentResults.add(new AnalyzeSentimentResult(documentError.getId(), null,
analyzeSentimentResults.add(new AnalyzeSentimentResultImpl(documentError.getId(), null,
Comment thread
mssfang marked this conversation as resolved.
Outdated
toTextAnalyticsError(documentError.getError()), null));
}
return new TextAnalyticsPagedResponse<>(
Expand Down Expand Up @@ -148,7 +152,7 @@ private AnalyzeSentimentResult convertToAnalyzeSentimentResult(DocumentSentiment
documentSentiment.getSentiment())));
}

final SentimentConfidenceScorePerLabel confidenceScorePerLabel = documentSentiment.getDocumentScores();
final SentimentConfidenceScorePerLabel confidenceScorePerLabel = documentSentiment.getConfidenceScores();

// Sentence text sentiment
final List<SentenceSentiment> sentenceSentiments = documentSentiment.getSentences().stream()
Expand All @@ -163,24 +167,24 @@ private AnalyzeSentimentResult convertToAnalyzeSentimentResult(DocumentSentiment
sentenceSentiment.getSentiment())));
}
final SentimentConfidenceScorePerLabel confidenceScorePerSentence =
sentenceSentiment.getSentenceScores();
sentenceSentiment.getConfidenceScores();

return new SentenceSentiment(
return new SentenceSentimentImpl(
sentenceSentimentLabel,
new SentimentConfidenceScores(confidenceScorePerSentence.getNegative(),
new SentimentConfidenceScoresImpl(confidenceScorePerSentence.getNegative(),
confidenceScorePerSentence.getNeutral(), confidenceScorePerSentence.getPositive()),
sentenceSentiment.getLength(),
sentenceSentiment.getOffset());
}).collect(Collectors.toList());

return new AnalyzeSentimentResult(
return new AnalyzeSentimentResultImpl(
documentSentiment.getId(),
documentSentiment.getStatistics() == null
? null : toTextDocumentStatistics(documentSentiment.getStatistics()),
null,
new com.azure.ai.textanalytics.models.DocumentSentiment(
documentSentimentLabel,
new SentimentConfidenceScores(
new SentimentConfidenceScoresImpl(
confidenceScorePerLabel.getNegative(),
confidenceScorePerLabel.getNeutral(),
confidenceScorePerLabel.getPositive()),
Expand All @@ -199,14 +203,21 @@ private AnalyzeSentimentResult convertToAnalyzeSentimentResult(DocumentSentiment
*/
private Mono<TextAnalyticsPagedResponse<AnalyzeSentimentResult>> getAnalyzedSentimentResponseInPage(
Iterable<TextDocumentInput> documents, TextAnalyticsRequestOptions options, Context context) {
return service.sentimentWithRestResponseAsync(
return service.sentimentWithResponseAsync(
new MultiLanguageBatchInput().setDocuments(Transforms.toMultiLanguageInput(documents)),
context.addData(AZ_TRACING_NAMESPACE_KEY, COGNITIVE_TRACING_NAMESPACE_VALUE),
options == null ? null : options.getModelVersion(),
options == null ? null : options.isIncludeStatistics(),
context.addData(AZ_TRACING_NAMESPACE_KEY, COGNITIVE_TRACING_NAMESPACE_VALUE))
options == null ? null : options.isIncludeStatistics())
.doOnSubscribe(ignoredValue -> logger.info("A batch of documents - {}", documents.toString()))
.doOnSuccess(response -> logger.info("Analyzed sentiment for a batch of documents - {}", response))
.doOnError(error -> logger.warning("Failed to analyze sentiment - {}", error))
.map(this::toTextAnalyticsPagedResponse);
.map(this::toTextAnalyticsPagedResponse)
.onErrorMap(throwable -> {
if (throwable instanceof TextAnalyticsErrorException) {
TextAnalyticsErrorException errorException = (TextAnalyticsErrorException) throwable;
return new HttpResponseException(errorException.getMessage(), errorException.getResponse());
}
return throwable;
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,26 @@
package com.azure.ai.textanalytics;

import com.azure.ai.textanalytics.implementation.TextAnalyticsClientImpl;
import com.azure.ai.textanalytics.implementation.models.DetectLanguageResultImpl;
import com.azure.ai.textanalytics.implementation.models.DetectedLanguageImpl;
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.LanguageResult;
import com.azure.ai.textanalytics.implementation.models.TextAnalyticsErrorException;
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.TextAnalyticsError;
import com.azure.ai.textanalytics.models.TextAnalyticsRequestOptions;
import com.azure.ai.textanalytics.util.TextAnalyticsPagedFlux;
import com.azure.ai.textanalytics.util.TextAnalyticsPagedResponse;
import com.azure.core.exception.HttpResponseException;
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.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
Expand Down Expand Up @@ -111,32 +114,22 @@ private TextAnalyticsPagedResponse<DetectLanguageResult> toTextAnalyticsPagedRes

final List<DetectLanguageResult> detectLanguageResults = new ArrayList<>();
for (DocumentLanguage documentLanguage : languageResult.getDocuments()) {
DetectedLanguage primaryLanguage = null;
List<com.azure.ai.textanalytics.implementation.models.DetectedLanguage> detectedLanguages =
documentLanguage.getDetectedLanguages();
if (detectedLanguages.size() >= 1) {
detectedLanguages.sort(
Comparator.comparing(com.azure.ai.textanalytics.implementation.models.DetectedLanguage::getScore));
com.azure.ai.textanalytics.implementation.models.DetectedLanguage detectedLanguageResult =
detectedLanguages.get(0);
primaryLanguage = new DetectedLanguage(detectedLanguageResult.getName(),
detectedLanguageResult.getIso6391Name(), detectedLanguageResult.getScore());
}

detectLanguageResults.add(new DetectLanguageResult(documentLanguage.getId(),
com.azure.ai.textanalytics.implementation.models.DetectedLanguage detectedLanguage =
documentLanguage.getDetectedLanguage();
detectLanguageResults.add(new DetectLanguageResultImpl(documentLanguage.getId(),
documentLanguage.getStatistics() == null
? null : Transforms.toTextDocumentStatistics(documentLanguage.getStatistics()),
null,
primaryLanguage));
new DetectedLanguageImpl(detectedLanguage.getName(),
detectedLanguage.getIso6391Name(), detectedLanguage.getConfidenceScore())));
}

for (DocumentError documentError : languageResult.getErrors()) {
com.azure.ai.textanalytics.models.TextAnalyticsError error =
TextAnalyticsError error =
Transforms.toTextAnalyticsError(documentError.getError());
final String documentId = documentError.getId();

detectLanguageResults.add(
new DetectLanguageResult(documentId, null, error, null));
detectLanguageResults.add(new DetectLanguageResultImpl(documentId, null, error, null));
}

return new TextAnalyticsPagedResponse<>(
Expand All @@ -161,15 +154,22 @@ private TextAnalyticsPagedResponse<DetectLanguageResult> toTextAnalyticsPagedRes
*/
private Mono<TextAnalyticsPagedResponse<DetectLanguageResult>> getDetectedLanguageResponseInPage(
Iterable<DetectLanguageInput> documents, TextAnalyticsRequestOptions options, Context context) {
return service.languagesWithRestResponseAsync(
new LanguageBatchInput().setDocuments(toLanguageInput(documents)),
options == null ? null : options.getModelVersion(),
options == null ? null : options.isIncludeStatistics(),
context.addData(AZ_TRACING_NAMESPACE_KEY, COGNITIVE_TRACING_NAMESPACE_VALUE))
.doOnSubscribe(ignoredValue -> logger.info("A batch of documents - {}", documents.toString()))
.doOnSuccess(response -> logger.info("Detected languages for a batch of documents - {}",
response.getValue()))
.doOnError(error -> logger.warning("Failed to detect language - {}", error))
.map(this::toTextAnalyticsPagedResponse);
return service.languagesWithResponseAsync(
new LanguageBatchInput().setDocuments(toLanguageInput(documents)),
context.addData(AZ_TRACING_NAMESPACE_KEY, COGNITIVE_TRACING_NAMESPACE_VALUE),
options == null ? null : options.getModelVersion(),
options == null ? null : options.isIncludeStatistics())
.doOnSubscribe(ignoredValue -> logger.info("A batch of documents - {}", documents.toString()))
.doOnSuccess(response -> logger.info("Detected languages for a batch of documents - {}",
response.getValue()))
.doOnError(error -> logger.warning("Failed to detect language - {}", error))
.map(this::toTextAnalyticsPagedResponse)
.onErrorMap(throwable -> {
if (throwable instanceof TextAnalyticsErrorException) {
Comment thread
mssfang marked this conversation as resolved.
Outdated
TextAnalyticsErrorException errorException = (TextAnalyticsErrorException) throwable;
return new HttpResponseException(errorException.getMessage(), errorException.getResponse());
}
return throwable;
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,17 @@
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.ExtractKeyPhraseResultImpl;
import com.azure.ai.textanalytics.implementation.models.KeyPhraseResult;
import com.azure.ai.textanalytics.implementation.models.MultiLanguageBatchInput;
import com.azure.ai.textanalytics.implementation.models.TextAnalyticsErrorException;
import com.azure.ai.textanalytics.models.ExtractKeyPhraseResult;
import com.azure.ai.textanalytics.models.TextAnalyticsError;
import com.azure.ai.textanalytics.models.TextAnalyticsRequestOptions;
import com.azure.ai.textanalytics.models.TextDocumentInput;
import com.azure.ai.textanalytics.util.TextAnalyticsPagedFlux;
import com.azure.ai.textanalytics.util.TextAnalyticsPagedResponse;
import com.azure.core.exception.HttpResponseException;
import com.azure.core.http.rest.SimpleResponse;
import com.azure.core.util.Context;
import com.azure.core.util.IterableStream;
Expand Down Expand Up @@ -151,20 +155,20 @@ private TextAnalyticsPagedResponse<ExtractKeyPhraseResult> toTextAnalyticsPagedR
final List<ExtractKeyPhraseResult> keyPhraseResultList = new ArrayList<>();
for (DocumentKeyPhrases documentKeyPhrases : keyPhraseResult.getDocuments()) {
final String documentId = documentKeyPhrases.getId();
keyPhraseResultList.add(new ExtractKeyPhraseResult(
keyPhraseResultList.add(new ExtractKeyPhraseResultImpl(
documentId,
documentKeyPhrases.getStatistics() == null ? null
: toTextDocumentStatistics(documentKeyPhrases.getStatistics()), null,
new IterableStream<>(documentKeyPhrases.getKeyPhrases())));
}

for (DocumentError documentError : keyPhraseResult.getErrors()) {
final com.azure.ai.textanalytics.models.TextAnalyticsError error =
final TextAnalyticsError error =
toTextAnalyticsError(documentError.getError());

final String documentId = documentError.getId();

keyPhraseResultList.add(new ExtractKeyPhraseResult(
keyPhraseResultList.add(new ExtractKeyPhraseResultImpl(
documentId, null, error, null));
}

Expand All @@ -190,14 +194,21 @@ private TextAnalyticsPagedResponse<ExtractKeyPhraseResult> toTextAnalyticsPagedR
*/
private Mono<TextAnalyticsPagedResponse<ExtractKeyPhraseResult>> getExtractedKeyPhrasesResponseInPage(
Iterable<TextDocumentInput> documents, TextAnalyticsRequestOptions options, Context context) {
return service.keyPhrasesWithRestResponseAsync(
return service.keyPhrasesWithResponseAsync(
new MultiLanguageBatchInput().setDocuments(toMultiLanguageInput(documents)),
context.addData(AZ_TRACING_NAMESPACE_KEY, COGNITIVE_TRACING_NAMESPACE_VALUE),
options == null ? null : options.getModelVersion(),
options == null ? null : options.isIncludeStatistics(),
context.addData(AZ_TRACING_NAMESPACE_KEY, COGNITIVE_TRACING_NAMESPACE_VALUE))
options == null ? null : options.isIncludeStatistics())
.doOnSubscribe(ignoredValue -> logger.info("A batch of document - {}", documents.toString()))
.doOnSuccess(response -> logger.info("A batch of key phrases output - {}", response.getValue()))
.doOnError(error -> logger.warning("Failed to extract key phrases - {}", error))
.map(this::toTextAnalyticsPagedResponse);
.map(this::toTextAnalyticsPagedResponse)
.onErrorMap(throwable -> {
if (throwable instanceof TextAnalyticsErrorException) {
TextAnalyticsErrorException errorException = (TextAnalyticsErrorException) throwable;
return new HttpResponseException(errorException.getMessage(), errorException.getResponse());
}
return throwable;
});
}
}
Loading