Biblioteca cliente de Azure Text Analytics para Python: versión 5.3.0

Azure Cognitive Service for Language es un servicio basado en la nube que proporciona características de procesamiento de lenguaje natural (NLP) para comprender y analizar texto, e incluye las siguientes características principales:

  • Análisis de sentimiento
  • Reconocimiento de entidades con nombre
  • Detección de idiomas
  • Extracción de frases clave
  • Entity Linking
  • Análisis múltiple
  • Detección de información de identificación personal (PII)
  • Text Analytics for Health
  • Reconocimiento de entidades con nombre personalizado
  • Clasificación de texto personalizada
  • Resumen de texto extractivo
  • Resumen de texto abstracto

Código | fuentePaquete (PyPI) | Paquete (Conda) | Documentación | de referencia de API | Documentación del productoMuestras

Introducción

Requisitos previos

Creación de un recurso de Cognitive Services o un servicio de lenguaje

El servicio language admite el acceso de varios servicios y de un solo servicio. Cree un recurso de Cognitive Services si tiene previsto acceder a varios servicios de Cognitive Services en un único punto de conexión o clave. Solo para el acceso al servicio de idioma, cree un recurso de servicio de lenguaje. Puede crear el recurso mediante Azure Portal o la CLI de Azure siguiendo los pasos descritos en este documento.

La interacción con el servicio mediante la biblioteca cliente comienza con un cliente . Para crear un objeto de cliente, necesitará el servicio endpoint Cognitive Services o Language en el recurso y un credential que le permita acceder a:

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)

Tenga en cuenta que, para algunos recursos de Cognitive Services, el punto de conexión podría ser diferente del fragmento de código anterior. Por ejemplo, https://<region>.api.cognitive.microsoft.com/.

Instalar el paquete

Instale la biblioteca cliente de Azure Text Analytics para Python con 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))

Tenga en cuenta que 5.2.X y las versiones más recientes están dirigidas a las API de Azure Cognitive Service for Language. Estas API incluyen las características de análisis de texto y procesamiento de lenguaje natural que se encuentran en las versiones anteriores de la biblioteca cliente de Text Analytics. Además, la API de servicio ha cambiado de semántica a control de versiones basada en fechas. Esta versión de la biblioteca cliente tiene como valor predeterminado la versión de API compatible más reciente, que actualmente es 2023-04-01.

En esta tabla se muestra la relación entre las versiones del SDK y las versiones de API admitidas del servicio.

Versión del SDK Versión de la API admitidas del servicio
5.3.X: versión estable más reciente 3.0, 3.1, 2022-05-01, 2023-04-01 (valor predeterminado)
5.2.X 3.0, 3.1, 2022-05-01 (valor predeterminado)
5.1.0 3.0, 3.1 (predeterminada)
5.0.0 3.0

La versión de api se puede seleccionar pasando el argumento de palabra clave api_version al cliente. Para las características más recientes del servicio language, considere la posibilidad de seleccionar la versión más reciente de la API beta. En escenarios de producción, se recomienda la versión estable más reciente. Establecer en una versión anterior puede dar lugar a una reducción de la compatibilidad de características.

Autenticar el cliente

Obtención del punto de conexión

Puede encontrar el punto de conexión del recurso del servicio de lenguaje mediante Azure Portal o la CLI de Azure:

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

Obtención de la clave de API

Puede obtener la clave de API del recurso cognitive Services o language service en Azure Portal. Como alternativa, puede usar el fragmento de código de la CLI de Azure siguiente para obtener la clave de API del recurso.

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

Creación de una instancia de TextAnalyticsClient con una credencial de clave de API

Una vez que tenga el valor de la clave de API, puede pasarlo como una cadena a una instancia de AzureKeyCredential. Use la clave como parámetro de credencial para autenticar el cliente:

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))

Creación de una instancia de TextAnalyticsClient con una credencial de Azure Active Directory

Para usar una credencial de token de Azure Active Directory (AAD), proporcione una instancia del tipo de credencial deseado obtenido de la biblioteca azure-identity . Tenga en cuenta que los puntos de conexión regionales no admiten la autenticación de AAD. Cree un nombre de subdominio personalizado para el recurso con el fin de usar este tipo de autenticación.

La autenticación con AAD requiere una configuración inicial:

Después de la instalación, puede elegir el tipo de credencial de azure.identity que se va a usar. Por ejemplo, Se puede usar DefaultAzureCredential para autenticar el cliente:

Establezca los valores del identificador de cliente, el identificador de inquilino y el secreto de cliente de la aplicación de AAD como variables de entorno: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET

Use la credencial de token devuelta para autenticar al cliente:

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)

Conceptos clave

TextAnalyticsClient

La biblioteca cliente de Text Analytics proporciona un textAnalyticsClient para realizar análisis en lotes de de documentos. Proporciona operaciones sincrónicas y asincrónicas para acceder a un uso específico del análisis de texto, como la detección de idioma o la extracción de frases clave.

Entrada

Un documento es una sola unidad que analizarán los modelos predictivos en el servicio Language. La entrada de cada operación se pasa como una lista de documentos.

Cada documento se puede pasar como una cadena en la lista, por ejemplo.

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

o bien, si desea pasar un documento id por elemento o languagecountry_hint/, se pueden pasar como una lista de DetectLanguageInput o TextDocumentInput o una representación de tipo dict del objeto:

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!"},
]

Consulte las limitaciones del servicio para la entrada, incluidos los límites de longitud del documento, el tamaño máximo del lote y la codificación de texto admitida.

Valor devuelto

El valor devuelto de un único documento puede ser un objeto result o error. Se devuelve una lista heterogénea que contiene una colección de objetos result y error de cada operación. Estos resultados o errores coinciden con el orden de los documentos proporcionados.

Un resultado, como AnalyzeSentimentResult, es el resultado de una operación de análisis de texto y contiene una predicción o predicciones sobre una entrada de documento.

El objeto de errorDocumentError indica que el servicio tuvo problemas para procesar el documento y contiene el motivo por el que no se realizó correctamente.

Control de errores de documentos

Puede filtrar por un objeto de resultado o error en la lista mediante el is_error atributo . Para un objeto de resultado, esto siempre False es y para un DocumentError es True.

Por ejemplo, para filtrar todos los documenterrores, puede usar la comprensión de la lista:

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

También puede usar el kind atributo para filtrar entre tipos de resultado:

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}")

Operaciones de Long-Running

Las operaciones de ejecución prolongada son operaciones que constan de una solicitud inicial enviada al servicio para iniciar una operación, seguida de sondear el servicio a intervalos para determinar si la operación se ha completado o ha producido un error y, si se ha realizado correctamente, para obtener el resultado.

Los métodos que admiten el análisis sanitario, el análisis de texto personalizado o varios análisis se modelan como operaciones de larga duración. El cliente expone un begin_<method-name> método que devuelve un objeto poller. Los autores de llamadas deben esperar a que se complete la operación llamando result() al objeto de sondeo devuelto desde el begin_<method-name> método . A continuación se proporcionan fragmentos de código de ejemplo para ilustrar el uso de operaciones de larga duración .

Ejemplos

En la siguiente sección se proporcionan varios fragmentos de código que abarcan algunas de las tareas más comunes de Language Service, entre las que se incluyen:

Análisis de opiniones

analyze_sentiment examina su texto de entrada y determina si su opinión es positiva, negativa, neutra o mixta. La respuesta incluye análisis de sentimiento por oración y puntuaciones de confianza.

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 respuesta devuelta es una lista heterogénea de objetos result y error: list[AnalyzeSentimentResult, DocumentError]

Consulte la documentación del servicio para obtener una explicación conceptual del análisis de sentimiento. Para ver cómo realizar un análisis más pormenorizados en las opiniones relacionadas con aspectos individuales (como atributos de un producto o servicio) en un texto, consulte aquí.

Reconocimiento de entidades

recognize_entities reconoce entidades y categorías en su texto de entrada como personas, lugares, organizaciones, fecha y hora, cantidades, porcentajes, monedas, 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 respuesta devuelta es una lista heterogénea de objetos result y error: list[RecognizeEntitiesResult, DocumentError]

Consulte la documentación del servicio para obtener una explicación conceptual del reconocimiento de entidades con nombre y los tipos admitidos.

Reconocimiento de entidades vinculadas

recognize_linked_entities reconoce y desambigua la identidad de cada entidad encontrada en su texto de entrada (por ejemplo, determinar si una aparición de la palabra Marte hace referencia al planeta o al dios romano de la guerra). Las entidades reconocidas están asociadas a direcciones URL a una knowledge base conocida, como Wikipedia.

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 respuesta devuelta es una lista heterogénea de objetos result y error: list[RecognizeLinkedEntitiesResult, DocumentError]

Consulte la documentación del servicio para obtener una explicación conceptual de la vinculación de entidades y los tipos admitidos.

Reconocimiento de entidades DE PII

recognize_pii_entities reconoce y clasifica las entidades de información de identificación personal (PII) en su texto de entrada, como números de seguridad social, información de cuenta bancaria, números de tarjeta de crédito, 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 respuesta devuelta es una lista heterogénea de objetos result y error: list[RecognizePiiEntitiesResult, DocumentError]

Consulte la documentación del servicio para conocer los tipos de entidad piI admitidos.

Nota: El servicio Recognize PII Entities está disponible en la versión de API v3.1 y versiones posteriores.

Extracción de frases clave

extract_key_phrases determina los principales puntos de conversación en su texto de entrada. Por ejemplo, para el texto de entrada "La comida era deliciosa y había un personal maravilloso", la API devuelve: "comida" y "personal maravilloso".

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 respuesta devuelta es una lista heterogénea de objetos result y error: list[ExtractKeyPhrasesResult, DocumentError]

Consulte la documentación del servicio para obtener una explicación conceptual de la extracción de frases clave.

Detección de idioma

detect_language determina el idioma de su texto de entrada, incluida la puntuación de confianza del idioma previsto.

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 respuesta devuelta es una lista heterogénea de objetos result y error: list[DetectLanguageResult, DocumentError]

Consulte la documentación del servicio para obtener una explicación conceptual de la detección de idioma y el idioma y la compatibilidad regional.

Análisis de entidades sanitarias

La operación de larga duraciónbegin_analyze_healthcare_entities extrae las entidades reconocidas en el dominio sanitario e identifica las relaciones entre las entidades del documento de entrada y los vínculos a orígenes conocidos de información en varias bases de datos conocidas, como 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
]

Nota: Análisis de entidades sanitarias solo está disponible con la versión 3.1 de la API y versiones más recientes.

Análisis múltiple

La operación de ejecución prolongadabegin_analyze_actions realiza varios análisis en un conjunto de documentos en una sola solicitud. Actualmente se admite mediante cualquier combinación de las siguientes API de lenguaje en una sola solicitud:

  • Reconocimiento de entidades
  • Reconocimiento de entidades de PII
  • Reconocimiento de entidades vinculadas
  • Extracción de frases clave
  • Análisis de sentimiento
  • Reconocimiento de entidades personalizados (api, versión 2022-05-01 y posteriores)
  • Clasificación personalizada de etiquetas únicas (API versión 2022-05-01 y posteriores)
  • Clasificación personalizada de varias etiquetas (API versión 2022-05-01 y posteriores)
  • Análisis de entidades sanitarias (API, versión 2022-05-01 y posteriores)
  • Extractive Summarization (API, versión 2023-04-01 y posteriores)
  • Resumen abstracto (versión de API 2023-04-01 y versiones posteriores)
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 respuesta devuelta es un objeto que encapsula varios iterables, cada uno de los cuales representa los resultados de análisis individuales.

Nota: El análisis múltiple está disponible en la versión 3.1 de la API y versiones posteriores.

Configuración opcional

Los argumentos de palabra clave opcionales se pueden pasar en el nivel de cliente y por operación. En la documentación de referencia de azure-core se describen las configuraciones disponibles para los reintentos, el registro, los protocolos de transporte, etc.

Solución de problemas

General

El cliente Text Analytics generará excepciones definidas en Azure Core.

Registro

Esta biblioteca usa la biblioteca de registro estándar para el registro. La información básica sobre las sesiones HTTP (direcciones URL, encabezados, etc.) se registra en el nivel INFO.

El registro detallado del nivel de depuración, incluidos los cuerpos de solicitud y respuesta, y los encabezados no redactados, se puede habilitar en un cliente con el argumento de palabra clave 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."])

Igualmente, logging_enable puede habilitar el registro detallado de una sola operación, aunque no esté habilitado para el cliente:

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

Pasos siguientes

Más código de ejemplo

Estos ejemplos de código muestran operaciones de escenario comunes con la biblioteca cliente de Azure Text Analytics.

Autentique el cliente con una clave de API de Cognitive Services/Language Service o una credencial de token de azure-identity:

Escenarios frecuentes

Escenarios avanzados

Documentación adicional

Para obtener documentación más amplia sobre Azure Cognitive Service for Language, consulte la documentación de Language Service sobre docs.microsoft.com.

Contribuciones

Este proyecto agradece las contribuciones y sugerencias. La mayoría de las contribuciones requieren que acepte un Contrato de licencia para el colaborador (CLA) que declara que tiene el derecho a concedernos y nos concede los derechos para usar su contribución. Para obtener más información, visite cla.microsoft.com.

Cuando se envía una solicitud de incorporación de cambios, un bot de CLA determinará de forma automática si tiene que aportar un CLA y completar la PR adecuadamente (por ejemplo, la etiqueta, el comentario). Solo siga las instrucciones que le dará el bot. Solo será necesario que lo haga una vez en todos los repositorios con nuestro CLA.

Este proyecto ha adoptado el Código de conducta de Microsoft Open Source. Para más información, consulte las preguntas más frecuentes del código de conducta o póngase en contacto con opencode@microsoft.com si tiene cualquier otra pregunta o comentario.