Biblioteka klienta usługi Azure analiza tekstu dla języka Python — wersja 5.3.0
Usługa Azure Cognitive Service for Language to usługa oparta na chmurze, która zapewnia funkcje przetwarzania języka naturalnego (NLP) do zrozumienia i analizowania tekstu oraz obejmują następujące główne funkcje:
- Analiza tonacji
- Rozpoznawanie jednostek nazwanych
- Wykrywanie języka
- Wyodrębnianie kluczowych fraz
- Łączenie jednostek
- Analiza wielokrotna
- Wykrywanie informacji osobowych (PII)
- Analiza tekstu dla opieki zdrowotnej
- Niestandardowe rozpoznawanie nazwanych jednostek
- Niestandardowa klasyfikacja tekstu
- Podsumowanie tekstu wyodrębnianego
- Podsumowanie tekstu abstrakcyjnego
Kod | źródłowyPakiet (PyPI) | Pakiet (Conda) | Dokumentacja referencyjna interfejsu | APIDokumentacja | produktuPróbki
Wprowadzenie
Wymagania wstępne
- Do korzystania z tego pakietu jest wymagany język Python w wersji 3.7.
- Aby korzystać z tego pakietu, musisz mieć subskrypcję platformy Azure oraz zasób usług Cognitive Services lub Language Service .
Tworzenie zasobu usług Cognitive Services lub usługi językowej
Usługa language obsługuje zarówno dostęp do wielu usług, jak i jednosłużnych. Utwórz zasób usług Cognitive Services, jeśli planujesz uzyskać dostęp do wielu usług Cognitive Services w ramach jednego punktu końcowego/klucza. W przypadku dostępu tylko do usługi językowej utwórz zasób usługi językowej. Zasób można utworzyć przy użyciu witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure , wykonując kroki opisane w tym dokumencie.
Interakcja z usługą przy użyciu biblioteki klienta rozpoczyna się od klienta .
Aby utworzyć obiekt klienta, będziesz potrzebować usług Cognitive Services lub Language endpoint
do zasobu i obiektu credential
, który umożliwia dostęp:
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)
Należy pamiętać, że w przypadku niektórych zasobów usług Cognitive Services punkt końcowy może wyglądać inaczej niż w powyższym fragmencie kodu.
Na przykład https://<region>.api.cognitive.microsoft.com/
.
Instalowanie pakietu
Zainstaluj bibliotekę klienta usługi Azure analiza tekstu dla języka Python przy użyciu narzędzia 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))
Należy pamiętać, że
5.2.X
i nowsze są przeznaczone dla interfejsów API usługi Azure Cognitive Service for Language. Te interfejsy API obejmują funkcje analizy tekstu i przetwarzania języka naturalnego znajdujące się w poprzednich wersjach biblioteki klienta analiza tekstu. Ponadto interfejs API usługi zmienił się z semantycznego na oparte na dacie przechowywania wersji. Ta wersja biblioteki klienta jest domyślnie domyślna dla najnowszej obsługiwanej wersji interfejsu API, czyli obecnie .2023-04-01
W tej tabeli przedstawiono relację między wersjami zestawu SDK i obsługiwanymi wersjami interfejsu API usługi
Wersja zestawu SDK | Obsługiwana wersja usługi interfejsu API |
---|---|
5.3.X — najnowsza stabilna wersja | 3.0, 3.1, 2022-05-01, 2023-04-01 (ustawienie domyślne) |
5.2.X | 3.0, 3.1, 2022-05-01 (ustawienie domyślne) |
5.1.0 | 3.0, 3.1 (wartość domyślna) |
5.0.0 | 3.0 |
Wersję interfejsu API można wybrać, przekazując argument słowa kluczowego api_version do klienta. W przypadku najnowszych funkcji usługi językowej rozważ wybranie najnowszej wersji interfejsu API w wersji beta. W przypadku scenariuszy produkcyjnych zalecana jest najnowsza stabilna wersja. Ustawienie starszej wersji może spowodować zmniejszenie zgodności funkcji.
Uwierzytelnianie klienta
Pobieranie punktu końcowego
Punkt końcowy zasobu usługi językowej można znaleźć za pomocą witryny Azure Portal lub interfejsu wiersza polecenia platformy Azure:
# Get the endpoint for the Language service resource
az cognitiveservices account show --name "resource-name" --resource-group "resource-group-name" --query "properties.endpoint"
Pobieranie klucza interfejsu API
Klucz interfejsu API można uzyskać z zasobu usług Cognitive Services lub Usługi językowej w witrynie Azure Portal. Alternatywnie możesz użyć poniższego fragmentu interfejsu wiersza polecenia platformy Azure , aby uzyskać klucz interfejsu API zasobu.
az cognitiveservices account keys list --name "resource-name" --resource-group "resource-group-name"
Tworzenie elementu TextAnalyticsClient przy użyciu poświadczeń klucza interfejsu API
Po utworzeniu wartości klucza interfejsu API możesz przekazać go jako ciąg do wystąpienia obiektu AzureKeyCredential. Użyj klucza jako parametru poświadczeń, aby uwierzytelnić klienta:
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))
Tworzenie elementu TextAnalyticsClient przy użyciu poświadczeń usługi Azure Active Directory
Aby użyć poświadczeń tokenu usługi Azure Active Directory (AAD), podaj wystąpienie żądanego typu poświadczeń uzyskanego z biblioteki azure-identity . Należy pamiętać, że regionalne punkty końcowe nie obsługują uwierzytelniania usługi AAD. Utwórz niestandardową nazwę poddomeny dla zasobu, aby użyć tego typu uwierzytelniania.
Uwierzytelnianie za pomocą usługi AAD wymaga konfiguracji początkowej:
- Instalowanie tożsamości platformy Azure
- Rejestrowanie nowej aplikacji usługi AAD
- Udziel dostępu do usługi językowej, przypisując
"Cognitive Services Language Reader"
rolę do jednostki usługi.
Po skonfigurowaniu można wybrać typ poświadczeń z witryny azure.identity do użycia. Na przykład wartość DefaultAzureCredential może służyć do uwierzytelniania klienta:
Ustaw wartości identyfikatora klienta, identyfikatora dzierżawy i wpisu tajnego klienta aplikacji usługi AAD jako zmienne środowiskowe: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET
Użyj zwróconego poświadczenia tokenu, aby uwierzytelnić klienta:
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)
Kluczowe pojęcia
TextAnalyticsClient
Biblioteka klienta analiza tekstu udostępnia element TextAnalyticsClient do analizy w partiach dokumentów. Zapewnia zarówno operacje synchroniczne, jak i asynchroniczne w celu uzyskania dostępu do określonego użycia analizy tekstu, na przykład wykrywania języka lub wyodrębniania kluczowych fraz.
Dane wejściowe
Dokument jest pojedynczą jednostką do przeanalizowania przez modele predykcyjne w usłudze językowej. Dane wejściowe dla każdej operacji są przekazywane jako lista dokumentów.
Każdy dokument można przekazać jako ciąg na liście, np.
documents = ["I hated the movie. It was so slow!", "The movie made it into my top ten favorites. What a great movie!"]
lub, jeśli chcesz przekazać dokument id
dla elementu lub language
country_hint
/, można je przekazać jako listę DetectLanguageInput lub TextDocumentInput lub reprezentację obiektu przypominającą dykt:
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!"},
]
Zobacz ograniczenia usługi dotyczące danych wejściowych , w tym limity długości dokumentu, maksymalny rozmiar partii i obsługiwane kodowanie tekstu.
Wartość zwracana
Wartość zwracana dla pojedynczego dokumentu może być wynikiem lub obiektem błędu. Lista heterogeniczna zawierająca kolekcję obiektów wyników i błędów jest zwracana z każdej operacji. Te wyniki/błędy są dopasowane do kolejności podanych dokumentów.
Wynik, taki jak AnalyzeSentimentResult, jest wynikiem operacji analizy tekstu i zawiera przewidywania lub przewidywania dotyczące danych wejściowych dokumentu.
Obiekt błęduDocumentError wskazuje, że usługa miała problemy z przetwarzaniem dokumentu i zawiera przyczynę niepowodzenia.
Obsługa błędów dokumentu
Możesz filtrować wynik lub obiekt błędu na liście przy użyciu atrybutu is_error
. W przypadku obiektu wynikowego jest to zawsze False
i dla błędu DocumentError jest True
to .
Aby na przykład odfiltrować wszystkie błędy DocumentErrors, możesz użyć zrozumienia listy:
response = text_analytics_client.analyze_sentiment(documents)
successful_responses = [doc for doc in response if not doc.is_error]
Można również użyć atrybutu do filtrowania kind
między typami wyników:
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}")
operacje Long-Running
Długotrwałe operacje to operacje, które składają się z początkowego żądania wysłanego do usługi w celu uruchomienia operacji, a następnie sondowania usługi w odstępach czasu w celu ustalenia, czy operacja została ukończona, czy nie powiodła się, a jeśli zakończyła się pomyślnie, aby uzyskać wynik.
Metody, które obsługują analizę opieki zdrowotnej, niestandardową analizę tekstu lub wiele analiz, są modelowane jako długotrwałe operacje.
Klient uwidacznia metodę zwracającą begin_<method-name>
obiekt poller. Obiekt wywołujący powinien czekać na ukończenie operacji przez wywołanie result()
obiektu poller zwróconego begin_<method-name>
z metody .
Przykładowe fragmenty kodu są udostępniane w celu zilustrowania użycia długotrwałych operacji poniżej.
Przykłady
Poniższa sekcja zawiera kilka fragmentów kodu obejmujących niektóre z najbardziej typowych zadań usługi językowej, w tym:
- Analizowanie tonacji
- Rozpoznawanie jednostek
- Rozpoznawanie połączonych jednostek
- Rozpoznawanie jednostek pii
- Wyodrębnianie kluczowych fraz
- Wykrywanie języka
- Analiza jednostek opieki zdrowotnej
- Analiza wielokrotna
- Niestandardowe rozpoznawanie jednostek
- Niestandardowa klasyfikacja pojedynczej etykiety
- Niestandardowa klasyfikacja wielu etykiet
- Podsumowanie wyodrębniania
- Podsumowanie abstrakcyjne
Analizowanie tonacji
analyze_sentiment sprawdza swój tekst wejściowy i określa, czy tonacja jest pozytywna, negatywna, neutralna czy mieszana. Odpowiedź zawiera analizę tonacji na zdanie i oceny ufności.
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}")
Zwracana odpowiedź jest heterogeniczną listą obiektów wyników i błędów: list[AnalyzeSentimentResult, DocumentError]
Zapoznaj się z dokumentacją usługi, aby zapoznać się z koncepcyjną analizą tonacji. Aby zobaczyć, jak przeprowadzić bardziej szczegółową analizę opinii związanych z poszczególnymi aspektami (takimi jak atrybuty produktu lub usługi) w tekście, zobacz tutaj.
Rozpoznawanie jednostek
recognize_entities rozpoznaje i kategorie jednostek w tekście wejściowym jako osoby, miejsca, organizacje, data/godzina, ilości, wartości procentowe, waluty i nie tylko.
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)
)
)
Zwracana odpowiedź jest heterogeniczną listą obiektów wyników i błędów: list[RecognizeEntitiesResult, DocumentError]
Zapoznaj się z dokumentacją usługi, aby zapoznać się z koncepcyjnym omówieniem rozpoznawania nazwanych jednostek i obsługiwanych typów.
Rozpoznawanie połączonych jednostek
recognize_linked_entities rozpoznaje i dysambiguje tożsamość każdej jednostki znalezionej w tekście wejściowym (na przykład określenie, czy wystąpienie słowa Mars odnosi się do planety, czy do rzymskiego boga wojny). Rozpoznane jednostki są skojarzone z adresami URL dobrze znanymi baza wiedzy, takimi jak 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
Zwracana odpowiedź jest heterogeniczną listą obiektów wyników i błędów: list[RecognizeLinkedEntitiesResult, DocumentError]
Zapoznaj się z dokumentacją usługi, aby zapoznać się z koncepcyjnym omówieniem łączenia jednostek i obsługiwanych typów.
Rozpoznawanie jednostek pii
recognize_pii_entities rozpoznaje i kategoryzuje jednostki danych osobowych (PII) w tekście wejściowym, takim jak numery ubezpieczenia społecznego, informacje o koncie bankowym, numery kart kredytowych i inne.
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
))
Zwracana odpowiedź jest heterogeniczną listą obiektów wyniku i błędów: list[RecognizePiiEntitiesResult, DocumentError]
Zapoznaj się z dokumentacją usługi dotyczącą obsługiwanych typów jednostek PII.
Uwaga: Usługa Recognize PII Entities jest dostępna w interfejsie API w wersji 3.1 i nowszej.
Wyodrębnianie kluczowych fraz
extract_key_phrases określa główne punkty rozmów w tekście wejściowym. Na przykład dla tekstu wejściowego "Jedzenie było pyszne i było wspaniałe personel", interfejs API zwraca: "jedzenie" i "wspaniały personel".
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)
))
Zwracana odpowiedź jest heterogeniczną listą obiektów wyniku i błędów: list[ExtractKeyPhrasesResult, DocumentError]
Zapoznaj się z dokumentacją usługi, aby zapoznać się z koncepcyjnym omówieniem wyodrębniania kluczowych fraz.
Wykrywanie języka
detect_language określa język tekstu wejściowego, w tym współczynnik ufności przewidywanego języka.
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
))
Zwrócona odpowiedź to heterogeniczna lista obiektów wyników i błędów: list[DetectLanguageResult, DocumentError]
Zapoznaj się z dokumentacją usługi, aby zapoznać się z koncepcyjną dyskusją na temat wykrywania języka i języka oraz pomocy technicznej regionalnej.
Analiza jednostek opieki zdrowotnej
Długotrwała operacjabegin_analyze_healthcare_entities wyodrębnia jednostki rozpoznawane w domenie opieki zdrowotnej i identyfikuje relacje między jednostkami w dokumencie wejściowym oraz łączy ze znanymi źródłami informacji w różnych dobrze znanych bazach danych, takich jak UMLS, CHV, MSH itp.
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
]
Uwaga: Analiza jednostek opieki zdrowotnej jest dostępna tylko w interfejsie API w wersji 3.1 i nowszej.
Analiza wielokrotna
Długotrwała operacjabegin_analyze_actions wykonuje wiele analiz w jednym zestawie dokumentów w jednym żądaniu. Obecnie jest obsługiwana przy użyciu dowolnej kombinacji następujących interfejsów API języka w jednym żądaniu:
- Rozpoznawanie jednostek
- Rozpoznawanie jednostek PII
- Rozpoznawanie połączonej jednostki
- Wyodrębnianie kluczowych fraz
- Analiza tonacji
- Niestandardowe rozpoznawanie jednostek (interfejs API w wersji 2022-05-01 i nowszej)
- Niestandardowa klasyfikacja pojedynczej etykiety (interfejs API w wersji 2022-05-01 i nowszej)
- Niestandardowa klasyfikacja wielu etykiet (interfejs API w wersji 2022-05-01 i nowszej)
- Healthcare Entities Analysis (interfejs API w wersji 2022-05-01 i nowszej)
- Podsumowanie wyodrębniania (interfejs API w wersji 2023-04-01 i nowszej)
- Podsumowanie abstrakcyjne (interfejs API w wersji 2023-04-01 i nowszej)
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("------------------------------------------")
Zwrócona odpowiedź to obiekt hermetyzujący wiele iterowalnych elementów, z których każdy reprezentuje wyniki poszczególnych analiz.
Uwaga: wiele analiz jest dostępnych w interfejsie API w wersji 3.1 i nowszej.
Konfiguracja opcjonalna
Opcjonalne argumenty słów kluczowych można przekazać na poziomie klienta i na poziomie operacji. W dokumentacji referencyjnej platformy Azure opisano dostępne konfiguracje dotyczące ponownych prób, rejestrowania, protokołów transportowych i nie tylko.
Rozwiązywanie problemów
Ogólne
Klient analiza tekstu zgłosi wyjątki zdefiniowane w usłudze Azure Core.
Rejestrowanie
Ta biblioteka używa standardowej biblioteki rejestrowania do rejestrowania. Podstawowe informacje o sesjach HTTP (adresach URL, nagłówkach itp.) są rejestrowane na poziomie INFORMACJI.
Szczegółowe rejestrowanie na poziomie DEBUG, w tym treści żądań/odpowiedzi i nieredagowanych nagłówków, można włączyć na kliencie z argumentem słowa kluczowego 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
Podobnie można włączyć szczegółowe rejestrowanie dla pojedynczej operacji, nawet jeśli nie jest włączone dla klienta:
result = text_analytics_client.analyze_sentiment(documents, logging_enable=True)
Następne kroki
Więcej przykładów kodu
Te przykłady kodu pokazują typowe operacje scenariuszy z biblioteką klienta usługi Azure analiza tekstu.
Uwierzytelnij klienta za pomocą klucza interfejsu API usług Cognitive Services/języka lub poświadczeń tokenu z poziomu tożsamości platformy Azure:
Typowe scenariusze
- Analizowanie tonacji: sample_analyze_sentiment.py (wersja asynchronialna)
- Rozpoznawanie jednostek: sample_recognize_entities.py (wersja asynchronizna)
- Rozpoznawanie danych osobowych: sample_recognize_pii_entities.py (wersja asynchronizna)
- Rozpoznawanie połączonych jednostek: sample_recognize_linked_entities.py (wersja asynchronizna)
- Wyodrębnianie kluczowych fraz: sample_extract_key_phrases.py (wersja asynchronizuj)
- Wykrywanie języka: sample_detect_language.py (wersja asynchronizuj)
- Analiza jednostek opieki zdrowotnej: sample_analyze_healthcare_entities.py (wersja asynchronizuj)
- Analiza wielokrotna: sample_analyze_actions.py (wersja asynchroniowa)
- Rozpoznawanie jednostek niestandardowych: sample_recognize_custom_entities.py (async_version)
- Niestandardowa klasyfikacja pojedynczej etykiety: sample_single_label_classify.py (async_version)
- Niestandardowa klasyfikacja wielu etykiet: sample_multi_label_classify.py (async_version)
- Podsumowanie tekstu wyodrębnianego: sample_extract_summary.py (wersja asynchronizna)
- Podsumowanie tekstu abstrakcyjnego: sample_abstract_summary.py (wersja asynchronizna)
Scenariusze zaawansowane
- Wyszukiwanie opinii: sample_analyze_sentiment_with_opinion_mining.py (async_version)
Dodatkowa dokumentacja
Aby uzyskać bardziej obszerną dokumentację dotyczącą usługi Azure Cognitive Service for Language, zobacz dokumentację usługi językowej w docs.microsoft.com.
Współtworzenie
W tym projekcie zachęcamy do współtworzenia i zgłaszania sugestii. Współtworzenie w większości przypadków wymaga zgody na umowę licencyjną dotyczącą współautorów (CLA, Contributor License Agreement), zgodnie z którą współautor ma prawo udzielić i faktycznie udziela nam praw do używania wytworzonej przez siebie zawartości. Aby uzyskać szczegółowe informacje, odwiedź cla.microsoft.com.
Po przesłaniu żądania ściągnięcia robot CLA automatycznie określi, czy musisz przekazać umowę CLA, i doda odpowiednie informacje do tego żądania (na przykład etykietę czy komentarz). Po prostu postępuj zgodnie z instrukcjami robota. Wystarczy zrobić to raz dla wszystkich repozytoriów, w przypadku których jest używana nasza umowa CLA.
W tym projekcie przyjęto Kodeks postępowania oprogramowania Open Source firmy Microsoft. Aby uzyskać więcej informacji, zobacz Często zadawane pytania dotyczące kodeksu postępowania lub skontaktuj się z opencode@microsoft.com dodatkowymi pytaniami lub komentarzami.
Azure SDK for Python