From 7450dfc151d939832e38baccd26e2bd929837f8e Mon Sep 17 00:00:00 2001 From: iscai-msft Date: Thu, 27 Aug 2020 16:59:07 -0400 Subject: [PATCH 1/3] return None for offset and length if api version is v3.0 --- .../azure-ai-textanalytics/CHANGELOG.md | 2 +- .../azure/ai/textanalytics/_models.py | 51 +++++++++++++++---- 2 files changed, 41 insertions(+), 12 deletions(-) diff --git a/sdk/textanalytics/azure-ai-textanalytics/CHANGELOG.md b/sdk/textanalytics/azure-ai-textanalytics/CHANGELOG.md index 3a6a10c372b0..372b10411b81 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/CHANGELOG.md +++ b/sdk/textanalytics/azure-ai-textanalytics/CHANGELOG.md @@ -6,7 +6,7 @@ - We are now targeting the service's v3.1-preview.1 API as the default. If you would like to still use version v3.0 of the service, pass in `v3.0` to the kwarg `api_version` when creating your TextAnalyticsClient - We have added an API `recognize_pii_entities` which returns entities containing personal information for a batch of documents. Only available for API version v3.1-preview.1 and up. -- Added `offset` and `length` properties for `CategorizedEntity`, `SentenceSentiment`, and `LinkedEntityMatch`. +- Added `offset` and `length` properties for `CategorizedEntity`, `SentenceSentiment`, and `LinkedEntityMatch`. These properties are only available for API versions v3.1-preview.1 and up. - `length` is the number of characters in the text of these models - `offset` is the offset of the text from the start of the document - We now have added support for opinion mining. To use this feature, you need to make sure you are using the service's diff --git a/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/_models.py b/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/_models.py index 602a8ecc4b8e..849ae72d54d5 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/_models.py +++ b/sdk/textanalytics/azure-ai-textanalytics/azure/ai/textanalytics/_models.py @@ -4,11 +4,13 @@ # Licensed under the MIT License. # ------------------------------------ import re -from ._generated.v3_0.models._models import ( +from ._generated.models import ( LanguageInput, - MultiLanguageInput + MultiLanguageInput, ) +from ._generated.v3_0 import models as _v3_0_models + def _get_indices(relation): return [int(s) for s in re.findall(r"\d+", relation)] @@ -207,7 +209,9 @@ class CategorizedEntity(DictMixin): :ivar subcategory: Entity subcategory, such as Age/Year/TimeRange etc :vartype subcategory: str :ivar int offset: The entity text offset from the start of the document. - :ivar int length: The length of the entity text. + Only returned for api versions v3.1-preview.1 and up. + :ivar int length: The length of the entity text. Only returned for + api versions v3.1-preview.1 and up. :ivar confidence_score: Confidence score between 0 and 1 of the extracted entity. :vartype confidence_score: float @@ -223,12 +227,19 @@ def __init__(self, **kwargs): @classmethod def _from_generated(cls, entity): + offset = entity.offset + length = entity.length + if isinstance(entity, _v3_0_models.Entity): + # we do not return offset and length for v3.0 since + # the correct encoding was not introduced for v3.0 + offset = None + length = None return cls( text=entity.text, category=entity.category, subcategory=entity.subcategory, - offset=entity.offset, - length=entity.length, + offset=offset, + length=length, confidence_score=entity.confidence_score, ) @@ -636,7 +647,9 @@ class LinkedEntityMatch(DictMixin): :vartype confidence_score: float :ivar text: Entity text as appears in the request. :ivar int offset: The linked entity match text offset from the start of the document. - :ivar int length: The length of the linked entity match text. + Only returned for api versions v3.1-preview.1 and up. + :ivar int length: The length of the linked entity match text. Only returned for + api versions v3.1-preview.1 and up. :vartype text: str """ @@ -648,11 +661,18 @@ def __init__(self, **kwargs): @classmethod def _from_generated(cls, match): + offset = match.offset + length = match.length + if isinstance(match, _v3_0_models.Match): + # we do not return offset and length for v3.0 since + # the correct encoding was not introduced for v3.0 + offset = None + length = None return cls( confidence_score=match.confidence_score, text=match.text, - offset=match.offset, - length=match.length + offset=offset, + length=length ) def __repr__(self): @@ -739,7 +759,9 @@ class SentenceSentiment(DictMixin): :vartype confidence_scores: ~azure.ai.textanalytics.SentimentConfidenceScores :ivar int offset: The sentence offset from the start of the document. - :ivar int length: The length of the sentence. + Only returned for api versions v3.1-preview.1 and up. + :ivar int length: The length of the sentence. Only returned for api + versions v3.1-preview.1 and up. :ivar mined_opinions: The list of opinions mined from this sentence. For example in "The food is good, but the service is bad", we would mind these two opinions "food is good", "service is bad". Only returned @@ -758,6 +780,13 @@ def __init__(self, **kwargs): @classmethod def _from_generated(cls, sentence, results): + offset = sentence.offset + length = sentence.length + if isinstance(sentence, _v3_0_models.SentenceSentiment): + # we do not return offset and length for v3.0 since + # the correct encoding was not introduced for v3.0 + offset = None + length = None if hasattr(sentence, "aspects"): mined_opinions = ( [MinedOpinion._from_generated(aspect, results) for aspect in sentence.aspects] # pylint: disable=protected-access @@ -769,8 +798,8 @@ def _from_generated(cls, sentence, results): text=sentence.text, sentiment=sentence.sentiment, confidence_scores=SentimentConfidenceScores._from_generated(sentence.confidence_scores), # pylint: disable=protected-access - offset=sentence.offset, - length=sentence.length, + offset=offset, + length=length, mined_opinions=mined_opinions ) From f0bc9644655dcb1cb5168ff94e4df93ccaaf322b Mon Sep 17 00:00:00 2001 From: iscai-msft Date: Thu, 27 Aug 2020 16:59:16 -0400 Subject: [PATCH 2/3] add tests --- ...o_offset_length_v3_sentence_sentiment.yaml | 45 ++++++++++++++++++ ..._analyze_sentiment.test_offset_length.yaml | 45 ++++++++++++++++++ ...o_offset_length_v3_sentence_sentiment.yaml | 34 ++++++++++++++ ...ze_sentiment_async.test_offset_length.yaml | 34 ++++++++++++++ ...offset_length_v3_categorized_entities.yaml | 45 ++++++++++++++++++ ...recognize_entities.test_offset_length.yaml | 45 ++++++++++++++++++ ...offset_length_v3_categorized_entities.yaml | 34 ++++++++++++++ ...ize_entities_async.test_offset_length.yaml | 34 ++++++++++++++ ..._offset_length_v3_linked_entity_match.yaml | 47 +++++++++++++++++++ ...ze_linked_entities.test_offset_length.yaml | 47 +++++++++++++++++++ ..._offset_length_v3_linked_entity_match.yaml | 36 ++++++++++++++ ...ked_entities_async.test_offset_length.yaml | 36 ++++++++++++++ .../tests/test_analyze_sentiment.py | 22 ++++++++- .../tests/test_analyze_sentiment_async.py | 22 ++++++++- .../tests/test_recognize_entities.py | 31 +++++++++++- .../tests/test_recognize_entities_async.py | 31 +++++++++++- .../tests/test_recognize_linked_entities.py | 36 +++++++++++++- .../test_recognize_linked_entities_async.py | 36 +++++++++++++- 18 files changed, 654 insertions(+), 6 deletions(-) create mode 100644 sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_analyze_sentiment.test_no_offset_length_v3_sentence_sentiment.yaml create mode 100644 sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_analyze_sentiment.test_offset_length.yaml create mode 100644 sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_analyze_sentiment_async.test_no_offset_length_v3_sentence_sentiment.yaml create mode 100644 sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_analyze_sentiment_async.test_offset_length.yaml create mode 100644 sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_entities.test_no_offset_length_v3_categorized_entities.yaml create mode 100644 sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_entities.test_offset_length.yaml create mode 100644 sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_entities_async.test_no_offset_length_v3_categorized_entities.yaml create mode 100644 sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_entities_async.test_offset_length.yaml create mode 100644 sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_linked_entities.test_no_offset_length_v3_linked_entity_match.yaml create mode 100644 sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_linked_entities.test_offset_length.yaml create mode 100644 sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_linked_entities_async.test_no_offset_length_v3_linked_entity_match.yaml create mode 100644 sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_linked_entities_async.test_offset_length.yaml diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_analyze_sentiment.test_no_offset_length_v3_sentence_sentiment.yaml b/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_analyze_sentiment.test_no_offset_length_v3_sentence_sentiment.yaml new file mode 100644 index 000000000000..175a126fa750 --- /dev/null +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_analyze_sentiment.test_no_offset_length_v3_sentence_sentiment.yaml @@ -0,0 +1,45 @@ +interactions: +- request: + body: '{"documents": [{"id": "0", "text": "I like nature. I do not like being + inside", "language": "en"}]}' + headers: + Accept: + - application/json, text/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '99' + Content-Type: + - application/json + User-Agent: + - azsdk-python-ai-textanalytics/5.0.1 Python/3.8.5 (macOS-10.13.6-x86_64-i386-64bit) + method: POST + uri: https://westus2.api.cognitive.microsoft.com/text/analytics/v3.0/sentiment?showStats=false + response: + body: + string: '{"documents":[{"id":"0","sentiment":"mixed","confidenceScores":{"positive":0.44,"neutral":0.27,"negative":0.29},"sentences":[{"sentiment":"positive","confidenceScores":{"positive":0.88,"neutral":0.11,"negative":0.01},"offset":0,"length":14,"text":"I + like nature."},{"sentiment":"negative","confidenceScores":{"positive":0.01,"neutral":0.43,"negative":0.56},"offset":15,"length":26,"text":"I + do not like being inside"}],"warnings":[]}],"errors":[],"modelVersion":"2020-04-01"}' + headers: + apim-request-id: + - 94e0a047-a7be-4d12-a4ec-81ef3f496950 + content-type: + - application/json; charset=utf-8 + csp-billing-usage: + - CognitiveServices.TextAnalytics.BatchScoring=1 + date: + - Thu, 27 Aug 2020 20:56:20 GMT + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + transfer-encoding: + - chunked + x-content-type-options: + - nosniff + x-envoy-upstream-service-time: + - '78' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_analyze_sentiment.test_offset_length.yaml b/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_analyze_sentiment.test_offset_length.yaml new file mode 100644 index 000000000000..415f3f483fc1 --- /dev/null +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_analyze_sentiment.test_offset_length.yaml @@ -0,0 +1,45 @@ +interactions: +- request: + body: '{"documents": [{"id": "0", "text": "I like nature. I do not like being + inside", "language": "en"}]}' + headers: + Accept: + - application/json, text/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '99' + Content-Type: + - application/json + User-Agent: + - azsdk-python-ai-textanalytics/5.0.1 Python/3.8.5 (macOS-10.13.6-x86_64-i386-64bit) + method: POST + uri: https://westus2.api.cognitive.microsoft.com/text/analytics/v3.1-preview.1/sentiment?showStats=false&stringIndexType=TextElements_v8 + response: + body: + string: '{"documents":[{"id":"0","sentiment":"mixed","confidenceScores":{"positive":0.44,"neutral":0.27,"negative":0.29},"sentences":[{"sentiment":"positive","confidenceScores":{"positive":0.88,"neutral":0.11,"negative":0.01},"offset":0,"length":14,"text":"I + like nature."},{"sentiment":"negative","confidenceScores":{"positive":0.01,"neutral":0.43,"negative":0.56},"offset":15,"length":26,"text":"I + do not like being inside"}],"warnings":[]}],"errors":[],"modelVersion":"2020-04-01"}' + headers: + apim-request-id: + - d37a7a18-d27f-40f5-a128-4068b523ac68 + content-type: + - application/json; charset=utf-8 + csp-billing-usage: + - CognitiveServices.TextAnalytics.BatchScoring=1 + date: + - Thu, 27 Aug 2020 20:56:20 GMT + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + transfer-encoding: + - chunked + x-content-type-options: + - nosniff + x-envoy-upstream-service-time: + - '80' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_analyze_sentiment_async.test_no_offset_length_v3_sentence_sentiment.yaml b/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_analyze_sentiment_async.test_no_offset_length_v3_sentence_sentiment.yaml new file mode 100644 index 000000000000..b4a940938941 --- /dev/null +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_analyze_sentiment_async.test_no_offset_length_v3_sentence_sentiment.yaml @@ -0,0 +1,34 @@ +interactions: +- request: + body: '{"documents": [{"id": "0", "text": "I like nature. I do not like being + inside", "language": "en"}]}' + headers: + Accept: + - application/json, text/json + Content-Length: + - '99' + Content-Type: + - application/json + User-Agent: + - azsdk-python-ai-textanalytics/5.0.1 Python/3.8.5 (macOS-10.13.6-x86_64-i386-64bit) + method: POST + uri: https://westus2.api.cognitive.microsoft.com/text/analytics/v3.0/sentiment?showStats=false + response: + body: + string: '{"documents":[{"id":"0","sentiment":"mixed","confidenceScores":{"positive":0.44,"neutral":0.27,"negative":0.29},"sentences":[{"sentiment":"positive","confidenceScores":{"positive":0.88,"neutral":0.11,"negative":0.01},"offset":0,"length":14,"text":"I + like nature."},{"sentiment":"negative","confidenceScores":{"positive":0.01,"neutral":0.43,"negative":0.56},"offset":15,"length":26,"text":"I + do not like being inside"}],"warnings":[]}],"errors":[],"modelVersion":"2020-04-01"}' + headers: + apim-request-id: 0577ce48-c371-418e-b478-cc085c7ecaf8 + content-type: application/json; charset=utf-8 + csp-billing-usage: CognitiveServices.TextAnalytics.BatchScoring=1 + date: Thu, 27 Aug 2020 20:56:21 GMT + strict-transport-security: max-age=31536000; includeSubDomains; preload + transfer-encoding: chunked + x-content-type-options: nosniff + x-envoy-upstream-service-time: '79' + status: + code: 200 + message: OK + url: https://westus2.api.cognitive.microsoft.com//text/analytics/v3.0/sentiment?showStats=false +version: 1 diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_analyze_sentiment_async.test_offset_length.yaml b/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_analyze_sentiment_async.test_offset_length.yaml new file mode 100644 index 000000000000..3250bf7113e2 --- /dev/null +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_analyze_sentiment_async.test_offset_length.yaml @@ -0,0 +1,34 @@ +interactions: +- request: + body: '{"documents": [{"id": "0", "text": "I like nature. I do not like being + inside", "language": "en"}]}' + headers: + Accept: + - application/json, text/json + Content-Length: + - '99' + Content-Type: + - application/json + User-Agent: + - azsdk-python-ai-textanalytics/5.0.1 Python/3.8.5 (macOS-10.13.6-x86_64-i386-64bit) + method: POST + uri: https://westus2.api.cognitive.microsoft.com/text/analytics/v3.1-preview.1/sentiment?showStats=false&stringIndexType=TextElements_v8 + response: + body: + string: '{"documents":[{"id":"0","sentiment":"mixed","confidenceScores":{"positive":0.44,"neutral":0.27,"negative":0.29},"sentences":[{"sentiment":"positive","confidenceScores":{"positive":0.88,"neutral":0.11,"negative":0.01},"offset":0,"length":14,"text":"I + like nature."},{"sentiment":"negative","confidenceScores":{"positive":0.01,"neutral":0.43,"negative":0.56},"offset":15,"length":26,"text":"I + do not like being inside"}],"warnings":[]}],"errors":[],"modelVersion":"2020-04-01"}' + headers: + apim-request-id: 0e02d431-268d-4e0f-8b14-bc16a558899b + content-type: application/json; charset=utf-8 + csp-billing-usage: CognitiveServices.TextAnalytics.BatchScoring=1 + date: Thu, 27 Aug 2020 20:56:21 GMT + strict-transport-security: max-age=31536000; includeSubDomains; preload + transfer-encoding: chunked + x-content-type-options: nosniff + x-envoy-upstream-service-time: '171' + status: + code: 200 + message: OK + url: https://westus2.api.cognitive.microsoft.com//text/analytics/v3.1-preview.1/sentiment?showStats=false&stringIndexType=TextElements_v8 +version: 1 diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_entities.test_no_offset_length_v3_categorized_entities.yaml b/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_entities.test_no_offset_length_v3_categorized_entities.yaml new file mode 100644 index 000000000000..a890f3a988db --- /dev/null +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_entities.test_no_offset_length_v3_categorized_entities.yaml @@ -0,0 +1,45 @@ +interactions: +- request: + body: '{"documents": [{"id": "0", "text": "Microsoft was founded by Bill Gates + and Paul Allen", "language": "en"}]}' + headers: + Accept: + - application/json, text/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '108' + Content-Type: + - application/json + User-Agent: + - azsdk-python-ai-textanalytics/5.0.1 Python/3.8.5 (macOS-10.13.6-x86_64-i386-64bit) + method: POST + uri: https://westus2.api.cognitive.microsoft.com/text/analytics/v3.0/entities/recognition/general?showStats=false + response: + body: + string: '{"documents":[{"id":"0","entities":[{"text":"Microsoft","category":"Organization","offset":0,"length":9,"confidenceScore":0.82},{"text":"Bill + Gates","category":"Person","offset":25,"length":10,"confidenceScore":0.84},{"text":"Paul + Allen","category":"Person","offset":40,"length":10,"confidenceScore":0.89}],"warnings":[]}],"errors":[],"modelVersion":"2020-04-01"}' + headers: + apim-request-id: + - 8ebab42d-0090-4d36-8e52-721f4c4b87d7 + content-type: + - application/json; charset=utf-8 + csp-billing-usage: + - CognitiveServices.TextAnalytics.BatchScoring=1 + date: + - Thu, 27 Aug 2020 20:56:21 GMT + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + transfer-encoding: + - chunked + x-content-type-options: + - nosniff + x-envoy-upstream-service-time: + - '82' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_entities.test_offset_length.yaml b/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_entities.test_offset_length.yaml new file mode 100644 index 000000000000..35fde09d7bd3 --- /dev/null +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_entities.test_offset_length.yaml @@ -0,0 +1,45 @@ +interactions: +- request: + body: '{"documents": [{"id": "0", "text": "Microsoft was founded by Bill Gates + and Paul Allen", "language": "en"}]}' + headers: + Accept: + - application/json, text/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '108' + Content-Type: + - application/json + User-Agent: + - azsdk-python-ai-textanalytics/5.0.1 Python/3.8.5 (macOS-10.13.6-x86_64-i386-64bit) + method: POST + uri: https://westus2.api.cognitive.microsoft.com/text/analytics/v3.1-preview.1/entities/recognition/general?showStats=false&stringIndexType=TextElements_v8 + response: + body: + string: '{"documents":[{"id":"0","entities":[{"text":"Microsoft","category":"Organization","offset":0,"length":9,"confidenceScore":0.82},{"text":"Bill + Gates","category":"Person","offset":25,"length":10,"confidenceScore":0.84},{"text":"Paul + Allen","category":"Person","offset":40,"length":10,"confidenceScore":0.89}],"warnings":[]}],"errors":[],"modelVersion":"2020-04-01"}' + headers: + apim-request-id: + - 613d00ee-b95f-4550-939a-17f5e73003c7 + content-type: + - application/json; charset=utf-8 + csp-billing-usage: + - CognitiveServices.TextAnalytics.BatchScoring=1 + date: + - Thu, 27 Aug 2020 20:56:21 GMT + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + transfer-encoding: + - chunked + x-content-type-options: + - nosniff + x-envoy-upstream-service-time: + - '75' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_entities_async.test_no_offset_length_v3_categorized_entities.yaml b/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_entities_async.test_no_offset_length_v3_categorized_entities.yaml new file mode 100644 index 000000000000..aebd409f1c10 --- /dev/null +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_entities_async.test_no_offset_length_v3_categorized_entities.yaml @@ -0,0 +1,34 @@ +interactions: +- request: + body: '{"documents": [{"id": "0", "text": "Microsoft was founded by Bill Gates + and Paul Allen", "language": "en"}]}' + headers: + Accept: + - application/json, text/json + Content-Length: + - '108' + Content-Type: + - application/json + User-Agent: + - azsdk-python-ai-textanalytics/5.0.1 Python/3.8.5 (macOS-10.13.6-x86_64-i386-64bit) + method: POST + uri: https://westus2.api.cognitive.microsoft.com/text/analytics/v3.0/entities/recognition/general?showStats=false + response: + body: + string: '{"documents":[{"id":"0","entities":[{"text":"Microsoft","category":"Organization","offset":0,"length":9,"confidenceScore":0.82},{"text":"Bill + Gates","category":"Person","offset":25,"length":10,"confidenceScore":0.84},{"text":"Paul + Allen","category":"Person","offset":40,"length":10,"confidenceScore":0.89}],"warnings":[]}],"errors":[],"modelVersion":"2020-04-01"}' + headers: + apim-request-id: feb5af55-adf4-46b5-8895-5036980c89ea + content-type: application/json; charset=utf-8 + csp-billing-usage: CognitiveServices.TextAnalytics.BatchScoring=1 + date: Thu, 27 Aug 2020 20:56:23 GMT + strict-transport-security: max-age=31536000; includeSubDomains; preload + transfer-encoding: chunked + x-content-type-options: nosniff + x-envoy-upstream-service-time: '103' + status: + code: 200 + message: OK + url: https://westus2.api.cognitive.microsoft.com//text/analytics/v3.0/entities/recognition/general?showStats=false +version: 1 diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_entities_async.test_offset_length.yaml b/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_entities_async.test_offset_length.yaml new file mode 100644 index 000000000000..d7f91ab1a2bb --- /dev/null +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_entities_async.test_offset_length.yaml @@ -0,0 +1,34 @@ +interactions: +- request: + body: '{"documents": [{"id": "0", "text": "Microsoft was founded by Bill Gates + and Paul Allen", "language": "en"}]}' + headers: + Accept: + - application/json, text/json + Content-Length: + - '108' + Content-Type: + - application/json + User-Agent: + - azsdk-python-ai-textanalytics/5.0.1 Python/3.8.5 (macOS-10.13.6-x86_64-i386-64bit) + method: POST + uri: https://westus2.api.cognitive.microsoft.com/text/analytics/v3.1-preview.1/entities/recognition/general?showStats=false&stringIndexType=TextElements_v8 + response: + body: + string: '{"documents":[{"id":"0","entities":[{"text":"Microsoft","category":"Organization","offset":0,"length":9,"confidenceScore":0.82},{"text":"Bill + Gates","category":"Person","offset":25,"length":10,"confidenceScore":0.84},{"text":"Paul + Allen","category":"Person","offset":40,"length":10,"confidenceScore":0.89}],"warnings":[]}],"errors":[],"modelVersion":"2020-04-01"}' + headers: + apim-request-id: a875c737-ccaa-4b29-9abb-0a09f7fab515 + content-type: application/json; charset=utf-8 + csp-billing-usage: CognitiveServices.TextAnalytics.BatchScoring=1 + date: Thu, 27 Aug 2020 20:56:23 GMT + strict-transport-security: max-age=31536000; includeSubDomains; preload + transfer-encoding: chunked + x-content-type-options: nosniff + x-envoy-upstream-service-time: '74' + status: + code: 200 + message: OK + url: https://westus2.api.cognitive.microsoft.com//text/analytics/v3.1-preview.1/entities/recognition/general?showStats=false&stringIndexType=TextElements_v8 +version: 1 diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_linked_entities.test_no_offset_length_v3_linked_entity_match.yaml b/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_linked_entities.test_no_offset_length_v3_linked_entity_match.yaml new file mode 100644 index 000000000000..b203d7fda45d --- /dev/null +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_linked_entities.test_no_offset_length_v3_linked_entity_match.yaml @@ -0,0 +1,47 @@ +interactions: +- request: + body: '{"documents": [{"id": "0", "text": "Microsoft was founded by Bill Gates + and Paul Allen", "language": "en"}]}' + headers: + Accept: + - application/json, text/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '108' + Content-Type: + - application/json + User-Agent: + - azsdk-python-ai-textanalytics/5.0.1 Python/3.8.5 (macOS-10.13.6-x86_64-i386-64bit) + method: POST + uri: https://westus2.api.cognitive.microsoft.com/text/analytics/v3.0/entities/linking?showStats=false + response: + body: + string: '{"documents":[{"id":"0","entities":[{"name":"Bill Gates","matches":[{"text":"Bill + Gates","offset":25,"length":10,"confidenceScore":0.52}],"language":"en","id":"Bill + Gates","url":"https://en.wikipedia.org/wiki/Bill_Gates","dataSource":"Wikipedia"},{"name":"Paul + Allen","matches":[{"text":"Paul Allen","offset":40,"length":10,"confidenceScore":0.54}],"language":"en","id":"Paul + Allen","url":"https://en.wikipedia.org/wiki/Paul_Allen","dataSource":"Wikipedia"},{"name":"Microsoft","matches":[{"text":"Microsoft","offset":0,"length":9,"confidenceScore":0.49}],"language":"en","id":"Microsoft","url":"https://en.wikipedia.org/wiki/Microsoft","dataSource":"Wikipedia"}],"warnings":[]}],"errors":[],"modelVersion":"2020-02-01"}' + headers: + apim-request-id: + - 59196e61-2b8a-44af-8d44-faa6bc642eed + content-type: + - application/json; charset=utf-8 + csp-billing-usage: + - CognitiveServices.TextAnalytics.BatchScoring=1 + date: + - Thu, 27 Aug 2020 20:56:23 GMT + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + transfer-encoding: + - chunked + x-content-type-options: + - nosniff + x-envoy-upstream-service-time: + - '19' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_linked_entities.test_offset_length.yaml b/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_linked_entities.test_offset_length.yaml new file mode 100644 index 000000000000..1dd65281c278 --- /dev/null +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_linked_entities.test_offset_length.yaml @@ -0,0 +1,47 @@ +interactions: +- request: + body: '{"documents": [{"id": "0", "text": "Microsoft was founded by Bill Gates + and Paul Allen", "language": "en"}]}' + headers: + Accept: + - application/json, text/json + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '108' + Content-Type: + - application/json + User-Agent: + - azsdk-python-ai-textanalytics/5.0.1 Python/3.8.5 (macOS-10.13.6-x86_64-i386-64bit) + method: POST + uri: https://westus2.api.cognitive.microsoft.com/text/analytics/v3.1-preview.1/entities/linking?showStats=false&stringIndexType=TextElements_v8 + response: + body: + string: '{"documents":[{"id":"0","entities":[{"name":"Bill Gates","matches":[{"text":"Bill + Gates","offset":25,"length":10,"confidenceScore":0.52}],"language":"en","id":"Bill + Gates","url":"https://en.wikipedia.org/wiki/Bill_Gates","dataSource":"Wikipedia"},{"name":"Paul + Allen","matches":[{"text":"Paul Allen","offset":40,"length":10,"confidenceScore":0.54}],"language":"en","id":"Paul + Allen","url":"https://en.wikipedia.org/wiki/Paul_Allen","dataSource":"Wikipedia"},{"name":"Microsoft","matches":[{"text":"Microsoft","offset":0,"length":9,"confidenceScore":0.49}],"language":"en","id":"Microsoft","url":"https://en.wikipedia.org/wiki/Microsoft","dataSource":"Wikipedia"}],"warnings":[]}],"errors":[],"modelVersion":"2020-02-01"}' + headers: + apim-request-id: + - d7f1ba40-fc03-4cdf-9cda-aabc1bfa5198 + content-type: + - application/json; charset=utf-8 + csp-billing-usage: + - CognitiveServices.TextAnalytics.BatchScoring=1 + date: + - Thu, 27 Aug 2020 20:56:24 GMT + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + transfer-encoding: + - chunked + x-content-type-options: + - nosniff + x-envoy-upstream-service-time: + - '19' + status: + code: 200 + message: OK +version: 1 diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_linked_entities_async.test_no_offset_length_v3_linked_entity_match.yaml b/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_linked_entities_async.test_no_offset_length_v3_linked_entity_match.yaml new file mode 100644 index 000000000000..163f1e5edb72 --- /dev/null +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_linked_entities_async.test_no_offset_length_v3_linked_entity_match.yaml @@ -0,0 +1,36 @@ +interactions: +- request: + body: '{"documents": [{"id": "0", "text": "Microsoft was founded by Bill Gates + and Paul Allen", "language": "en"}]}' + headers: + Accept: + - application/json, text/json + Content-Length: + - '108' + Content-Type: + - application/json + User-Agent: + - azsdk-python-ai-textanalytics/5.0.1 Python/3.8.5 (macOS-10.13.6-x86_64-i386-64bit) + method: POST + uri: https://westus2.api.cognitive.microsoft.com/text/analytics/v3.0/entities/linking?showStats=false + response: + body: + string: '{"documents":[{"id":"0","entities":[{"name":"Bill Gates","matches":[{"text":"Bill + Gates","offset":25,"length":10,"confidenceScore":0.52}],"language":"en","id":"Bill + Gates","url":"https://en.wikipedia.org/wiki/Bill_Gates","dataSource":"Wikipedia"},{"name":"Paul + Allen","matches":[{"text":"Paul Allen","offset":40,"length":10,"confidenceScore":0.54}],"language":"en","id":"Paul + Allen","url":"https://en.wikipedia.org/wiki/Paul_Allen","dataSource":"Wikipedia"},{"name":"Microsoft","matches":[{"text":"Microsoft","offset":0,"length":9,"confidenceScore":0.49}],"language":"en","id":"Microsoft","url":"https://en.wikipedia.org/wiki/Microsoft","dataSource":"Wikipedia"}],"warnings":[]}],"errors":[],"modelVersion":"2020-02-01"}' + headers: + apim-request-id: 9ca5fcb3-09d4-473f-ba54-97b5e4fad832 + content-type: application/json; charset=utf-8 + csp-billing-usage: CognitiveServices.TextAnalytics.BatchScoring=1 + date: Thu, 27 Aug 2020 20:56:24 GMT + strict-transport-security: max-age=31536000; includeSubDomains; preload + transfer-encoding: chunked + x-content-type-options: nosniff + x-envoy-upstream-service-time: '17' + status: + code: 200 + message: OK + url: https://westus2.api.cognitive.microsoft.com//text/analytics/v3.0/entities/linking?showStats=false +version: 1 diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_linked_entities_async.test_offset_length.yaml b/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_linked_entities_async.test_offset_length.yaml new file mode 100644 index 000000000000..6ddc76de43ce --- /dev/null +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/recordings/test_recognize_linked_entities_async.test_offset_length.yaml @@ -0,0 +1,36 @@ +interactions: +- request: + body: '{"documents": [{"id": "0", "text": "Microsoft was founded by Bill Gates + and Paul Allen", "language": "en"}]}' + headers: + Accept: + - application/json, text/json + Content-Length: + - '108' + Content-Type: + - application/json + User-Agent: + - azsdk-python-ai-textanalytics/5.0.1 Python/3.8.5 (macOS-10.13.6-x86_64-i386-64bit) + method: POST + uri: https://westus2.api.cognitive.microsoft.com/text/analytics/v3.1-preview.1/entities/linking?showStats=false&stringIndexType=TextElements_v8 + response: + body: + string: '{"documents":[{"id":"0","entities":[{"name":"Bill Gates","matches":[{"text":"Bill + Gates","offset":25,"length":10,"confidenceScore":0.52}],"language":"en","id":"Bill + Gates","url":"https://en.wikipedia.org/wiki/Bill_Gates","dataSource":"Wikipedia"},{"name":"Paul + Allen","matches":[{"text":"Paul Allen","offset":40,"length":10,"confidenceScore":0.54}],"language":"en","id":"Paul + Allen","url":"https://en.wikipedia.org/wiki/Paul_Allen","dataSource":"Wikipedia"},{"name":"Microsoft","matches":[{"text":"Microsoft","offset":0,"length":9,"confidenceScore":0.49}],"language":"en","id":"Microsoft","url":"https://en.wikipedia.org/wiki/Microsoft","dataSource":"Wikipedia"}],"warnings":[]}],"errors":[],"modelVersion":"2020-02-01"}' + headers: + apim-request-id: 04eb96fe-a716-4293-a29d-7b6628cb1917 + content-type: application/json; charset=utf-8 + csp-billing-usage: CognitiveServices.TextAnalytics.BatchScoring=1 + date: Thu, 27 Aug 2020 20:56:25 GMT + strict-transport-security: max-age=31536000; includeSubDomains; preload + transfer-encoding: chunked + x-content-type-options: nosniff + x-envoy-upstream-service-time: '19' + status: + code: 200 + message: OK + url: https://westus2.api.cognitive.microsoft.com//text/analytics/v3.1-preview.1/entities/linking?showStats=false&stringIndexType=TextElements_v8 +version: 1 diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/test_analyze_sentiment.py b/sdk/textanalytics/azure-ai-textanalytics/tests/test_analyze_sentiment.py index 27f8b6466927..15b6650213f0 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/tests/test_analyze_sentiment.py +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/test_analyze_sentiment.py @@ -16,7 +16,7 @@ TextAnalyticsClient, TextDocumentInput, VERSION, - TextAnalyticsApiVersion + TextAnalyticsApiVersion, ) # pre-apply the client_cls positional argument so it needn't be explicitly passed below @@ -665,3 +665,23 @@ def test_opinion_mining_v3(self, client): client.analyze_sentiment(["will fail"], show_opinion_mining=True) assert "'show_opinion_mining' is only available for API version v3.1-preview.1 and up" in str(excinfo.value) + + @GlobalTextAnalyticsAccountPreparer() + @TextAnalyticsClientPreparer() + def test_offset_length(self, client): + result = client.analyze_sentiment(["I like nature. I do not like being inside"]) + sentences = result[0].sentences + self.assertEqual(sentences[0].offset, 0) + self.assertEqual(sentences[0].length, 14) + self.assertEqual(sentences[1].offset, 15) + self.assertEqual(sentences[1].length, 26) + + @GlobalTextAnalyticsAccountPreparer() + @TextAnalyticsClientPreparer(client_kwargs={"api_version": TextAnalyticsApiVersion.V3_0}) + def test_no_offset_length_v3_sentence_sentiment(self, client): + result = client.analyze_sentiment(["I like nature. I do not like being inside"]) + sentences = result[0].sentences + self.assertIsNone(sentences[0].offset) + self.assertIsNone(sentences[0].length) + self.assertIsNone(sentences[1].offset) + self.assertIsNone(sentences[1].length) diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/test_analyze_sentiment_async.py b/sdk/textanalytics/azure-ai-textanalytics/tests/test_analyze_sentiment_async.py index 77320c796ffc..e08d8729c4e8 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/tests/test_analyze_sentiment_async.py +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/test_analyze_sentiment_async.py @@ -17,7 +17,7 @@ VERSION, DetectLanguageInput, TextDocumentInput, - TextAnalyticsApiVersion + TextAnalyticsApiVersion, ) from testcase import GlobalTextAnalyticsAccountPreparer @@ -681,3 +681,23 @@ async def test_opinion_mining_v3(self, client): await client.analyze_sentiment(["will fail"], show_opinion_mining=True) assert "'show_opinion_mining' is only available for API version v3.1-preview.1 and up" in str(excinfo.value) + + @GlobalTextAnalyticsAccountPreparer() + @TextAnalyticsClientPreparer() + async def test_offset_length(self, client): + result = await client.analyze_sentiment(["I like nature. I do not like being inside"]) + sentences = result[0].sentences + self.assertEqual(sentences[0].offset, 0) + self.assertEqual(sentences[0].length, 14) + self.assertEqual(sentences[1].offset, 15) + self.assertEqual(sentences[1].length, 26) + + @GlobalTextAnalyticsAccountPreparer() + @TextAnalyticsClientPreparer(client_kwargs={"api_version": TextAnalyticsApiVersion.V3_0}) + async def test_no_offset_length_v3_sentence_sentiment(self, client): + result = await client.analyze_sentiment(["I like nature. I do not like being inside"]) + sentences = result[0].sentences + self.assertIsNone(sentences[0].offset) + self.assertIsNone(sentences[0].length) + self.assertIsNone(sentences[1].offset) + self.assertIsNone(sentences[1].length) diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_entities.py b/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_entities.py index 02833c8926ae..1c5c972d84a9 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_entities.py +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_entities.py @@ -15,7 +15,8 @@ from azure.ai.textanalytics import ( TextAnalyticsClient, TextDocumentInput, - VERSION + VERSION, + TextAnalyticsApiVersion, ) # pre-apply the client_cls positional argument so it needn't be explicitly passed below @@ -543,3 +544,31 @@ def callback(pipeline_response, deserialized, _): cls=callback ) assert res == "cls result" + + @GlobalTextAnalyticsAccountPreparer() + @TextAnalyticsClientPreparer() + def test_offset_length(self, client): + result = client.recognize_entities(["Microsoft was founded by Bill Gates and Paul Allen"]) + entities = result[0].entities + + self.assertEqual(entities[0].offset, 0) + self.assertEqual(entities[0].length, 9) + + self.assertEqual(entities[1].offset, 25) + self.assertEqual(entities[1].length, 10) + + self.assertEqual(entities[2].offset, 40) + self.assertEqual(entities[2].length, 10) + + @GlobalTextAnalyticsAccountPreparer() + @TextAnalyticsClientPreparer(client_kwargs={"api_version": TextAnalyticsApiVersion.V3_0}) + def test_no_offset_length_v3_categorized_entities(self, client): + result = client.recognize_entities(["Microsoft was founded by Bill Gates and Paul Allen"]) + entities = result[0].entities + + self.assertIsNone(entities[0].offset) + self.assertIsNone(entities[0].length) + self.assertIsNone(entities[1].offset) + self.assertIsNone(entities[1].length) + self.assertIsNone(entities[2].offset) + self.assertIsNone(entities[2].length) \ No newline at end of file diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_entities_async.py b/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_entities_async.py index fb2c3dc10d13..1ee1696ce6a9 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_entities_async.py +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_entities_async.py @@ -16,7 +16,8 @@ from azure.ai.textanalytics import ( VERSION, DetectLanguageInput, - TextDocumentInput + TextDocumentInput, + TextAnalyticsApiVersion, ) from testcase import GlobalTextAnalyticsAccountPreparer @@ -562,3 +563,31 @@ def callback(pipeline_response, deserialized, _): cls=callback ) assert res == "cls result" + + @GlobalTextAnalyticsAccountPreparer() + @TextAnalyticsClientPreparer() + async def test_offset_length(self, client): + result = await client.recognize_entities(["Microsoft was founded by Bill Gates and Paul Allen"]) + entities = result[0].entities + + self.assertEqual(entities[0].offset, 0) + self.assertEqual(entities[0].length, 9) + + self.assertEqual(entities[1].offset, 25) + self.assertEqual(entities[1].length, 10) + + self.assertEqual(entities[2].offset, 40) + self.assertEqual(entities[2].length, 10) + + @GlobalTextAnalyticsAccountPreparer() + @TextAnalyticsClientPreparer(client_kwargs={"api_version": TextAnalyticsApiVersion.V3_0}) + async def test_no_offset_length_v3_categorized_entities(self, client): + result = await client.recognize_entities(["Microsoft was founded by Bill Gates and Paul Allen"]) + entities = result[0].entities + + self.assertIsNone(entities[0].offset) + self.assertIsNone(entities[0].length) + self.assertIsNone(entities[1].offset) + self.assertIsNone(entities[1].length) + self.assertIsNone(entities[2].offset) + self.assertIsNone(entities[2].length) \ No newline at end of file diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_linked_entities.py b/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_linked_entities.py index 2eb8989c066e..efd249e19939 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_linked_entities.py +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_linked_entities.py @@ -15,7 +15,8 @@ from azure.ai.textanalytics import ( TextAnalyticsClient, TextDocumentInput, - VERSION + VERSION, + TextAnalyticsApiVersion, ) # pre-apply the client_cls positional argument so it needn't be explicitly passed below @@ -545,3 +546,36 @@ def callback(pipeline_response, deserialized, _): cls=callback ) assert res == "cls result" + + @GlobalTextAnalyticsAccountPreparer() + @TextAnalyticsClientPreparer() + def test_offset_length(self, client): + result = client.recognize_linked_entities(["Microsoft was founded by Bill Gates and Paul Allen"]) + entities = result[0].entities + + # the entities are being returned in a non-sequential order by the service + microsoft_entity = [entity for entity in entities if entity.name == "Microsoft"][0] + bill_gates_entity = [entity for entity in entities if entity.name == "Bill Gates"][0] + paul_allen_entity = [entity for entity in entities if entity.name == "Paul Allen"][0] + + self.assertEqual(microsoft_entity.matches[0].offset, 0) + self.assertEqual(microsoft_entity.matches[0].length, 9) + + self.assertEqual(bill_gates_entity.matches[0].offset, 25) + self.assertEqual(bill_gates_entity.matches[0].length, 10) + + self.assertEqual(paul_allen_entity.matches[0].offset, 40) + self.assertEqual(paul_allen_entity.matches[0].length, 10) + + @GlobalTextAnalyticsAccountPreparer() + @TextAnalyticsClientPreparer(client_kwargs={"api_version": TextAnalyticsApiVersion.V3_0}) + def test_no_offset_length_v3_linked_entity_match(self, client): + result = client.recognize_linked_entities(["Microsoft was founded by Bill Gates and Paul Allen"]) + entities = result[0].entities + + self.assertIsNone(entities[0].matches[0].offset) + self.assertIsNone(entities[0].matches[0].length) + self.assertIsNone(entities[0].matches[0].offset) + self.assertIsNone(entities[0].matches[0].length) + self.assertIsNone(entities[0].matches[0].offset) + self.assertIsNone(entities[0].matches[0].length) diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_linked_entities_async.py b/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_linked_entities_async.py index c3aa9c522a68..bc1b9ca9214b 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_linked_entities_async.py +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_linked_entities_async.py @@ -16,7 +16,8 @@ from azure.ai.textanalytics import ( VERSION, DetectLanguageInput, - TextDocumentInput + TextDocumentInput, + TextAnalyticsApiVersion, ) from testcase import GlobalTextAnalyticsAccountPreparer @@ -581,3 +582,36 @@ def callback(pipeline_response, deserialized, _): cls=callback ) assert res == "cls result" + + @GlobalTextAnalyticsAccountPreparer() + @TextAnalyticsClientPreparer() + async def test_offset_length(self, client): + result = await client.recognize_linked_entities(["Microsoft was founded by Bill Gates and Paul Allen"]) + entities = result[0].entities + + # the entities are being returned in a non-sequential order by the service + microsoft_entity = [entity for entity in entities if entity.name == "Microsoft"][0] + bill_gates_entity = [entity for entity in entities if entity.name == "Bill Gates"][0] + paul_allen_entity = [entity for entity in entities if entity.name == "Paul Allen"][0] + + self.assertEqual(microsoft_entity.matches[0].offset, 0) + self.assertEqual(microsoft_entity.matches[0].length, 9) + + self.assertEqual(bill_gates_entity.matches[0].offset, 25) + self.assertEqual(bill_gates_entity.matches[0].length, 10) + + self.assertEqual(paul_allen_entity.matches[0].offset, 40) + self.assertEqual(paul_allen_entity.matches[0].length, 10) + + @GlobalTextAnalyticsAccountPreparer() + @TextAnalyticsClientPreparer(client_kwargs={"api_version": TextAnalyticsApiVersion.V3_0}) + async def test_no_offset_length_v3_linked_entity_match(self, client): + result = await client.recognize_linked_entities(["Microsoft was founded by Bill Gates and Paul Allen"]) + entities = result[0].entities + + self.assertIsNone(entities[0].matches[0].offset) + self.assertIsNone(entities[0].matches[0].length) + self.assertIsNone(entities[0].matches[0].offset) + self.assertIsNone(entities[0].matches[0].length) + self.assertIsNone(entities[0].matches[0].offset) + self.assertIsNone(entities[0].matches[0].length) From 3c226d2cb4d8c65000019bcef7a6dde89966792a Mon Sep 17 00:00:00 2001 From: iscai-msft Date: Fri, 28 Aug 2020 14:33:45 -0400 Subject: [PATCH 3/3] fix entity indexing in test for linked entities --- .../tests/test_recognize_linked_entities.py | 8 ++++---- .../tests/test_recognize_linked_entities_async.py | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_linked_entities.py b/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_linked_entities.py index b0d31a309d70..2ca6a82027d7 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_linked_entities.py +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_linked_entities.py @@ -575,10 +575,10 @@ def test_no_offset_length_v3_linked_entity_match(self, client): self.assertIsNone(entities[0].matches[0].offset) self.assertIsNone(entities[0].matches[0].length) - self.assertIsNone(entities[0].matches[0].offset) - self.assertIsNone(entities[0].matches[0].length) - self.assertIsNone(entities[0].matches[0].offset) - self.assertIsNone(entities[0].matches[0].length) + self.assertIsNone(entities[1].matches[0].offset) + self.assertIsNone(entities[1].matches[0].length) + self.assertIsNone(entities[2].matches[0].offset) + self.assertIsNone(entities[2].matches[0].length) @GlobalTextAnalyticsAccountPreparer() @TextAnalyticsClientPreparer(client_kwargs={"api_version": TextAnalyticsApiVersion.V3_0}) diff --git a/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_linked_entities_async.py b/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_linked_entities_async.py index 5aec055eace5..e055f9178a24 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_linked_entities_async.py +++ b/sdk/textanalytics/azure-ai-textanalytics/tests/test_recognize_linked_entities_async.py @@ -611,10 +611,10 @@ async def test_no_offset_length_v3_linked_entity_match(self, client): self.assertIsNone(entities[0].matches[0].offset) self.assertIsNone(entities[0].matches[0].length) - self.assertIsNone(entities[0].matches[0].offset) - self.assertIsNone(entities[0].matches[0].length) - self.assertIsNone(entities[0].matches[0].offset) - self.assertIsNone(entities[0].matches[0].length) + self.assertIsNone(entities[1].matches[0].offset) + self.assertIsNone(entities[1].matches[0].length) + self.assertIsNone(entities[2].matches[0].offset) + self.assertIsNone(entities[2].matches[0].length) @GlobalTextAnalyticsAccountPreparer() @TextAnalyticsClientPreparer(client_kwargs={"api_version": TextAnalyticsApiVersion.V3_0})