Skip to content

Commit 57ce420

Browse files
[Textanalytics] python sdk 20251115preview (#43666)
* Configurations: 'specification/cognitiveservices/data-plane/LanguageAnalyzeText/tspconfig.yaml', API Version: 2025-11-15-preview, SDK Release Type: beta, and CommitSHA: '856560f304f6a4df7c50f17b7d72ac73884fab74' in SpecRepo: 'https://github.com/Azure/azure-rest-api-specs' Pipeline run: https://dev.azure.com/azure-sdk/internal/_build/results?buildId=5503780 Refer to https://eng.ms/docs/products/azure-developer-experience/develop/sdk-release/sdk-release-prerequisites to prepare for SDK release. * updated clientname to TextAnalysisClient * removed generated tests and samples * removed generated tests * delete * added patch from last preview * set begin_analyze_text_job to private * updated version * added test for recognize_pii_redaction_policies * added test for pii_redaction_policies_async * make language optional and added test for pii_confidence_score_threshold * added test for pii_confidence_score_threshold_async * updated the tests for new features * update all test records * added samples for the new features * update assets.json * updated the change log * updated readme * fixed spelling error * add samples of new features in readme * update snippets * removed 3.0, 3.1 --------- Co-authored-by: azure-sdk <azuresdk@microsoft.com>
1 parent f6d99be commit 57ce420

File tree

57 files changed

+1656
-215
lines changed

Some content is hidden

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

57 files changed

+1656
-215
lines changed

sdk/cognitivelanguage/azure-ai-textanalytics/CHANGELOG.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,16 @@
11
# Release History
22

3+
## 6.0.0b2 (2025-11-06)
4+
5+
This version of the client library defaults to the service API version `2025-11-15-preview`.
6+
7+
### Features Added
8+
9+
- Added support for **multiple redaction policies** in a single request.
10+
- Added **synthetic replacement redaction**, enabling selected PII types (e.g., Person, Email) to be replaced with realistic synthetic values rather than masked.
11+
- Added **confidence score thresholding**, allowing customers to define minimum confidence levels—globally or per-entity—so that only entities meeting the required confidence are returned.
12+
- Added **entity validation control** with the `disableEntityValidation` parameter, allowing users to bypass entity validation when needed.
13+
314
## 6.0.0b1 (2025-09-11)
415

516
This version of the client library defaults to the service API version `2025-05-15-preview`.
@@ -216,7 +227,7 @@ Note: this version will be the last to officially support Python 3.5, future ver
216227

217228
### Features Added
218229

219-
- Added `catagories_filter` to `RecognizePiiEntitiesAction`
230+
- Added `categories_filter` to `RecognizePiiEntitiesAction`
220231
- Added `HealthcareEntityCategory`
221232
- Added AAD support for the `begin_analyze_healthcare_entities` methods.
222233

sdk/cognitivelanguage/azure-ai-textanalytics/README.md

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ This table shows the relationship between SDK versions and supported API version
8181

8282
| SDK version | Supported API version of service |
8383
| ------------ | --------------------------------- |
84-
| 6.0.0b1 - Latest preview release | 3.0, 3.1, 2022-05-01, 2023-04-01, 2024-11-01, 2024-11-15-preview, 2025-05-15-preview (default) |
84+
| 6.0.0b2 - Latest preview release | 2022-05-01, 2023-04-01, 2024-11-01, 2025-11-15-preview (default) |
85+
| 6.0.0b1 | 2022-05-01, 2023-04-01, 2024-11-01, 2025-05-15-preview (default) |
8586
| 5.3.X - Latest stable release | 3.0, 3.1, 2022-05-01, 2023-04-01 (default) |
8687
| 5.2.X | 3.0, 3.1, 2022-05-01 (default) |
8788
| 5.1.0 | 3.0, 3.1 (default) |
@@ -253,14 +254,16 @@ Sample code snippets are provided to illustrate using long-running operations [b
253254

254255
The following section provides several code snippets covering some of the most common Language service tasks, including:
255256

256-
- [Analyze Sentiment](#analyze-sentiment "Analyze sentiment")
257-
- [Recognize Entities](#recognize-entities "Recognize entities")
258-
- [Recognize Linked Entities](#recognize-linked-entities "Recognize linked entities")
259-
- [Recognize PII Entities](#recognize-pii-entities "Recognize pii entities")
260-
- [Extract Key Phrases](#extract-key-phrases "Extract key phrases")
261-
- [Detect Language](#detect-language "Detect language")
262-
- [Healthcare Entities Analysis](#healthcare-entities-analysis "Healthcare Entities Analysis")
263-
- [Multiple Analysis](#multiple-analysis "Multiple analysis")
257+
- [Analyze Sentiment][analyze_sentiment_sample]
258+
- [Recognize Entities][recognize_entities_sample]
259+
- [Recognize Linked Entities][recognize_linked_entities_sample]
260+
- [Recognize PII Entities][recognize_pii_entities_sample]
261+
- [Recognize PII Entities with multiple redaction policies][recognize_pii_entities_with_redaction_policies_sample]
262+
- [Recognize PII Entities with confidence score][recognize_pii_entities_with_confidence_score_sample]
263+
- [Extract Key Phrases][extract_key_phrases_sample]
264+
- [Detect Language][detect_language_sample]
265+
- [Healthcare Entities Analysis][analyze_healthcare_entities_sample]
266+
- [Multiple Analysis][analyze_sample]
264267
- [Custom Entity Recognition][recognize_custom_entities_sample]
265268
- [Custom Single Label Classification][single_label_classify_sample]
266269
- [Custom Multi Label Classification][multi_label_classify_sample]
@@ -672,14 +675,10 @@ def sample_detect_language():
672675
client = TextAnalysisClient(endpoint, credential=credential)
673676

674677
# Build input
675-
text_a = (
676-
"Sentences in different languages."
677-
)
678+
text_a = "Sentences in different languages."
678679

679680
body = TextLanguageDetectionInput(
680-
text_input=LanguageDetectionTextInput(
681-
language_inputs=[LanguageInput(id="A", text=text_a)]
682-
)
681+
text_input=LanguageDetectionTextInput(language_inputs=[LanguageInput(id="A", text=text_a)])
683682
)
684683

685684
# Sync (non-LRO) call
@@ -793,12 +792,12 @@ def sample_analyze_healthcare_entities():
793792
print(f"Kind: {op_result.kind}")
794793

795794
hc_result = op_result.results
796-
for doc in (hc_result.documents or []):
795+
for doc in hc_result.documents or []:
797796
print(f"\nDocument ID: {doc.id}")
798797

799798
# Entities
800799
print("Entities:")
801-
for entity in (doc.entities or []):
800+
for entity in doc.entities or []:
802801
print(f" Text: {entity.text}")
803802
print(f" Category: {entity.category}")
804803
print(f" Offset: {entity.offset}")
@@ -812,9 +811,9 @@ def sample_analyze_healthcare_entities():
812811

813812
# Relations
814813
print("Relations:")
815-
for relation in (doc.relations or []):
814+
for relation in doc.relations or []:
816815
print(f" Relation type: {relation.relation_type}")
817-
for rel_entity in (relation.entities or []):
816+
for rel_entity in relation.entities or []:
818817
print(f" Role: {rel_entity.role}")
819818
print(f" Ref: {rel_entity.ref}")
820819
print()
@@ -883,9 +882,7 @@ def sample_analyze():
883882
" offers services for childcare in case you want that."
884883
)
885884

886-
text_b = (
887-
"Sentences in different languages."
888-
)
885+
text_b = "Sentences in different languages."
889886

890887
text_c = (
891888
"That was the best day of my life! We went on a 4 day trip where we stayed at Hotel Foo. They had"
@@ -943,7 +940,7 @@ def sample_analyze():
943940
print(f" Confidence score: {entity.confidence_score}")
944941
print()
945942
for err in action_result.results.errors:
946-
print(f' Error in document: {err.id}!')
943+
print(f" Error in document: {err.id}!")
947944
print(f" Document error: {err.error}")
948945

949946
# --- Key Phrases ---
@@ -955,7 +952,7 @@ def sample_analyze():
955952
print(f" {kp}")
956953
print()
957954
for err in action_result.results.errors:
958-
print(f' Error in document: {err.id}!')
955+
print(f" Error in document: {err.id}!")
959956
print(f" Document error: {err.error}")
960957
```
961958

@@ -1031,6 +1028,8 @@ Common scenarios
10311028
- Analyze sentiment: [sample_analyze_sentiment.py][analyze_sentiment_sample] ([async version][analyze_sentiment_sample_async])
10321029
- Recognize entities: [sample_recognize_entities.py][recognize_entities_sample] ([async version][recognize_entities_sample_async])
10331030
- Recognize personally identifiable information: [sample_recognize_pii_entities.py][recognize_pii_entities_sample] ([async version][recognize_pii_entities_sample_async])
1031+
- Recognize personally identifiable information(Multiple redaction policies): [sample_recognize_pii_entities_with_redaction_policies.py][recognize_pii_entities_with_redaction_policies_sample] ([async version][recognize_pii_entities_with_redaction_policies_sample_async])
1032+
- Recognize personally identifiable information(Confidence score): [sample_recognize_pii_entities_with_confidence_score.py][recognize_pii_entities_with_confidence_score_sample] ([async version][recognize_pii_entities_with_confidence_score_sample_async])
10341033
- Recognize linked entities: [sample_recognize_linked_entities.py][recognize_linked_entities_sample] ([async version][recognize_linked_entities_sample_async])
10351034
- Extract key phrases: [sample_extract_key_phrases.py][extract_key_phrases_sample] ([async version][extract_key_phrases_sample_async])
10361035
- Detect language: [sample_detect_language.py][detect_language_sample] ([async version][detect_language_sample_async])
@@ -1127,6 +1126,10 @@ This project has adopted the [Microsoft Open Source Code of Conduct][code_of_con
11271126
[recognize_linked_entities_sample_async]: https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/cognitivelanguage/azure-ai-textanalytics/samples/async_samples/sample_recognize_linked_entities_async.py
11281127
[recognize_pii_entities_sample]: https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/cognitivelanguage/azure-ai-textanalytics/samples/sample_recognize_pii_entities.py
11291128
[recognize_pii_entities_sample_async]: https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/cognitivelanguage/azure-ai-textanalytics/samples/async_samples/sample_recognize_pii_entities_async.py
1129+
[recognize_pii_entities_with_redaction_policies_sample]: https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/cognitivelanguage/azure-ai-textanalytics/samples/sample_recognize_pii_entities_with_redaction_policies.py
1130+
[recognize_pii_entities_with_redaction_policies_sample_async]: https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/cognitivelanguage/azure-ai-textanalytics/samples/async_samples/sample_recognize_pii_entities_with_redaction_policies_async.py
1131+
[recognize_pii_entities_with_confidence_score_sample]: https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/cognitivelanguage/azure-ai-textanalytics/samples/sample_recognize_pii_entities_with_confidence_score.py
1132+
[recognize_pii_entities_with_confidence_score_sample_async]: https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/cognitivelanguage/azure-ai-textanalytics/samples/async_samples/sample_recognize_pii_entities_with_confidence_score_async.py
11301133
[analyze_healthcare_entities_sample]: https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/cognitivelanguage/azure-ai-textanalytics/samples/sample_analyze_healthcare_entities.py
11311134
[analyze_healthcare_entities_sample_async]: https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/cognitivelanguage/azure-ai-textanalytics/samples/async_samples/sample_analyze_healthcare_entities_async.py
11321135
[analyze_sample]: https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/cognitivelanguage/azure-ai-textanalytics/samples/sample_analyze_actions.py
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
"apiVersion": "2025-05-15-preview"
2+
"apiVersion": "2025-11-15-preview"
33
}

sdk/cognitivelanguage/azure-ai-textanalytics/apiview-properties.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"azure.ai.textanalytics.models.AbstractiveSummary": "Language.Text.AbstractiveSummary",
1111
"azure.ai.textanalytics.models.AbstractiveSummaryActionResult": "Language.Text.AbstractiveSummaryDocumentResultWithDetectedLanguage",
1212
"azure.ai.textanalytics.models.BaseMetadata": "Language.Text.BaseMetadata",
13+
"azure.ai.textanalytics.models.AddressMetadata": "Language.Text.AddressMetadata",
1314
"azure.ai.textanalytics.models.AgeMetadata": "Language.Text.AgeMetadata",
1415
"azure.ai.textanalytics.models.EntityOverlapPolicy": "Language.Text.BaseEntityOverlapPolicy",
1516
"azure.ai.textanalytics.models.AllowOverlapEntityPolicyType": "Language.Text.AllowOverlapEntityPolicyType",
@@ -28,6 +29,8 @@
2829
"azure.ai.textanalytics.models.CharacterMaskPolicyType": "Language.Text.CharacterMaskPolicyType",
2930
"azure.ai.textanalytics.models.ClassificationActionResult": "Language.Text.ClassificationDocumentResultWithDetectedLanguage",
3031
"azure.ai.textanalytics.models.ClassificationResult": "Language.Text.ClassificationResult",
32+
"azure.ai.textanalytics.models.ConfidenceScoreThreshold": "Language.Text.ConfidenceScoreThreshold",
33+
"azure.ai.textanalytics.models.ConfidenceScoreThresholdOverride": "Language.Text.ConfidenceScoreThresholdOverride",
3134
"azure.ai.textanalytics.models.CurrencyMetadata": "Language.Text.CurrencyMetadata",
3235
"azure.ai.textanalytics.models.CustomEntitiesActionContent": "Language.Text.CustomEntitiesTaskParameters",
3336
"azure.ai.textanalytics.models.CustomEntitiesLROTask": "Language.Text.CustomEntitiesLROTask",
@@ -125,6 +128,7 @@
125128
"azure.ai.textanalytics.models.SentimentResult": "Language.Text.SentimentResponse",
126129
"azure.ai.textanalytics.models.SpeedMetadata": "Language.Text.SpeedMetadata",
127130
"azure.ai.textanalytics.models.SummaryContext": "Language.Text.SummaryContext",
131+
"azure.ai.textanalytics.models.SyntheticReplacementPolicyType": "Language.Text.SyntheticReplacementPolicyType",
128132
"azure.ai.textanalytics.models.TargetConfidenceScoreLabel": "Language.Text.TargetConfidenceScoreLabel",
129133
"azure.ai.textanalytics.models.TargetRelation": "Language.Text.TargetRelation",
130134
"azure.ai.textanalytics.models.TemperatureMetadata": "Language.Text.TemperatureMetadata",

sdk/cognitivelanguage/azure-ai-textanalytics/assets.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
"AssetsRepo": "Azure/azure-sdk-assets",
33
"AssetsRepoPrefixPath": "python",
44
"TagPrefix": "python/cognitivelanguage/azure-ai-textanalytics",
5-
"Tag": "python/cognitivelanguage/azure-ai-textanalytics_92b0429189"
5+
"Tag": "python/cognitivelanguage/azure-ai-textanalytics_104e72feb4"
66
}

sdk/cognitivelanguage/azure-ai-textanalytics/azure/ai/textanalytics/_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class TextAnalysisClient(_TextAnalysisClientOperationsMixin):
4040
:type credential: ~azure.core.credentials.AzureKeyCredential or
4141
~azure.core.credentials.TokenCredential
4242
:keyword api_version: The API version to use for this operation. Default value is
43-
"2025-05-15-preview". Note that overriding this default value may result in unsupported
43+
"2025-11-15-preview". Note that overriding this default value may result in unsupported
4444
behavior.
4545
:paramtype api_version: str
4646
:keyword int polling_interval: Default waiting time between two polls for LRO operations if no

sdk/cognitivelanguage/azure-ai-textanalytics/azure/ai/textanalytics/_configuration.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,13 @@ class TextAnalysisClientConfiguration: # pylint: disable=too-many-instance-attr
3131
:type credential: ~azure.core.credentials.AzureKeyCredential or
3232
~azure.core.credentials.TokenCredential
3333
:keyword api_version: The API version to use for this operation. Default value is
34-
"2025-05-15-preview". Note that overriding this default value may result in unsupported
34+
"2025-11-15-preview". Note that overriding this default value may result in unsupported
3535
behavior.
3636
:paramtype api_version: str
3737
"""
3838

3939
def __init__(self, endpoint: str, credential: Union[AzureKeyCredential, "TokenCredential"], **kwargs: Any) -> None:
40-
api_version: str = kwargs.pop("api_version", "2025-05-15-preview")
40+
api_version: str = kwargs.pop("api_version", "2025-11-15-preview")
4141

4242
if endpoint is None:
4343
raise ValueError("Parameter 'endpoint' must not be None.")

sdk/cognitivelanguage/azure-ai-textanalytics/azure/ai/textanalytics/_operations/_operations.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
# Code generated by Microsoft (R) Python Code Generator.
66
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
77
# --------------------------------------------------------------------------
8-
from collections.abc import MutableMapping # pylint:disable=import-error
8+
from collections.abc import MutableMapping
99
from io import IOBase
1010
import json
1111
from typing import Any, Callable, IO, Iterator, Optional, TypeVar, Union, cast, overload
@@ -48,7 +48,7 @@ def build_text_analysis_analyze_text_request(*, show_stats: Optional[bool] = Non
4848
_params = case_insensitive_dict(kwargs.pop("params", {}) or {})
4949

5050
content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None))
51-
api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-05-15-preview"))
51+
api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-11-15-preview"))
5252
accept = _headers.pop("Accept", "application/json")
5353

5454
# Construct URL
@@ -78,7 +78,7 @@ def build_text_analysis_get_job_status_request( # pylint: disable=name-too-long
7878
_headers = case_insensitive_dict(kwargs.pop("headers", {}) or {})
7979
_params = case_insensitive_dict(kwargs.pop("params", {}) or {})
8080

81-
api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-05-15-preview"))
81+
api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-11-15-preview"))
8282
accept = _headers.pop("Accept", "application/json")
8383

8484
# Construct URL
@@ -109,7 +109,7 @@ def build_text_analysis_analyze_text_job_request(**kwargs: Any) -> HttpRequest:
109109
_params = case_insensitive_dict(kwargs.pop("params", {}) or {})
110110

111111
content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None))
112-
api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-05-15-preview"))
112+
api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-11-15-preview"))
113113
# Construct URL
114114
_url = "/analyze-text/jobs"
115115

@@ -126,7 +126,7 @@ def build_text_analysis_analyze_text_job_request(**kwargs: Any) -> HttpRequest:
126126
def build_text_analysis_cancel_job_request(job_id: str, **kwargs: Any) -> HttpRequest:
127127
_params = case_insensitive_dict(kwargs.pop("params", {}) or {})
128128

129-
api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-05-15-preview"))
129+
api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2025-11-15-preview"))
130130
# Construct URL
131131
_url = "/analyze-text/jobs/{jobId}:cancel"
132132
path_format_arguments = {

sdk/cognitivelanguage/azure-ai-textanalytics/azure/ai/textanalytics/_patch.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ def begin_analyze_text_job(
151151
display_name: Optional[str] = None,
152152
default_language: Optional[str] = None,
153153
cancel_after: Optional[float] = None,
154-
**kwargs: Any
154+
**kwargs: Any,
155155
) -> AnalyzeTextLROPoller[ItemPaged["TextActions"]]:
156156
"""Submit a collection of text documents for analysis. Specify one or more unique tasks to be
157157
executed as a long-running operation.
@@ -223,11 +223,11 @@ def begin_analyze_text_job( # type: ignore[override]
223223
display_name: Optional[str] = None,
224224
default_language: Optional[str] = None,
225225
cancel_after: Optional[float] = None,
226-
**kwargs: Any
226+
**kwargs: Any,
227227
) -> AnalyzeTextLROPoller[ItemPaged["TextActions"]]:
228228
"""Submit a collection of text documents for analysis. Specify one or more unique tasks to be
229229
executed as a long-running operation.
230-
230+
231231
:param body: Is either a JSON type or a IO[bytes] type. Required.
232232
:type body: JSON or IO[bytes]
233233
:keyword text_input: Contains the input to be analyzed. Required.
@@ -313,7 +313,7 @@ def get_long_running_output(pipeline_response: PipelineResponse[HttpRequest, Htt
313313
continuation_token=cont_token,
314314
)
315315

316-
initial_kwargs = dict( # pylint:disable=use-dict-literal
316+
initial_kwargs = dict( # pylint:disable=use-dict-literal
317317
text_input=text_input,
318318
actions=actions,
319319
display_name=display_name,

sdk/cognitivelanguage/azure-ai-textanalytics/azure/ai/textanalytics/_utils/model_base.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
from datetime import datetime, date, time, timedelta, timezone
2323
from json import JSONEncoder
2424
import xml.etree.ElementTree as ET
25-
from collections.abc import MutableMapping # pylint:disable=import-error
25+
from collections.abc import MutableMapping
2626
from typing_extensions import Self
2727
import isodate
2828
from azure.core.exceptions import DeserializationError
@@ -640,7 +640,7 @@ def __new__(cls, *args: typing.Any, **kwargs: typing.Any) -> Self:
640640
cls._attr_to_rest_field: dict[str, _RestField] = dict(attr_to_rest_field.items())
641641
cls._calculated.add(f"{cls.__module__}.{cls.__qualname__}")
642642

643-
return super().__new__(cls) # pylint:disable=no-value-for-parameter
643+
return super().__new__(cls)
644644

645645
def __init_subclass__(cls, discriminator: typing.Optional[str] = None) -> None:
646646
for base in cls.__bases__:

0 commit comments

Comments
 (0)