Bibliothèque de client Azure Analyse de texte pour Python - version 5.3.0

Azure Cognitive Service for Language est un service cloud qui fournit des fonctionnalités de traitement en langage naturel (NLP) pour comprendre et analyser le texte, et comprend les fonctionnalités main suivantes :

  • Analyse des sentiments
  • Reconnaissance d’entité nommée
  • Détection de la langue
  • Extraction d’expressions clés
  • Liaison d’entités
  • Analyse multiple
  • Détection des informations d’identification personnelles (PII)
  • Analyse de texte pour l’intégrité
  • Reconnaissance d’entité nommée personnalisée
  • Classification de texte personnalisée
  • Résumé de texte extractif
  • Résumé de texte abstrait

| Code sourcePackage (PyPI) | Package (Conda) | Documentation de référence sur les | API | Documentation produitÉchantillons

Prise en main

Prérequis

Créer une ressource de service Cognitive Services ou Language

Le service Language prend en charge l’accès multiservices et à service unique. Créez une ressource Cognitive Services si vous envisagez d’accéder à plusieurs services Cognitive Services sous un seul point de terminaison/clé. Pour l’accès au service Language uniquement, créez une ressource de service Language. Vous pouvez créer la ressource à l’aide du portail Azure ou d’Azure CLI en suivant les étapes décrites dans ce document.

L’interaction avec le service à l’aide de la bibliothèque cliente commence par un client . Pour créer un objet client, vous aurez besoin du service endpoint Cognitive Services ou Language pour votre ressource et d’un qui vous permet d’accéder credential :

from azure.core.credentials import AzureKeyCredential
from azure.ai.textanalytics import TextAnalyticsClient

credential = AzureKeyCredential("<api_key>")
text_analytics_client = TextAnalyticsClient(endpoint="https://<resource-name>.cognitiveservices.azure.com/", credential=credential)

Notez que pour certaines ressources Cognitive Services, le point de terminaison peut être différent de l’extrait de code ci-dessus. Par exemple : https://<region>.api.cognitive.microsoft.com/.

Installer le package

Installez la bibliothèque cliente Azure Analyse de texte pour Python avec pip :

pip install azure-ai-textanalytics
import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.textanalytics import TextAnalyticsClient
endpoint = os.environ["AZURE_LANGUAGE_ENDPOINT"]
key = os.environ["AZURE_LANGUAGE_KEY"]

text_analytics_client = TextAnalyticsClient(endpoint, AzureKeyCredential(key))

Notez que 5.2.X et les plus récents ciblent les API Azure Cognitive Service for Language. Ces API incluent les fonctionnalités d’analyse de texte et de traitement en langage naturel des versions précédentes de la bibliothèque cliente Analyse de texte. En outre, l’API de service est passée de la sémantique au contrôle de version basé sur la date. Cette version de la bibliothèque cliente utilise par défaut la dernière version de l’API prise en charge, qui est 2023-04-01actuellement .

Ce tableau montre la relation entre les versions du KIT de développement logiciel (SDK) et les versions d’API prises en charge du service

Version du SDK Version d’API prise en charge du service
5.3.X - Dernière version stable 3.0, 3.1, 2022-05-01, 2023-04-01 (par défaut)
5.2.X 3.0, 3.1, 2022-05-01 (par défaut)
5.1.0 3.0, 3.1 (par défaut)
5.0.0 3.0

Vous pouvez sélectionner la version de l’API en transmettant l’argument mot clé api_version dans le client. Pour les dernières fonctionnalités du service Language, envisagez de sélectionner la version de l’API bêta la plus récente. Pour les scénarios de production, la dernière version stable est recommandée. La définition d’une version antérieure peut entraîner une compatibilité des fonctionnalités réduite.

Authentifier le client

Obtenir le point de terminaison

Vous pouvez trouver le point de terminaison de votre ressource de service Language à l’aide du portail Azure ou d’Azure CLI :

# Get the endpoint for the Language service resource
az cognitiveservices account show --name "resource-name" --resource-group "resource-group-name" --query "properties.endpoint"

Obtenir la clé API

Vous pouvez obtenir la clé API à partir de la ressource de service Cognitive Services ou Language dans le portail Azure. Vous pouvez également utiliser l’extrait de code Azure CLI ci-dessous pour obtenir la clé API de votre ressource.

az cognitiveservices account keys list --name "resource-name" --resource-group "resource-group-name"

Créer un TextAnalyticsClient avec des informations d’identification de clé API

Une fois que vous avez la valeur de la clé API, vous pouvez la passer sous forme de chaîne dans un instance d’AzureKeyCredential. Utilisez la clé comme paramètre d’informations d’identification pour authentifier le client :

import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.textanalytics import TextAnalyticsClient
endpoint = os.environ["AZURE_LANGUAGE_ENDPOINT"]
key = os.environ["AZURE_LANGUAGE_KEY"]

text_analytics_client = TextAnalyticsClient(endpoint, AzureKeyCredential(key))

Créer un TextAnalyticsClient avec des informations d’identification Azure Active Directory

Pour utiliser des informations d’identification de jeton Azure Active Directory (AAD), fournissez une instance du type d’informations d’identification souhaité obtenu à partir de la bibliothèque d’identité Azure. Notez que les points de terminaison régionaux ne prennent pas en charge l’authentification AAD. Créez un nom de sous-domaine personnalisé pour votre ressource afin d’utiliser ce type d’authentification.

L’authentification avec AAD nécessite une configuration initiale :

Après l’installation, vous pouvez choisir le type d’informations d’identification d’azure.identity à utiliser. Par exemple, DefaultAzureCredential peut être utilisé pour authentifier le client :

Définissez les valeurs de l’ID client, de l’ID de locataire et de la clé secrète client de l’application AAD en tant que variables d’environnement : AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET

Utilisez les informations d’identification de jeton retournées pour authentifier le client :

import os
from azure.ai.textanalytics import TextAnalyticsClient
from azure.identity import DefaultAzureCredential

endpoint = os.environ["AZURE_LANGUAGE_ENDPOINT"]
credential = DefaultAzureCredential()

text_analytics_client = TextAnalyticsClient(endpoint, credential=credential)

Concepts clés

TextAnalyticsClient

La bibliothèque cliente Analyse de texte fournit un TextAnalyticsClient pour effectuer une analyse sur des lots de documents. Il fournit des opérations synchrones et asynchrones pour accéder à une utilisation spécifique de l’analyse de texte, comme la détection de langue ou l’extraction d’expressions clés.

Entrée

Un document est une unité unique à analyser par les modèles prédictifs dans le service Language. L’entrée pour chaque opération est passée sous forme de liste de documents.

Chaque document peut être passé sous forme de chaîne dans la liste, par exemple.

documents = ["I hated the movie. It was so slow!", "The movie made it into my top ten favorites. What a great movie!"]

ou, si vous souhaitez transmettre un document id par élément ou languagecountry_hint/, ils peuvent être transmis sous la forme d’une liste de DetectLanguageInput ou TextDocumentInput ou d’une représentation de type dict de l’objet :

documents = [
    {"id": "1", "language": "en", "text": "I hated the movie. It was so slow!"},
    {"id": "2", "language": "en", "text": "The movie made it into my top ten favorites. What a great movie!"},
]

Consultez Limitations du service pour l’entrée, notamment les limites de longueur du document, la taille maximale des lots et l’encodage de texte pris en charge.

Valeur renvoyée

La valeur de retour d’un document unique peut être un objet de résultat ou d’erreur. Une liste hétérogène contenant une collection d’objets de résultat et d’erreur est retournée à partir de chaque opération. Ces résultats/erreurs correspondent à l’index avec l’ordre des documents fournis.

Un résultat, tel que AnalyzeSentimentResult, est le résultat d’une opération d’analyse de texte et contient une prédiction ou des prédictions concernant une entrée de document.

L’objet d’erreur, DocumentError, indique que le service a rencontré des problèmes de traitement du document et contient la raison de son échec.

Gestion des erreurs de document

Vous pouvez filtrer un résultat ou un objet d’erreur dans la liste à l’aide de l’attribut is_error . Pour un objet de résultat, c’est toujours False et pour un DocumentError , il s’agit de True.

Par exemple, pour filtrer tous les DocumentsErrors, vous pouvez utiliser la compréhension de liste :

response = text_analytics_client.analyze_sentiment(documents)
successful_responses = [doc for doc in response if not doc.is_error]

Vous pouvez également utiliser l’attribut kind pour filtrer entre les types de résultats :

poller = text_analytics_client.begin_analyze_actions(documents, actions)
response = poller.result()
for result in response:
    if result.kind == "SentimentAnalysis":
        print(f"Sentiment is {result.sentiment}")
    elif result.kind == "KeyPhraseExtraction":
        print(f"Key phrases: {result.key_phrases}")
    elif result.is_error is True:
        print(f"Document error: {result.code}, {result.message}")

opérations Long-Running

Les opérations de longue durée sont des opérations qui se composent d’une demande initiale envoyée au service pour démarrer une opération, suivie d’un interrogation du service à intervalles réguliers pour déterminer si l’opération s’est terminée ou échouée, et si elle a réussi, pour obtenir le résultat.

Les méthodes qui prennent en charge l’analyse des soins de santé, l’analyse de texte personnalisée ou plusieurs analyses sont modélisées comme des opérations de longue durée. Le client expose une begin_<method-name> méthode qui retourne un objet poller. Les appelants doivent attendre que l’opération se termine en appelant result() sur l’objet poller retourné par la begin_<method-name> méthode. Des exemples d’extraits de code sont fournis pour illustrer l’utilisation d’opérations de longue durée ci-dessous.

Exemples

La section suivante fournit plusieurs extraits de code couvrant certaines des tâches les plus courantes du service Language, notamment :

Analyser les sentiments

analyze_sentiment examine son texte d’entrée et détermine si son sentiment est positif, négatif, neutre ou mixte. Sa réponse comprend une analyse des sentiments par phrase et des scores de confiance.

import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.textanalytics import TextAnalyticsClient

endpoint = os.environ["AZURE_LANGUAGE_ENDPOINT"]
key = os.environ["AZURE_LANGUAGE_KEY"]

text_analytics_client = TextAnalyticsClient(endpoint=endpoint, credential=AzureKeyCredential(key))

documents = [
    """I had the best day of my life. I decided to go sky-diving and it made me appreciate my whole life so much more.
    I developed a deep-connection with my instructor as well, and I feel as if I've made a life-long friend in her.""",
    """This was a waste of my time. All of the views on this drop are extremely boring, all I saw was grass. 0/10 would
    not recommend to any divers, even first timers.""",
    """This was pretty good! The sights were ok, and I had fun with my instructors! Can't complain too much about my experience""",
    """I only have one word for my experience: WOW!!! I can't believe I have had such a wonderful skydiving company right
    in my backyard this whole time! I will definitely be a repeat customer, and I want to take my grandmother skydiving too,
    I know she'll love it!"""
]


result = text_analytics_client.analyze_sentiment(documents, show_opinion_mining=True)
docs = [doc for doc in result if not doc.is_error]

print("Let's visualize the sentiment of each of these documents")
for idx, doc in enumerate(docs):
    print(f"Document text: {documents[idx]}")
    print(f"Overall sentiment: {doc.sentiment}")

La réponse retournée est une liste hétérogène d’objets de résultat et d’erreur : list[AnalyzeSentimentResult, DocumentError]

Reportez-vous à la documentation du service pour une discussion conceptuelle sur l’analyse des sentiments. Pour savoir comment effectuer une analyse plus précise des opinions liées à des aspects individuels (tels que les attributs d’un produit ou d’un service) dans un texte, voir ici.

Reconnaître les entités

recognize_entities reconnaît et classe les entités dans son texte d’entrée en tant que personnes, lieux, organisations, date/heure, quantités, pourcentages, devises, etc.

import os
import typing
from azure.core.credentials import AzureKeyCredential
from azure.ai.textanalytics import TextAnalyticsClient

endpoint = os.environ["AZURE_LANGUAGE_ENDPOINT"]
key = os.environ["AZURE_LANGUAGE_KEY"]

text_analytics_client = TextAnalyticsClient(endpoint=endpoint, credential=AzureKeyCredential(key))
reviews = [
    """I work for Foo Company, and we hired Contoso for our annual founding ceremony. The food
    was amazing and we all can't say enough good words about the quality and the level of service.""",
    """We at the Foo Company re-hired Contoso after all of our past successes with the company.
    Though the food was still great, I feel there has been a quality drop since their last time
    catering for us. Is anyone else running into the same problem?""",
    """Bar Company is over the moon about the service we received from Contoso, the best sliders ever!!!!"""
]

result = text_analytics_client.recognize_entities(reviews)
result = [review for review in result if not review.is_error]
organization_to_reviews: typing.Dict[str, typing.List[str]] = {}

for idx, review in enumerate(result):
    for entity in review.entities:
        print(f"Entity '{entity.text}' has category '{entity.category}'")
        if entity.category == 'Organization':
            organization_to_reviews.setdefault(entity.text, [])
            organization_to_reviews[entity.text].append(reviews[idx])

for organization, reviews in organization_to_reviews.items():
    print(
        "\n\nOrganization '{}' has left us the following review(s): {}".format(
            organization, "\n\n".join(reviews)
        )
    )

La réponse retournée est une liste hétérogène d’objets de résultat et d’erreur : list[RecognizeEntitiesResult, DocumentError]

Reportez-vous à la documentation du service pour obtenir une présentation conceptuelle de la reconnaissance d’entités nommées et des types pris en charge.

Reconnaître les entités liées

recognize_linked_entities reconnaît et désambigue l’identité de chaque entité trouvée dans son texte d’entrée (par exemple, en déterminant si une occurrence du mot Mars fait référence à la planète, ou au dieu romain de la guerre). Les entités reconnues sont associées à des URL à un base de connaissances bien connu, comme Wikipédia.

import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.textanalytics import TextAnalyticsClient

endpoint = os.environ["AZURE_LANGUAGE_ENDPOINT"]
key = os.environ["AZURE_LANGUAGE_KEY"]

text_analytics_client = TextAnalyticsClient(endpoint=endpoint, credential=AzureKeyCredential(key))
documents = [
    """
    Microsoft was founded by Bill Gates with some friends he met at Harvard. One of his friends,
    Steve Ballmer, eventually became CEO after Bill Gates as well. Steve Ballmer eventually stepped
    down as CEO of Microsoft, and was succeeded by Satya Nadella.
    Microsoft originally moved its headquarters to Bellevue, Washington in January 1979, but is now
    headquartered in Redmond.
    """
]

result = text_analytics_client.recognize_linked_entities(documents)
docs = [doc for doc in result if not doc.is_error]

print(
    "Let's map each entity to it's Wikipedia article. I also want to see how many times each "
    "entity is mentioned in a document\n\n"
)
entity_to_url = {}
for doc in docs:
    for entity in doc.entities:
        print("Entity '{}' has been mentioned '{}' time(s)".format(
            entity.name, len(entity.matches)
        ))
        if entity.data_source == "Wikipedia":
            entity_to_url[entity.name] = entity.url

La réponse retournée est une liste hétérogène d’objets de résultat et d’erreur : list[RecognizeLinkedEntitiesResult, DocumentError]

Reportez-vous à la documentation du service pour une présentation conceptuelle de la liaison d’entités et des types pris en charge.

Reconnaître les entités PII

recognize_pii_entities reconnaît et catégorise les entités d’identification personnelle (PII) dans son texte d’entrée, comme les numéros de sécurité sociale, les informations de compte bancaire, les numéros de crédit carte, etc.

import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.textanalytics import TextAnalyticsClient

endpoint = os.environ["AZURE_LANGUAGE_ENDPOINT"]
key = os.environ["AZURE_LANGUAGE_KEY"]

text_analytics_client = TextAnalyticsClient(
    endpoint=endpoint, credential=AzureKeyCredential(key)
)
documents = [
    """Parker Doe has repaid all of their loans as of 2020-04-25.
    Their SSN is 859-98-0987. To contact them, use their phone number
    555-555-5555. They are originally from Brazil and have Brazilian CPF number 998.214.865-68"""
]

result = text_analytics_client.recognize_pii_entities(documents)
docs = [doc for doc in result if not doc.is_error]

print(
    "Let's compare the original document with the documents after redaction. "
    "I also want to comb through all of the entities that got redacted"
)
for idx, doc in enumerate(docs):
    print(f"Document text: {documents[idx]}")
    print(f"Redacted document text: {doc.redacted_text}")
    for entity in doc.entities:
        print("...Entity '{}' with category '{}' got redacted".format(
            entity.text, entity.category
        ))

La réponse retournée est une liste hétérogène d’objets de résultat et d’erreur : list[RecognizePiiEntitiesResult, DocumentError]

Reportez-vous à la documentation du service pour connaître les types d’entités PII pris en charge.

Remarque : Le service Recognize PII Entities est disponible dans API version v3.1 et versions ultérieures.

Extraire les phrases clés

extract_key_phrases détermine les points de conversation main dans son texte d’entrée. Par exemple, pour le texte d’entrée « La nourriture était délicieuse et il y avait un personnel merveilleux », l’API retourne : « nourriture » et « personnel merveilleux ».

import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.textanalytics import TextAnalyticsClient

endpoint = os.environ["AZURE_LANGUAGE_ENDPOINT"]
key = os.environ["AZURE_LANGUAGE_KEY"]

text_analytics_client = TextAnalyticsClient(endpoint=endpoint, credential=AzureKeyCredential(key))
articles = [
    """
    Washington, D.C. Autumn in DC is a uniquely beautiful season. The leaves fall from the trees
    in a city chock-full of forests, leaving yellow leaves on the ground and a clearer view of the
    blue sky above...
    """,
    """
    Redmond, WA. In the past few days, Microsoft has decided to further postpone the start date of
    its United States workers, due to the pandemic that rages with no end in sight...
    """,
    """
    Redmond, WA. Employees at Microsoft can be excited about the new coffee shop that will open on campus
    once workers no longer have to work remotely...
    """
]

result = text_analytics_client.extract_key_phrases(articles)
for idx, doc in enumerate(result):
    if not doc.is_error:
        print("Key phrases in article #{}: {}".format(
            idx + 1,
            ", ".join(doc.key_phrases)
        ))

La réponse retournée est une liste hétérogène d’objets de résultat et d’erreur : list[ExtractKeyPhrasesResult, DocumentError]

Reportez-vous à la documentation du service pour une présentation conceptuelle de l’extraction d’expressions clés.

Détecter la langue

detect_language détermine la langue de son texte d’entrée, y compris le score de confiance de la langue prédite.

import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.textanalytics import TextAnalyticsClient

endpoint = os.environ["AZURE_LANGUAGE_ENDPOINT"]
key = os.environ["AZURE_LANGUAGE_KEY"]

text_analytics_client = TextAnalyticsClient(endpoint=endpoint, credential=AzureKeyCredential(key))
documents = [
    """
    The concierge Paulette was extremely helpful. Sadly when we arrived the elevator was broken, but with Paulette's help we barely noticed this inconvenience.
    She arranged for our baggage to be brought up to our room with no extra charge and gave us a free meal to refurbish all of the calories we lost from
    walking up the stairs :). Can't say enough good things about my experience!
    """,
    """
    最近由于工作压力太大,我们决定去富酒店度假。那儿的温泉实在太舒服了,我跟我丈夫都完全恢复了工作前的青春精神!加油!
    """
]

result = text_analytics_client.detect_language(documents)
reviewed_docs = [doc for doc in result if not doc.is_error]

print("Let's see what language each review is in!")

for idx, doc in enumerate(reviewed_docs):
    print("Review #{} is in '{}', which has ISO639-1 name '{}'\n".format(
        idx, doc.primary_language.name, doc.primary_language.iso6391_name
    ))

La réponse retournée est une liste hétérogène d’objets de résultat et d’erreur : list[DetectLanguageResult, DocumentError]

Reportez-vous à la documentation du service pour une présentation conceptuelle de la détection des langues et de la prise en charge linguistique et régionale.

Analyse des entités de soins de santé

L’opération de longue duréebegin_analyze_healthcare_entities extrait les entités reconnues dans le domaine de la santé, identifie les relations entre les entités dans le document d’entrée et établit des liens vers des sources d’informations connues dans diverses bases de données connues, telles que UMLS, CHV, MSH, etc.

import os
import typing
from azure.core.credentials import AzureKeyCredential
from azure.ai.textanalytics import TextAnalyticsClient, HealthcareEntityRelation

endpoint = os.environ["AZURE_LANGUAGE_ENDPOINT"]
key = os.environ["AZURE_LANGUAGE_KEY"]

text_analytics_client = TextAnalyticsClient(
    endpoint=endpoint,
    credential=AzureKeyCredential(key),
)

documents = [
    """
    Patient needs to take 100 mg of ibuprofen, and 3 mg of potassium. Also needs to take
    10 mg of Zocor.
    """,
    """
    Patient needs to take 50 mg of ibuprofen, and 2 mg of Coumadin.
    """
]

poller = text_analytics_client.begin_analyze_healthcare_entities(documents)
result = poller.result()

docs = [doc for doc in result if not doc.is_error]

print("Let's first visualize the outputted healthcare result:")
for doc in docs:
    for entity in doc.entities:
        print(f"Entity: {entity.text}")
        print(f"...Normalized Text: {entity.normalized_text}")
        print(f"...Category: {entity.category}")
        print(f"...Subcategory: {entity.subcategory}")
        print(f"...Offset: {entity.offset}")
        print(f"...Confidence score: {entity.confidence_score}")
        if entity.data_sources is not None:
            print("...Data Sources:")
            for data_source in entity.data_sources:
                print(f"......Entity ID: {data_source.entity_id}")
                print(f"......Name: {data_source.name}")
        if entity.assertion is not None:
            print("...Assertion:")
            print(f"......Conditionality: {entity.assertion.conditionality}")
            print(f"......Certainty: {entity.assertion.certainty}")
            print(f"......Association: {entity.assertion.association}")
    for relation in doc.entity_relations:
        print(f"Relation of type: {relation.relation_type} has the following roles")
        for role in relation.roles:
            print(f"...Role '{role.name}' with entity '{role.entity.text}'")
    print("------------------------------------------")

print("Now, let's get all of medication dosage relations from the documents")
dosage_of_medication_relations = [
    entity_relation
    for doc in docs
    for entity_relation in doc.entity_relations if entity_relation.relation_type == HealthcareEntityRelation.DOSAGE_OF_MEDICATION
]

Remarque : l’analyse des entités médicales est disponible uniquement avec les versions d’API v3.1 et ultérieures.

Analyse multiple

Une opération de longue duréebegin_analyze_actions effectue plusieurs analyses sur un ensemble de documents dans une seule requête. Actuellement, il est pris en charge à l’aide de n’importe quelle combinaison des API de langage suivantes dans une seule requête :

  • Reconnaissance des entités
  • Reconnaissance des entités PII
  • Reconnaissance d’entités liées
  • Extraction d’expressions clés
  • Analyse des sentiments
  • Reconnaissance d’entité personnalisée (API version 2022-05-01 et ultérieure)
  • Classification d’étiquette unique personnalisée (API version 2022-05-01 et ultérieure)
  • Classification multi-étiquettes personnalisée (API version 2022-05-01 et ultérieure)
  • Healthcare Entities Analysis (API version 2022-05-01 et ultérieure)
  • Résumé extractif (API version 2023-04-01 et ultérieure)
  • Résumé abstrait (API version 2023-04-01 et ultérieure)
import os
from azure.core.credentials import AzureKeyCredential
from azure.ai.textanalytics import (
    TextAnalyticsClient,
    RecognizeEntitiesAction,
    RecognizeLinkedEntitiesAction,
    RecognizePiiEntitiesAction,
    ExtractKeyPhrasesAction,
    AnalyzeSentimentAction,
)

endpoint = os.environ["AZURE_LANGUAGE_ENDPOINT"]
key = os.environ["AZURE_LANGUAGE_KEY"]

text_analytics_client = TextAnalyticsClient(
    endpoint=endpoint,
    credential=AzureKeyCredential(key),
)

documents = [
    'We went to Contoso Steakhouse located at midtown NYC last week for a dinner party, and we adore the spot! '
    'They provide marvelous food and they have a great menu. The chief cook happens to be the owner (I think his name is John Doe) '
    'and he is super nice, coming out of the kitchen and greeted us all.'
    ,

    'We enjoyed very much dining in the place! '
    'The Sirloin steak I ordered was tender and juicy, and the place was impeccably clean. You can even pre-order from their '
    'online menu at www.contososteakhouse.com, call 312-555-0176 or send email to order@contososteakhouse.com! '
    'The only complaint I have is the food didn\'t come fast enough. Overall I highly recommend it!'
]

poller = text_analytics_client.begin_analyze_actions(
    documents,
    display_name="Sample Text Analysis",
    actions=[
        RecognizeEntitiesAction(),
        RecognizePiiEntitiesAction(),
        ExtractKeyPhrasesAction(),
        RecognizeLinkedEntitiesAction(),
        AnalyzeSentimentAction(),
    ],
)

document_results = poller.result()
for doc, action_results in zip(documents, document_results):
    print(f"\nDocument text: {doc}")
    for result in action_results:
        if result.kind == "EntityRecognition":
            print("...Results of Recognize Entities Action:")
            for entity in result.entities:
                print(f"......Entity: {entity.text}")
                print(f".........Category: {entity.category}")
                print(f".........Confidence Score: {entity.confidence_score}")
                print(f".........Offset: {entity.offset}")

        elif result.kind == "PiiEntityRecognition":
            print("...Results of Recognize PII Entities action:")
            for pii_entity in result.entities:
                print(f"......Entity: {pii_entity.text}")
                print(f".........Category: {pii_entity.category}")
                print(f".........Confidence Score: {pii_entity.confidence_score}")

        elif result.kind == "KeyPhraseExtraction":
            print("...Results of Extract Key Phrases action:")
            print(f"......Key Phrases: {result.key_phrases}")

        elif result.kind == "EntityLinking":
            print("...Results of Recognize Linked Entities action:")
            for linked_entity in result.entities:
                print(f"......Entity name: {linked_entity.name}")
                print(f".........Data source: {linked_entity.data_source}")
                print(f".........Data source language: {linked_entity.language}")
                print(
                    f".........Data source entity ID: {linked_entity.data_source_entity_id}"
                )
                print(f".........Data source URL: {linked_entity.url}")
                print(".........Document matches:")
                for match in linked_entity.matches:
                    print(f"............Match text: {match.text}")
                    print(f"............Confidence Score: {match.confidence_score}")
                    print(f"............Offset: {match.offset}")
                    print(f"............Length: {match.length}")

        elif result.kind == "SentimentAnalysis":
            print("...Results of Analyze Sentiment action:")
            print(f"......Overall sentiment: {result.sentiment}")
            print(
                f"......Scores: positive={result.confidence_scores.positive}; \
                neutral={result.confidence_scores.neutral}; \
                negative={result.confidence_scores.negative} \n"
            )

        elif result.is_error is True:
            print(
                f"...Is an error with code '{result.error.code}' and message '{result.error.message}'"
            )

    print("------------------------------------------")

La réponse retournée est un objet encapsulant plusieurs itérables, chacun représentant les résultats d’analyses individuelles.

Remarque : Plusieurs analyses sont disponibles dans les versions d’API v3.1 et ultérieures.

Configuration facultative

Les arguments facultatifs mot clé peuvent être transmis au niveau du client et par opération. La documentation de référence azure-core décrit les configurations disponibles pour les nouvelles tentatives, la journalisation, les protocoles de transport, etc.

Dépannage

Général

Le client Analyse de texte déclenche des exceptions définies dans Azure Core.

Journalisation

Cette bibliothèque utilise la bibliothèque de journalisation standard pour la journalisation. Les informations de base sur les sessions HTTP (URL, en-têtes, etc.) sont enregistrées au niveau INFO.

La journalisation détaillée de niveau DEBUG, comprenant le corps de la demande et/ou de la réponse et les en-têtes non rédigés, peut être activée sur un client à l’aide de l’argument de mot clé logging_enable :

import sys
import logging
from azure.identity import DefaultAzureCredential
from azure.ai.textanalytics import TextAnalyticsClient

# Create a logger for the 'azure' SDK
logger = logging.getLogger('azure')
logger.setLevel(logging.DEBUG)

# Configure a console output
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)

endpoint = "https://<resource-name>.cognitiveservices.azure.com/"
credential = DefaultAzureCredential()

# This client will log detailed information about its HTTP sessions, at DEBUG level
text_analytics_client = TextAnalyticsClient(endpoint, credential, logging_enable=True)
result = text_analytics_client.analyze_sentiment(["I did not like the restaurant. The food was too spicy."])

De la même façon, logging_enable peut activer la journalisation détaillée pour une seule opération, même quand elle n’est pas activée pour le client :

result = text_analytics_client.analyze_sentiment(documents, logging_enable=True)

Étapes suivantes

Autres exemples de code

Ces exemples de code montrent des opérations de scénario courantes avec la bibliothèque cliente Azure Analyse de texte.

Authentifiez le client avec une clé d’API du service Cognitive Services/Language ou des informations d’identification de jeton d’azure-identity :

Scénarios courants

Scénarios avancés

Documentation complémentaire

Pour obtenir une documentation plus complète sur Azure Cognitive Service for Language, consultez la documentation language service sur docs.microsoft.com.

Contribution

Ce projet accepte les contributions et les suggestions. La plupart des contributions vous demandent d’accepter un contrat de licence de contribution (CLA) déclarant que vous avez le droit de nous accorder, et que vous nous accordez réellement, les droits d’utilisation de votre contribution. Pour plus d’informations, consultez cla.microsoft.com.

Quand vous envoyez une demande de tirage (pull request), un bot CLA détermine automatiquement si vous devez fournir un contrat CLA et agrémenter la demande de tirage de façon appropriée (par exemple, avec une étiquette ou un commentaire). Suivez simplement les instructions fournies par le bot. Vous ne devez effectuer cette opération qu’une seule fois sur tous les dépôts utilisant notre contrat CLA.

Ce projet a adopté le Code de conduite Open Source de Microsoft. Pour plus d’informations, consultez les Questions fréquentes (FAQ) sur le code de conduite ou envoyez vos questions ou vos commentaires à opencode@microsoft.com.