Biblioteca de clientes do Azure Análise de Texto para Python – versão 5.3.0
O Serviço Cognitivo do Azure para Linguagem é um serviço baseado em nuvem que fornece recursos de NLP (Processamento de Linguagem Natural) para entender e analisar texto e inclui os seguintes recursos de main:
- Análise de Sentimento
- Reconhecimento de Entidade Nomeada
- Detecção de Idioma
- Extração de Frases-Chave
- Vinculação de Identidade
- Análise múltipla
- Detecção de PII (Informações de Identificação Pessoal)
- Análise de Texto para integridade
- Reconhecimento de Entidade Nomeada personalizado
- Classificação de texto personalizada
- Resumo de texto extrativo
- Resumo de texto abstrativo
Código-fonte | Pacote (PyPI) | Pacote (Conda) | Documentação | de referência da APIDocumentação do produto | Amostras
Introdução
Pré-requisitos
- O Python 3.7 posteriormente é necessário para usar esse pacote.
- Você deve ter uma assinatura do Azure e um recurso de Serviços Cognitivos ou serviço de linguagem para usar esse pacote.
Criar um recurso dos Serviços Cognitivos ou do Serviço de Linguagem
O serviço de Linguagem dá suporte ao acesso de vários serviços e de serviço único. Crie um recurso dos Serviços Cognitivos se você planeja acessar vários serviços cognitivos em um só ponto de extremidade/chave. Somente para acesso ao serviço de linguagem, crie um recurso de serviço de linguagem. Você pode criar o recurso usando o Portal do Azure ou a CLI do Azure seguindo as etapas neste documento.
A interação com o serviço usando a biblioteca de clientes começa com um cliente .
Para criar um objeto cliente, você precisará dos Serviços Cognitivos ou do serviço endpoint
de Linguagem para seu recurso e um credential
que permita que você acesse:
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)
Observe que, para alguns recursos dos Serviços Cognitivos, o ponto de extremidade pode parecer diferente do snippet de código acima.
Por exemplo, https://<region>.api.cognitive.microsoft.com/
.
Instalar o pacote
Instale a biblioteca de clientes do Azure Análise de Texto para Python com 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))
Observe que
5.2.X
e mais recentes são direcionados ao Serviço Cognitivo do Azure para APIs de Linguagem. Essas APIs incluem a análise de texto e os recursos de processamento de idioma natural encontrados nas versões anteriores do Análise de Texto biblioteca de clientes. Além disso, a API de serviço foi alterada de controle de versão semântico para baseado em data. Essa versão da biblioteca de clientes usa como padrão a versão mais recente da API com suporte, que atualmente é2023-04-01
.
Esta tabela mostra a relação entre as versões do SDK e as versões de API com suporte do serviço
Versão do SDK | Versão da API do serviço com suporte |
---|---|
5.3.X – Versão estável mais recente | 3.0, 3.1, 2022-05-01, 2023-04-01 (padrão) |
5.2.X | 3.0, 3.1, 2022-05-01 (padrão) |
5.1.0 | 3.0, 3.1 (padrão) |
5.0.0 | 3.0 |
A versão da API pode ser selecionada passando o argumento api_version palavra-chave para o cliente. Para os recursos mais recentes do serviço de linguagem, considere selecionar a versão mais recente da API beta. Para cenários de produção, a versão estável mais recente é recomendada. A configuração para uma versão mais antiga pode resultar em redução da compatibilidade de recursos.
Autenticar o cliente
Obter o ponto de extremidade
Você pode encontrar o ponto de extremidade para o recurso de serviço de linguagem usando o Portal do Azure ou a CLI do Azure:
# Get the endpoint for the Language service resource
az cognitiveservices account show --name "resource-name" --resource-group "resource-group-name" --query "properties.endpoint"
Obter a chave de API
Você pode obter a chave de API dos Serviços Cognitivos ou do recurso de serviço de linguagem no Portal do Azure. Como alternativa, você pode usar o snippet da CLI do Azure abaixo para obter a chave de API do recurso.
az cognitiveservices account keys list --name "resource-name" --resource-group "resource-group-name"
Criar um TextAnalyticsClient com uma credencial de chave de API
Depois de ter o valor da chave de API, você poderá passá-la como uma cadeia de caracteres para uma instância de AzureKeyCredential. Use a chave como o parâmetro de credencial para autenticar o 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))
Criar um TextAnalyticsClient com uma credencial do Azure Active Directory
Para usar uma credencial de token do AAD (Azure Active Directory), forneça uma instância do tipo de credencial desejado obtido da biblioteca azure-identity . Observe que os pontos de extremidade regionais não dão suporte à autenticação do AAD. Crie um nome de subdomínio personalizado para o recurso para usar esse tipo de autenticação.
A autenticação com o AAD requer alguma configuração inicial:
- Instalar azure-identity
- Registrar um novo aplicativo do AAD
- Conceda acesso ao serviço de Linguagem atribuindo a
"Cognitive Services Language Reader"
função à entidade de serviço.
Após a instalação, você pode escolher qual tipo de credencial de azure.identity usar. Por exemplo, DefaultAzureCredential pode ser usado para autenticar o cliente:
Defina os valores da ID do cliente, da ID do locatário e do segredo do cliente do aplicativo AAD como variáveis de ambiente: AZURE_CLIENT_ID, AZURE_TENANT_ID AZURE_CLIENT_SECRET
Use a credencial de token retornada para autenticar o 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)
Principais conceitos
TextAnalyticsClient
A biblioteca de clientes do Análise de Texto fornece um TextAnalyticsClient para fazer análises em de documentos. Ele fornece operações síncronas e assíncronas para acessar um uso específico da análise de texto, como detecção de idioma ou extração de frases-chave.
Entrada
Um documento é uma única unidade a ser analisada pelos modelos preditivos no serviço de Linguagem. A entrada para cada operação é passada como uma lista de documentos.
Cada documento pode ser passado como uma cadeia de caracteres na lista, por exemplo,
documents = ["I hated the movie. It was so slow!", "The movie made it into my top ten favorites. What a great movie!"]
ou, se você quiser passar um documento id
por item ou language
country_hint
/, eles poderão ser passados como uma lista de DetectLanguageInput ou TextDocumentInput ou uma representação semelhante a um ditado do 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!"},
]
Confira limitações de serviço para a entrada, incluindo limites de comprimento do documento, tamanho máximo do lote e codificação de texto com suporte.
Valor Retornado
O valor retornado de um único documento pode ser um resultado ou um objeto de erro. Uma lista heterogênea que contém uma coleção de objetos result e error é retornada de cada operação. Esses resultados/erros correspondem ao índice com a ordem dos documentos fornecidos.
Um resultado, como AnalyzeSentimentResult, é o resultado de uma operação de análise de texto e contém uma previsão ou previsões sobre uma entrada de documento.
O objeto de erro, DocumentError, indica que o serviço teve problemas para processar o documento e contém o motivo pelo qual ele não teve êxito.
Tratamento de erros de documento
Você pode filtrar um resultado ou um objeto de erro na lista usando o is_error
atributo . Para um objeto de resultado, isso é sempre False
e para um DocumentError este é True
.
Por exemplo, para filtrar todos os DocumentErrors, você pode usar a compreensão da lista:
response = text_analytics_client.analyze_sentiment(documents)
successful_responses = [doc for doc in response if not doc.is_error]
Você também pode usar o 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}")
Operações do Long-Running
Operações de execução longa são operações que consistem em uma solicitação inicial enviada ao serviço para iniciar uma operação, seguidas pela sondagem do serviço em intervalos para determinar se a operação foi concluída ou falhou e, se foi bem-sucedida, para obter o resultado.
Métodos que dão suporte à análise de serviços de saúde, análise de texto personalizada ou várias análises são modelados como operações de execução prolongada.
O cliente expõe um begin_<method-name>
método que retorna um objeto poller. Os chamadores devem aguardar a conclusão da operação chamando result()
o objeto poller retornado do begin_<method-name>
método .
Snippets de código de exemplo são fornecidos para ilustrar o uso de operações de longa execução abaixo.
Exemplos
A seção a seguir fornece vários snippets de código que abrangem algumas das tarefas mais comuns do Serviço de Linguagem, incluindo:
- Analisar Sentimento
- Reconhecer entidades
- Reconhecer entidades vinculadas
- Reconhecer entidades PII
- Extrair frases-chave
- Detectar Idioma
- Análise de entidades de saúde
- Análise múltipla
- Reconhecimento de Entidade Personalizada
- Classificação personalizada de rótulo único
- Classificação de vários rótulos personalizados
- Resumo extrativo
- Resumo Abstrativo
Analisar Sentimento
analyze_sentiment examina seu texto de entrada e determina se seu sentimento é positivo, negativo, neutro ou misto. Sua resposta inclui análise de sentimento por frase e pontuações de confiança.
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}")
A resposta retornada é uma lista heterogênea de objetos de resultado e erro: list[AnalyzeSentimentResult, DocumentError]
Consulte a documentação do serviço para obter uma discussão conceitual sobre análise de sentimento. Para ver como conduzir uma análise mais granular nas opiniões relacionadas a aspectos individuais (como atributos de um produto ou serviço) em um texto, consulte aqui.
Reconhecer entidades
recognize_entities reconhece e categoria entidades em seu texto de entrada como pessoas, locais, organizações, data/hora, quantidades, percentuais, moedas e muito mais.
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)
)
)
A resposta retornada é uma lista heterogênea de objetos de resultado e erro: list[RecognizeEntitiesResult, DocumentError]
Consulte a documentação do serviço para obter uma discussão conceitual sobre o reconhecimento de entidade nomeada e os tipos com suporte.
Reconhecer entidades vinculadas
recognize_linked_entities reconhece e desambigua a identidade de cada entidade encontrada em seu texto de entrada (por exemplo, determinar se uma ocorrência da palavra Marte se refere ao planeta ou ao deus romano da guerra). Entidades reconhecidas são associadas a URLs a um base de dados de conhecimento conhecido, como a 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
A resposta retornada é uma lista heterogênea de objetos de resultado e erro: list[RecognizeLinkedEntitiesResult, DocumentError]
Consulte a documentação do serviço para obter uma discussão conceitual sobre vinculação de entidade e tipos com suporte.
Reconhecer entidades PII
recognize_pii_entities reconhece e categoriza entidades de PII (Informações de Identificação Pessoal) em seu texto de entrada, como Números da Previdência Social, informações de conta bancária, números de cartão de crédito e muito mais.
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
))
A resposta retornada é uma lista heterogênea de objetos de resultado e erro: list[RecognizePiiEntitiesResult, DocumentError]
Consulte a documentação do serviço para obter tipos de entidade PII com suporte.
Observação: o serviço Reconhecer Entidades de PII está disponível na versão v3.1 e mais recente da API.
Extrair frases-chave
extract_key_phrases determina os pontos de discussão main em seu texto de entrada. Por exemplo, para o texto de entrada "A comida estava deliciosa e havia uma equipe maravilhosa", a API retorna: "comida" e "equipe maravilhosa".
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)
))
A resposta retornada é uma lista heterogênea de objetos de resultado e erro: list[ExtractKeyPhrasesResult, DocumentError]
Consulte a documentação do serviço para obter uma discussão conceitual sobre a extração de frases-chave.
Detectar o idioma
detect_language determina o idioma de seu texto de entrada, incluindo a pontuação de confiança do 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
))
A resposta retornada é uma lista heterogênea de objetos de resultado e erro: list[DetectLanguageResult, DocumentError]
Consulte a documentação do serviço para obter uma discussão conceitual sobre detecção de idioma e idioma e suporte regional.
Análise de entidades de saúde
A operação de execução longa begin_analyze_healthcare_entities extrai entidades reconhecidas dentro do domínio de saúde e identifica relações entre entidades dentro do documento de entrada e links para fontes de informações conhecidas em vários bancos de dados conhecidos, 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
]
Observação: a Análise de Entidades de Saúde só está disponível com a versão da API v3.1 e mais recente.
Análise múltipla
A operação de execuçãolonga begin_analyze_actions executa várias análises em um conjunto de documentos em uma única solicitação. Atualmente, há suporte para ele usando qualquer combinação das seguintes APIs de Linguagem em uma única solicitação:
- Reconhecimento de entidades
- Reconhecimento de entidades PII
- Reconhecimento de Entidade Vinculada
- Extração de Frases-Chave
- Análise de Sentimento
- Reconhecimento de Entidade Personalizada (API versão 2022-05-01 e mais recente)
- Classificação personalizada de rótulo único (versão 2022-05-01 e mais recente)
- Classificação personalizada de vários rótulos (versão 2022-05-01 e mais recente)
- Análise de Entidades de Saúde (API versão 2022-05-01 e mais recente)
- Resumo Extrativo (versão da API 2023-04-01 e mais recente)
- Resumo Abstrativo (API versão 2023-04-01 e mais recente)
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("------------------------------------------")
A resposta retornada é um objeto que encapsula vários iteráveis, cada um representando resultados de análises individuais.
Observação: várias análises estão disponíveis na versão da API v3.1 e mais recente.
Configuração opcional
Argumentos opcionais de palavra-chave podem ser passados no nível do cliente e por operação. A documentação de referência do azure-core descreve as configurações disponíveis para repetições, registro em log, protocolos de transporte e muito mais.
Solução de problemas
Geral
O cliente Análise de Texto gerará exceções definidas no Azure Core.
Log
Essa biblioteca usa a biblioteca de log padrão para registro em log. Informações básicas sobre sessões HTTP (URLs, cabeçalhos etc.) são registradas no nível INFO.
O log detalhado no nível de DEBUG, incluindo corpos de solicitação/resposta e cabeçalhos não redigidos, pode ser habilitado em um cliente com o argumento de palavra-chave 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."])
Da mesma forma, logging_enable
pode habilitar o log detalhado para uma operação individual, mesmo quando ela não está habilitada para o cliente:
result = text_analytics_client.analyze_sentiment(documents, logging_enable=True)
Próximas etapas
Mais códigos de exemplo
Esses exemplos de código mostram operações de cenário comuns com a biblioteca de clientes Análise de Texto do Azure.
Autentique o cliente com uma chave de API de serviço de Linguagem/Serviços Cognitivos ou uma credencial de token do azure-identity:
Cenários comuns
- Analisar sentimento: sample_analyze_sentiment.py (versão assíncrona)
- Reconhecer entidades: sample_recognize_entities.py (versão assíncrona)
- Reconhecer informações de identificação pessoal: sample_recognize_pii_entities.py (versão assíncrona)
- Reconhecer entidades vinculadas: sample_recognize_linked_entities.py (versão assíncrona)
- Extrair frases-chave: sample_extract_key_phrases.py (versão assíncrona)
- Detectar idioma: sample_detect_language.py (versão assíncrona)
- Análise de Entidades de Saúde: sample_analyze_healthcare_entities.py (versão assíncrona)
- Análise Múltipla: sample_analyze_actions.py (versão assíncrona)
- Reconhecimento de Entidade Personalizada: sample_recognize_custom_entities.py (async_version)
- Classificação personalizada de rótulo único: sample_single_label_classify.py (async_version)
- Classificação personalizada de vários rótulos: sample_multi_label_classify.py (async_version)
- Resumo de texto extrativo: sample_extract_summary.py (versão assíncrona)
- Resumo de texto abstrativo: sample_abstract_summary.py (versão assíncrona)
Cenários avançados
- Mineração de opiniões: sample_analyze_sentiment_with_opinion_mining.py (async_version)
Documentação adicional
Para obter uma documentação mais abrangente sobre o Serviço Cognitivo do Azure para Linguagem, consulte a documentação do Serviço de Linguagem sobre docs.microsoft.com.
Contribuição
Este projeto aceita contribuições e sugestões. A maioria das contribuições exige que você concorde com um CLA (Contrato de Licença do Colaborador) declarando que você tem o direito de nos conceder, e de fato concede, os direitos de usar sua contribuição. Para obter detalhes, visite cla.microsoft.com.
Quando você envia uma solicitação de pull, um bot do CLA determina automaticamente se você precisa fornecer um CLA e preencher a PR corretamente (por exemplo, rótulo, comentário). Basta seguir as instruções fornecidas pelo bot. Você só precisará fazer isso uma vez em todos os repositórios que usam nosso CLA.
Este projeto adotou o Código de Conduta de Software Livre da Microsoft. Para obter mais informações, confira as Perguntas frequentes sobre o Código de Conduta ou contate opencode@microsoft.com para enviar outras perguntas ou comentários.
Azure SDK for Python