Skip to content

Commit 8b07ff2

Browse files
[textanalytics] use language API for analyze text operations (#23814)
* language api compat code changes * use language api for sync/async detect_language * use language api for sync/async recognize_entities * use language api for sync/async recognize_pii_entities * use language api for sync/async recognize_linked_entities * use language api for sync/async extract_key_phrases * use language api for sync/async analyze_sentiment * add recordings
1 parent e60527b commit 8b07ff2

File tree

527 files changed

+156918
-20510
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

527 files changed

+156918
-20510
lines changed

sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/_base_client.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ class TextAnalyticsApiVersion(str, Enum, metaclass=CaseInsensitiveEnumMeta):
2020
"""Text Analytics API versions supported by this package"""
2121

2222
#: this is the default version
23+
V2022_03_01_PREVIEW = "2022-03-01-preview"
2324
V3_2_PREVIEW = "v3.2-preview.2"
2425
V3_1 = "v3.1"
2526
V3_0 = "v3.0"

sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/_policies.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ def on_response(self, request, response):
3131
if self._is_lro and (not data or data.get("status") not in _FINISHED):
3232
return
3333
if data:
34+
data = data.get("results", data) # language API compat
3435
statistics = data.get("statistics", None)
3536
model_version = data.get("modelVersion", None)
3637

sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/_request_handlers.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,13 @@
1111
)
1212

1313

14+
def is_language_api(api_version):
15+
"""Language API is date-based
16+
"""
17+
import re
18+
return re.search(r'\d{4}-\d{2}-\d{2}', api_version)
19+
20+
1421
def _validate_input(documents, hint, whole_input_hint):
1522
"""Validate that batch input has either all string docs
1623
or dict/DetectLanguageInput/TextDocumentInput, not a mix of both.

sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/_response_handlers.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,10 @@ def order_results(response, combined):
6969
:param combined: A combined list of the results | errors
7070
:return: In order list of results | errors (if any)
7171
"""
72-
request = json.loads(response.http_response.request.body)["documents"]
72+
try:
73+
request = json.loads(response.http_response.request.body)["documents"]
74+
except KeyError: # language API compat
75+
request = json.loads(response.http_response.request.body)["analysisInput"]["documents"]
7376
mapping = {item.id: item for item in combined}
7477
ordered_response = [mapping[item["id"]] for item in request]
7578
return ordered_response
@@ -97,6 +100,9 @@ def choose_wrapper(*args, **kwargs):
97100
def wrapper(
98101
response, obj, response_headers, ordering_function
99102
): # pylint: disable=unused-argument
103+
if hasattr(obj, "results"):
104+
obj = obj.results # language API compat
105+
100106
if obj.errors:
101107
combined = obj.documents + obj.errors
102108
results = ordering_function(response, combined)

sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/_text_analytics_client.py

Lines changed: 117 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
_validate_input,
2323
_determine_action_type,
2424
_check_string_index_type_arg,
25+
is_language_api
2526
)
2627
from ._version import DEFAULT_API_VERSION
2728
from ._response_handlers import (
@@ -198,13 +199,29 @@ def detect_language(
198199
model_version = kwargs.pop("model_version", None)
199200
show_stats = kwargs.pop("show_stats", None)
200201
disable_service_logs = kwargs.pop("disable_service_logs", None)
201-
if disable_service_logs is not None:
202-
kwargs["logging_opt_out"] = disable_service_logs
202+
203203
try:
204+
if is_language_api(self._api_version):
205+
models = self._client.models(api_version=self._api_version)
206+
return self._client.analyze_text(
207+
body=models.AnalyzeTextLanguageDetectionInput(
208+
analysis_input={"documents": docs},
209+
parameters=models.LanguageDetectionTaskParameters(
210+
logging_opt_out=disable_service_logs,
211+
model_version=model_version
212+
)
213+
),
214+
show_stats=show_stats,
215+
cls=kwargs.pop("cls", language_result),
216+
**kwargs
217+
)
218+
219+
# api_versions 3.0, 3.1
204220
return self._client.languages(
205221
documents=docs,
206222
model_version=model_version,
207223
show_stats=show_stats,
224+
logging_opt_out=disable_service_logs,
208225
cls=kwargs.pop("cls", language_result),
209226
**kwargs
210227
)
@@ -283,19 +300,34 @@ def recognize_entities(
283300
self._api_version,
284301
string_index_type_default=self._string_index_type_default,
285302
)
286-
if string_index_type:
287-
kwargs.update({"string_index_type": string_index_type})
288303
disable_service_logs = kwargs.pop("disable_service_logs", None)
289-
if disable_service_logs is not None:
290-
kwargs["logging_opt_out"] = disable_service_logs
291304

292305
try:
306+
if is_language_api(self._api_version):
307+
models = self._client.models(api_version=self._api_version)
308+
return self._client.analyze_text(
309+
body=models.AnalyzeTextEntityRecognitionInput(
310+
analysis_input={"documents": docs},
311+
parameters=models.EntitiesTaskParameters(
312+
logging_opt_out=disable_service_logs,
313+
model_version=model_version,
314+
string_index_type=string_index_type
315+
)
316+
),
317+
show_stats=show_stats,
318+
cls=kwargs.pop("cls", entities_result),
319+
**kwargs
320+
)
321+
322+
# api_versions 3.0, 3.1
293323
return self._client.entities_recognition_general(
294324
documents=docs,
295325
model_version=model_version,
296326
show_stats=show_stats,
327+
string_index_type=string_index_type,
328+
logging_opt_out=disable_service_logs,
297329
cls=kwargs.pop("cls", entities_result),
298-
**kwargs
330+
**kwargs,
299331
)
300332
except HttpResponseError as error:
301333
return process_http_response_error(error)
@@ -377,25 +409,41 @@ def recognize_pii_entities(
377409
show_stats = kwargs.pop("show_stats", None)
378410
domain_filter = kwargs.pop("domain_filter", None)
379411
categories_filter = kwargs.pop("categories_filter", None)
380-
381412
string_index_type = _check_string_index_type_arg(
382413
kwargs.pop("string_index_type", None),
383414
self._api_version,
384415
string_index_type_default=self._string_index_type_default,
385416
)
386-
if string_index_type:
387-
kwargs.update({"string_index_type": string_index_type})
388417
disable_service_logs = kwargs.pop("disable_service_logs", None)
389-
if disable_service_logs is not None:
390-
kwargs["logging_opt_out"] = disable_service_logs
391418

392419
try:
420+
if is_language_api(self._api_version):
421+
models = self._client.models(api_version=self._api_version)
422+
return self._client.analyze_text(
423+
body=models.AnalyzeTextPiiEntitiesRecognitionInput(
424+
analysis_input={"documents": docs},
425+
parameters=models.PiiTaskParameters(
426+
logging_opt_out=disable_service_logs,
427+
model_version=model_version,
428+
domain=domain_filter,
429+
pii_categories=categories_filter,
430+
string_index_type=string_index_type
431+
)
432+
),
433+
show_stats=show_stats,
434+
cls=kwargs.pop("cls", pii_entities_result),
435+
**kwargs
436+
)
437+
438+
# api_versions 3.0, 3.1
393439
return self._client.entities_recognition_pii(
394440
documents=docs,
395441
model_version=model_version,
396442
show_stats=show_stats,
397443
domain=domain_filter,
398444
pii_categories=categories_filter,
445+
logging_opt_out=disable_service_logs,
446+
string_index_type=string_index_type,
399447
cls=kwargs.pop("cls", pii_entities_result),
400448
**kwargs
401449
)
@@ -480,21 +528,35 @@ def recognize_linked_entities(
480528
model_version = kwargs.pop("model_version", None)
481529
show_stats = kwargs.pop("show_stats", None)
482530
disable_service_logs = kwargs.pop("disable_service_logs", None)
483-
if disable_service_logs is not None:
484-
kwargs["logging_opt_out"] = disable_service_logs
485-
486531
string_index_type = _check_string_index_type_arg(
487532
kwargs.pop("string_index_type", None),
488533
self._api_version,
489534
string_index_type_default=self._string_index_type_default,
490535
)
491-
if string_index_type:
492-
kwargs.update({"string_index_type": string_index_type})
493536

494537
try:
538+
if is_language_api(self._api_version):
539+
models = self._client.models(api_version=self._api_version)
540+
return self._client.analyze_text(
541+
body=models.AnalyzeTextEntityLinkingInput(
542+
analysis_input={"documents": docs},
543+
parameters=models.EntityLinkingTaskParameters(
544+
logging_opt_out=disable_service_logs,
545+
model_version=model_version,
546+
string_index_type=string_index_type
547+
)
548+
),
549+
show_stats=show_stats,
550+
cls=kwargs.pop("cls", linked_entities_result),
551+
**kwargs
552+
)
553+
554+
# api_versions 3.0, 3.1
495555
return self._client.entities_linking(
496556
documents=docs,
557+
logging_opt_out=disable_service_logs,
497558
model_version=model_version,
559+
string_index_type=string_index_type,
498560
show_stats=show_stats,
499561
cls=kwargs.pop("cls", linked_entities_result),
500562
**kwargs
@@ -724,14 +786,29 @@ def extract_key_phrases(
724786
model_version = kwargs.pop("model_version", None)
725787
show_stats = kwargs.pop("show_stats", None)
726788
disable_service_logs = kwargs.pop("disable_service_logs", None)
727-
if disable_service_logs is not None:
728-
kwargs["logging_opt_out"] = disable_service_logs
729789

730790
try:
791+
if is_language_api(self._api_version):
792+
models = self._client.models(api_version=self._api_version)
793+
return self._client.analyze_text(
794+
body=models.AnalyzeTextKeyPhraseExtractionInput(
795+
analysis_input={"documents": docs},
796+
parameters=models.KeyPhraseTaskParameters(
797+
logging_opt_out=disable_service_logs,
798+
model_version=model_version,
799+
)
800+
),
801+
show_stats=show_stats,
802+
cls=kwargs.pop("cls", key_phrases_result),
803+
**kwargs
804+
)
805+
806+
# api_versions 3.0, 3.1
731807
return self._client.key_phrases(
732808
documents=docs,
733809
model_version=model_version,
734810
show_stats=show_stats,
811+
logging_opt_out=disable_service_logs,
735812
cls=kwargs.pop("cls", key_phrases_result),
736813
**kwargs
737814
)
@@ -813,17 +890,11 @@ def analyze_sentiment(
813890
show_stats = kwargs.pop("show_stats", None)
814891
show_opinion_mining = kwargs.pop("show_opinion_mining", None)
815892
disable_service_logs = kwargs.pop("disable_service_logs", None)
816-
if disable_service_logs is not None:
817-
kwargs["logging_opt_out"] = disable_service_logs
818-
819893
string_index_type = _check_string_index_type_arg(
820894
kwargs.pop("string_index_type", None),
821895
self._api_version,
822896
string_index_type_default=self._string_index_type_default,
823897
)
824-
if string_index_type:
825-
kwargs.update({"string_index_type": string_index_type})
826-
827898
if show_opinion_mining is not None:
828899
if (
829900
self._api_version == TextAnalyticsApiVersion.V3_0
@@ -832,12 +903,32 @@ def analyze_sentiment(
832903
raise ValueError(
833904
"'show_opinion_mining' is only available for API version v3.1 and up"
834905
)
835-
kwargs.update({"opinion_mining": show_opinion_mining})
836906

837907
try:
908+
if is_language_api(self._api_version):
909+
models = self._client.models(api_version=self._api_version)
910+
return self._client.analyze_text(
911+
body=models.AnalyzeTextSentimentAnalysisInput(
912+
analysis_input={"documents": docs},
913+
parameters=models.SentimentAnalysisTaskParameters(
914+
logging_opt_out=disable_service_logs,
915+
model_version=model_version,
916+
string_index_type=string_index_type,
917+
opinion_mining=show_opinion_mining,
918+
)
919+
),
920+
show_stats=show_stats,
921+
cls=kwargs.pop("cls", sentiment_result),
922+
**kwargs
923+
)
924+
925+
# api_versions 3.0, 3.1
838926
return self._client.sentiment(
839927
documents=docs,
928+
logging_opt_out=disable_service_logs,
840929
model_version=model_version,
930+
string_index_type=string_index_type,
931+
opinion_mining=show_opinion_mining,
841932
show_stats=show_stats,
842933
cls=kwargs.pop("cls", sentiment_result),
843934
**kwargs

sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@
44
# ------------------------------------
55

66
VERSION = "5.2.0b4"
7-
DEFAULT_API_VERSION = "v3.2-preview.2"
7+
DEFAULT_API_VERSION = "2022-03-01-preview"

0 commit comments

Comments
 (0)