Azure Textanalys-klientbibliotek för Python – version 5.3.0
Azure Cognitive Service for Language är en molnbaserad tjänst som tillhandahåller NLP-funktioner (Natural Language Processing) för att förstå och analysera text och innehåller följande huvudfunktioner:
- Attitydanalys
- Igenkänning av namngiven enhet
- Språkidentifiering
- Extrahering av nyckelfraser
- Entity Linking
- Flera analyser
- Identifiering av personligt identifierbar information (PII)
- Textanalys för hälso- och sjukvården
- Igenkänning av anpassad namngiven entitet
- Klassificering av anpassad text
- Sammanfattning av extraherad text
- Sammanfattning av abstrakt text
| KällkodPaket (PyPI) | Paket (Conda) | API-referensdokumentation | Produktdokumentation | Prover
Komma igång
Förutsättningar
- Python 3.7 senare krävs för att använda det här paketet.
- Du måste ha en Azure-prenumeration och en Cognitive Services- eller Language-tjänstresurs för att kunna använda det här paketet.
Skapa en Cognitive Services- eller Språktjänstresurs
Språktjänsten stöder både åtkomst med flera tjänster och en enda tjänst. Skapa en Cognitive Services-resurs om du planerar att komma åt flera kognitiva tjänster under en enda slutpunkt/nyckel. Skapa en språktjänstresurs för endast åtkomst till språktjänsten. Du kan skapa resursen med hjälp av Azure-portalen eller Azure CLI genom att följa stegen i det här dokumentet.
Interaktionen med tjänsten med hjälp av klientbiblioteket börjar med en .
Om du vill skapa ett klientobjekt behöver du Cognitive Services- eller Language-tjänsten endpoint
till resursen och en credential
som gör att du kan komma åt:
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)
Observera att slutpunkten för vissa Cognitive Services-resurser kan se annorlunda ut än kodfragmentet ovan.
Till exempel https://<region>.api.cognitive.microsoft.com/
.
Installera paketet
Installera Azure Textanalys-klientbiblioteket för Python med 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))
Observera att
5.2.X
och senare är inriktade på Azure Cognitive Service för språk-API:er. Dessa API:er innehåller textanalys och bearbetningsfunktioner för naturligt språk som finns i de tidigare versionerna av Textanalys-klientbiblioteket. Dessutom har tjänst-API:et ändrats från semantisk till datumbaserad versionshantering. Den här versionen av klientbiblioteket har som standard den senaste API-versionen som stöds, som för närvarande är2023-04-01
.
Den här tabellen visar relationen mellan SDK-versioner och API-versioner som stöds av tjänsten
SDK-version | API-version av tjänsten som stöds |
---|---|
5.3.X – Senaste stabila versionen | 3.0, 3.1, 2022-05-01, 2023-04-01 (standard) |
5.2.X | 3.0, 3.1, 2022-05-01 (standard) |
5.1.0 | 3.0, 3.1 (standard) |
5.0.0 | 3.0 |
DU kan välja API-version genom att skicka nyckelordsargumentet api_version till klienten. För de senaste funktionerna i Language Service kan du välja den senaste beta-API-versionen. För produktionsscenarier rekommenderas den senaste stabila versionen. Om du anger en äldre version kan funktionskompatibiliteten minska.
Autentisera klienten
Hämta slutpunkten
Du hittar slutpunkten för språktjänstresursen med hjälp av Azure-portalen eller 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"
Hämta API-nyckeln
Du kan hämta API-nyckeln från Cognitive Services- eller Language Service-resursen i Azure-portalen. Du kan också använda Azure CLI-kodfragmentet nedan för att hämta API-nyckeln för din resurs.
az cognitiveservices account keys list --name "resource-name" --resource-group "resource-group-name"
Skapa en TextAnalyticsClient med en API-nyckelautentiseringsuppgift
När du har värdet för API-nyckeln kan du skicka den som en sträng till en instans av AzureKeyCredential. Använd nyckeln som parameter för autentiseringsuppgifter för att autentisera klienten:
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))
Skapa en TextAnalyticsClient med en Azure Active Directory-autentiseringsuppgift
Om du vill använda en AAD-tokenautentisering (Azure Active Directory) anger du en instans av önskad typ av autentiseringsuppgifter som hämtats från biblioteket azure-identity . Observera att regionala slutpunkter inte stöder AAD-autentisering. Skapa ett anpassat underdomännamn för resursen för att kunna använda den här typen av autentisering.
Autentisering med AAD kräver viss inledande konfiguration:
- Installera azure-identity
- Registrera ett nytt AAD-program
- Bevilja åtkomst till språktjänsten genom att
"Cognitive Services Language Reader"
tilldela rollen till tjänstens huvudnamn.
Efter installationen kan du välja vilken typ av autentiseringsuppgifter från azure.identity som ska användas. Till exempel kan DefaultAzureCredential användas för att autentisera klienten:
Ange värdena för klient-ID, klient-ID och klienthemlighet för AAD-programmet som miljövariabler: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET
Använd den returnerade tokenautentiseringsuppgiften för att autentisera klienten:
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)
Viktiga begrepp
TextAnalyticsClient
Klientbiblioteket Textanalys innehåller en TextAnalyticsClient för analys av med dokument. Den innehåller både synkrona och asynkrona åtgärder för att få åtkomst till en specifik användning av textanalys, till exempel språkidentifiering eller extrahering av nyckelfraser.
Indata
Ett dokument är en enda enhet som ska analyseras av prediktiva modeller i språktjänsten. Indata för varje åtgärd skickas som en lista över dokument.
Varje dokument kan skickas som en sträng i listan, t.ex.
documents = ["I hated the movie. It was so slow!", "The movie made it into my top ten favorites. What a great movie!"]
eller, om du vill skicka ett dokument id
per objekt eller language
country_hint
/, kan de skickas som en lista över DetectLanguageInput eller TextDocumentInput eller en dict-liknande representation av objektet:
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!"},
]
Se tjänstbegränsningar för indata, inklusive dokumentlängdsgränser, maximal batchstorlek och textkodning som stöds.
Returvärde
Returvärdet för ett enskilt dokument kan vara ett resultat- eller felobjekt. En heterogen lista som innehåller en samling resultat- och felobjekt returneras från varje åtgärd. Dessa resultat/fel är indexmatchade med ordningen på de angivna dokumenten.
Ett resultat, till exempel AnalyzeSentimentResult, är resultatet av en textanalysåtgärd och innehåller en förutsägelse eller förutsägelser om ett dokumentindata.
FelobjektetDocumentError anger att tjänsten hade problem med att bearbeta dokumentet och innehåller orsaken till att det misslyckades.
Dokumentfelhantering
Du kan filtrera efter ett resultat- eller felobjekt i listan med hjälp av attributet is_error
. För ett resultatobjekt är detta alltid False
och för en DocumentError är True
detta .
Om du till exempel vill filtrera bort alla DocumentErrors kan du använda listförståelse:
response = text_analytics_client.analyze_sentiment(documents)
successful_responses = [doc for doc in response if not doc.is_error]
Du kan också använda attributet kind
för att filtrera mellan resultattyper:
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}")
Long-Running åtgärder
Långvariga åtgärder är åtgärder som består av en första begäran som skickas till tjänsten för att starta en åtgärd, följt av avsökning av tjänsten med jämna mellanrum för att avgöra om åtgärden har slutförts eller misslyckats, och om den har lyckats för att få resultatet.
Metoder som stöder hälso- och sjukvårdsanalys, anpassad textanalys eller flera analyser modelleras som långvariga åtgärder.
Klienten exponerar en begin_<method-name>
metod som returnerar ett pollerobjekt. Anropare bör vänta tills åtgärden har slutförts genom att anropa result()
det pollerobjekt som returneras från begin_<method-name>
metoden .
Exempelkodfragment tillhandahålls för att illustrera med hjälp av långvariga åtgärder nedan.
Exempel
Följande avsnitt innehåller flera kodfragment som täcker några av de vanligaste uppgifterna för språktjänsten, inklusive:
- Analysera sentiment
- Identifiera entiteter
- Identifiera länkade entiteter
- Identifiera PII-entiteter
- Extrahera nyckelfraser
- Identifiera språk
- Analys av hälso- och sjukvårdsentiteter
- Flera analyser
- Anpassad entitetsigenkänning
- Anpassad klassificering med en etikett
- Anpassad klassificering med flera etiketter
- Extraheringssammanfattning
- Abstrakt sammanfattning
Analysera sentiment
analyze_sentiment tittar på indatatexten och avgör om dess sentiment är positivt, negativt, neutralt eller blandat. Svaret innehåller attitydanalys per mening och förtroendepoäng.
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}")
Det returnerade svaret är en heterogen lista över resultat- och felobjekt: list[AnalyzeSentimentResult, DocumentError]
I tjänstdokumentationen finns en konceptuell diskussion om attitydanalys. Information om hur du utför mer detaljerad analys av åsikter som rör enskilda aspekter (till exempel attribut för en produkt eller tjänst) i en text finns här.
Identifiera entiteter
recognize_entities identifierar och kategorier entiteter i indatatexten som personer, platser, organisationer, datum/tid, kvantiteter, procenttal, valutor med mera.
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)
)
)
Det returnerade svaret är en heterogen lista över resultat- och felobjekt: list[RecognizeEntitiesResult, DocumentError]
Se tjänstdokumentationen för en konceptuell beskrivning av namngiven entitetsigenkänning och typer som stöds.
Identifiera länkade entiteter
recognize_linked_entities känner igen och förtydligar identiteten för varje entitet som finns i dess indatatext (till exempel att avgöra om en förekomst av ordet Mars refererar till planeten eller till den romerska krigsguden). Identifierade entiteter är associerade med URL:er till en välkänd kunskapsbas, till exempel 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
Det returnerade svaret är en heterogen lista över resultat- och felobjekt: list[RecognizeLinkedEntitiesResult, DocumentError]
Se tjänstdokumentationen för en konceptuell diskussion om entitetslänkning och typer som stöds.
Identifiera PII-entiteter
recognize_pii_entities identifierar och kategoriserar PII-entiteter (Personligt identifierbar information) i indatatexten, till exempel personnummer, bankkontoinformation, kreditkortsnummer med mera.
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
))
Det returnerade svaret är en heterogen lista över resultat- och felobjekt: list[RecognizePiiEntitiesResult, DocumentError]
Se tjänstdokumentationen för pii-entitetstyper som stöds.
Obs! Tjänsten Identifiera PII-entiteter är tillgänglig i API-version v3.1 och senare.
Extrahera nyckelfraser
extract_key_phrases avgör de viktigaste diskussionspunkterna i inmatningstexten. Till exempel för indatatexten "Maten var utsökt och det fanns underbar personal" returnerar API:et: "mat" och "underbar personal".
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)
))
Det returnerade svaret är en heterogen lista över resultat- och felobjekt: list[ExtractKeyPhrasesResult, DocumentError]
Se tjänstdokumentationen för en konceptuell diskussion om extrahering av nyckelfraser.
Identifiera språk
detect_language avgör språket i indatatexten, inklusive konfidenspoängen för det förutsagda språket.
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
))
Det returnerade svaret är en heterogen lista över resultat- och felobjekt: list[DetectLanguageResult, DocumentError]
Se tjänstdokumentationen för en konceptuell diskussion om språkidentifiering och språk och regional support.
Analys av hälso- och sjukvårdsentiteter
Tidskrävande åtgärdbegin_analyze_healthcare_entities extraherar entiteter som identifieras i sjukvårdsdomänen och identifierar relationer mellan entiteter i indatadokumentet och länkar till kända informationskällor i olika välkända databaser, till exempel UMLS, CHV, MSH osv.
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
]
Obs! Analys av hälso- och sjukvårdsentiteter är endast tillgängligt med API-version v3.1 och senare.
Flera analyser
Långvariga åtgärderbegin_analyze_actions utför flera analyser över en uppsättning dokument i en enda begäran. För närvarande stöds det med valfri kombination av följande språk-API:er i en enda begäran:
- Entitetsigenkänning
- Igenkänning av PII-entiteter
- Igenkänning av länkad entitet
- Extrahering av nyckelfraser
- Attitydanalys
- Anpassad entitetsigenkänning (API-version 2022-05-01 och senare)
- Anpassad klassificering med en etikett (API-version 2022-05-01 och senare)
- Anpassad klassificering av flera etiketter (API-version 2022-05-01 och senare)
- Analys av sjukvårdsentiteter (API-version 2022-05-01 och senare)
- Extraheringssammanfattning (API-version 2023-04-01 och senare)
- Abstrakt sammanfattning (API-version 2023-04-01 och senare)
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("------------------------------------------")
Det returnerade svaret är ett objekt som kapslar in flera iterabler, som var och en representerar resultatet av enskilda analyser.
Obs! Flera analyser är tillgängliga i API-version v3.1 och senare.
Valfri konfiguration
Valfria nyckelordsargument kan skickas in på klient- och åtgärdsnivå. Referensdokumentationen för azure-core beskriver tillgängliga konfigurationer för återförsök, loggning, transportprotokoll med mera.
Felsökning
Allmänt
Den Textanalys klienten genererar undantag som definierats i Azure Core.
Loggning
Det här biblioteket använder standardloggningsbiblioteket för loggning. Grundläggande information om HTTP-sessioner (URL:er, rubriker osv.) loggas på INFO-nivå.
Detaljerad loggning på FELSÖKNINGsnivå, inklusive begärande-/svarskroppar och oredigerade rubriker, kan aktiveras på en klient med nyckelordsargumentet 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."])
logging_enable
På samma sätt kan aktivera detaljerad loggning för en enda åtgärd, även om den inte är aktiverad för klienten:
result = text_analytics_client.analyze_sentiment(documents, logging_enable=True)
Nästa steg
Mer exempelkod
Dessa kodexempel visar vanliga scenarioåtgärder med Azure Textanalys-klientbiblioteket.
Autentisera klienten med en API-nyckel för Cognitive Services/Language-tjänsten eller en tokenautentiseringsuppgift från azure-identity:
Vanliga scenarier
- Analysera sentiment: sample_analyze_sentiment.py (asynkron version)
- Identifiera entiteter: sample_recognize_entities.py (asynkron version)
- Identifiera personligt identifierbar information: sample_recognize_pii_entities.py (asynkron version)
- Identifiera länkade entiteter: sample_recognize_linked_entities.py (asynkron version)
- Extrahera nyckelfraser: sample_extract_key_phrases.py (asynkron version)
- Identifiera språk: sample_detect_language.py (asynkron version)
- Analys av hälso- och sjukvårdsentiteter: sample_analyze_healthcare_entities.py (asynkron version)
- Flera analyser: sample_analyze_actions.py (asynkron version)
- Igenkänning av anpassad entitet: sample_recognize_custom_entities.py (async_version)
- Anpassad klassificering av en etikett: sample_single_label_classify.py (async_version)
- Anpassad klassificering av flera etiketter: sample_multi_label_classify.py (async_version)
- Sammanfattning av extraherad text: sample_extract_summary.py (asynkron version)
- Sammanfattning av abstrakt text: sample_abstract_summary.py (asynkron version)
Avancerade scenarier
- Åsiktsutvinning: sample_analyze_sentiment_with_opinion_mining.py (async_version)
Ytterligare dokumentation
Mer omfattande dokumentation om Azure Cognitive Service for Language finns i Language Service-dokumentationen om docs.microsoft.com.
Bidra
Det här projektet välkomnar bidrag och förslag. Merparten av bidragen kräver att du godkänner ett licensavtal för bidrag, där du deklarerar att du har behörighet att bevilja oss rättigheten att använda ditt bidrag, och att du dessutom uttryckligen gör så. Mer information finns i cla.microsoft.com.
När du skickar en pull-förfrågan avgör en CLA-robot automatiskt om du måste tillhandahålla ett licensavtal för bidrag med lämplig PR (t.ex. etikett eller kommentar). Följ bara robotens anvisningar. Du behöver bara göra detta en gång för alla repor som använder vårt licensavtal för bidrag.
Det här projektet använder sig av Microsofts uppförandekod för öppen källkod. Mer information finns i Vanliga frågor och svar om uppförandekod eller kontakt opencode@microsoft.com med ytterligare frågor eller kommentarer.
Azure SDK for Python