Bagikan melalui


Pustaka klien Azure Text Analytics untuk Python - versi 5.3.0

Azure Cognitive Service for Language adalah layanan berbasis cloud yang menyediakan fitur Natural Language Processing (NLP) untuk memahami dan menganalisis teks, dan menyertakan fitur utama berikut:

  • Analisis Sentimen
  • Pengenalan Entitas
  • Deteksi Bahasa
  • Ekstraksi Frasa Kunci
  • Penautan Entitas
  • Analisis Ganda
  • Deteksi Informasi Pengidentifikasi Pribadi (PII)
  • Analitik Teks untuk kesehatan
  • Pengenalan Entitas Bernama Kustom
  • Klasifikasi Teks Kustom
  • Ringkasan Teks Ekstraktif
  • Ringkasan Teks Abstraktif

Kode sumber | Paket (PyPI) | Paket (Conda) | Dokumentasi | referensi APIDokumentasi | produkSampel

Memulai

Prasyarat

Membuat sumber daya layanan Cognitive Services atau Bahasa

Layanan Bahasa mendukung akses multi-layanan dan layanan tunggal. Buat sumber daya Cognitive Services jika Anda berencana untuk mengakses beberapa layanan kognitif di bawah satu titik akhir/kunci. Hanya untuk akses layanan Bahasa, buat sumber daya layanan Bahasa. Anda dapat membuat sumber daya menggunakan Portal Microsoft Azure atau Azure CLI dengan mengikuti langkah-langkah dalam dokumen ini.

Interaksi dengan layanan menggunakan pustaka klien dimulai dengan klien . Untuk membuat objek klien, Anda memerlukan layanan endpoint Cognitive Services atau Bahasa ke sumber daya Anda dan credential yang memungkinkan Anda mengakses:

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)

Perhatikan bahwa untuk beberapa sumber daya Cognitive Services, titik akhir mungkin terlihat berbeda dari cuplikan kode di atas. Contohnya,https://<region>.api.cognitive.microsoft.com/.

Instal paketnya

Instal pustaka klien Azure Text Analytics untuk Python dengan 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))

Perhatikan bahwa 5.2.X dan yang lebih baru menargetkan Azure Cognitive Service untuk LANGUAGE API. API ini mencakup analisis teks dan fitur pemrosesan bahasa alami yang ditemukan di versi sebelumnya dari pustaka klien Text Analytics. Selain itu, API layanan telah berubah dari semantik menjadi penerapan versi berbasis tanggal. Versi pustaka klien ini default ke versi API terbaru yang didukung, yang saat ini adalah 2023-04-01.

Tabel ini memperlihatkan hubungan antara versi SDK dan versi API layanan yang didukung

Versi SDK Versi API layanan yang didukung
5.3.X - Rilis stabil terbaru 3.0, 3.1, 2022-05-01, 2023-04-01 (default)
5.2.X 3.0, 3.1, 2022-05-01 (default)
5.1.0 3.0, 3.1 (default)
5.0.0 3.0

Versi API dapat dipilih dengan meneruskan argumen kata kunci api_version ke klien. Untuk fitur layanan Bahasa terbaru, pertimbangkan untuk memilih versi API beta terbaru. Untuk skenario produksi, versi stabil terbaru disarankan. Pengaturan ke versi yang lebih lama dapat mengakibatkan kompatibilitas fitur yang berkurang.

Mengautentikasi klien

Mendapatkan titik akhir

Anda dapat menemukan titik akhir untuk sumber daya layanan Bahasa Anda menggunakan Portal Microsoft Azure atau 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"

Dapatkan Kunci API

Anda bisa mendapatkan kunci API dari sumber daya layanan Cognitive Services atau Bahasa di Portal Microsoft Azure. Atau, Anda dapat menggunakan cuplikan Azure CLI di bawah ini untuk mendapatkan kunci API sumber daya Anda.

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

Membuat TextAnalyticsClient dengan Kredensial Kunci API

Setelah Anda memiliki nilai untuk kunci API, Anda dapat meneruskannya sebagai string ke dalam instans AzureKeyCredential. Gunakan kunci sebagai parameter kredensial untuk mengautentikasi klien:

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

Membuat TextAnalyticsClient dengan Kredensial Azure Active Directory

Untuk menggunakan kredensial token Azure Active Directory (AAD), berikan instans jenis kredensial yang diinginkan yang diperoleh dari pustaka identitas azure . Perhatikan bahwa titik akhir regional tidak mendukung autentikasi AAD. Buat nama subdomain kustom untuk sumber daya Anda untuk menggunakan jenis autentikasi ini.

Autentikasi dengan AAD memerlukan beberapa penyiapan awal:

Setelah penyiapan, Anda dapat memilih jenis kredensial mana dari azure.identity yang akan digunakan. Sebagai contoh, DefaultAzureCredential dapat digunakan untuk mengautentikasi klien:

Atur nilai ID klien, ID penyewa, dan rahasia klien aplikasi AAD sebagai variabel lingkungan: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET

Gunakan kredensial token yang dikembalikan untuk mengautentikasi klien:

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)

Konsep utama

TextAnalyticsClient

Pustaka klien Text Analytics menyediakan TextAnalyticsClient untuk melakukan analisis pada batch dokumen. Ini menyediakan operasi sinkron dan asinkron untuk mengakses penggunaan analisis teks tertentu, seperti deteksi bahasa atau ekstraksi frasa kunci.

Input

Dokumen adalah satu unit yang akan dianalisis oleh model prediktif dalam layanan Bahasa. Input untuk setiap operasi diteruskan sebagai daftar dokumen.

Setiap dokumen dapat diteruskan sebagai string dalam daftar, misalnya

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

atau, jika Anda ingin meneruskan dokumen id per item atau languagecountry_hint/, mereka dapat diteruskan sebagai daftar DetectLanguageInput atau TextDocumentInput atau representasi objek seperti dikte:

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

Lihat batasan layanan untuk input, termasuk batas panjang dokumen, ukuran batch maksimum, dan pengodean teks yang didukung.

Tampilkan Nilai

Nilai yang dikembalikan untuk satu dokumen bisa menjadi objek hasil atau kesalahan. Daftar heterogen yang berisi kumpulan objek hasil dan kesalahan dikembalikan dari setiap operasi. Hasil/kesalahan ini dicocokkan dengan urutan dokumen yang disediakan.

Hasilnya, seperti AnalyzeSentimentResult, adalah hasil dari operasi analisis teks dan berisi prediksi atau prediksi tentang input dokumen.

Objek kesalahan , DocumentError, menunjukkan bahwa layanan mengalami masalah saat memproses dokumen dan berisi alasan tidak berhasil.

Penanganan Kesalahan Dokumen

Anda dapat memfilter objek hasil atau kesalahan dalam daftar dengan menggunakan is_error atribut . Untuk objek hasil ini selalu False dan untuk DocumentError ini adalah True.

Misalnya, untuk memfilter semua DocumentErrors, Anda mungkin menggunakan pemahaman daftar:

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

Anda juga dapat menggunakan kind atribut untuk memfilter antara jenis hasil:

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

Operasi Long-Running

Operasi jangka panjang adalah operasi yang terdiri dari permintaan awal yang dikirim ke layanan untuk memulai operasi, diikuti dengan polling layanan pada interval untuk menentukan apakah operasi telah selesai atau gagal, dan jika telah berhasil, untuk mendapatkan hasilnya.

Metode yang mendukung analisis layanan kesehatan, analisis teks kustom, atau beberapa analisis dimodelkan sebagai operasi yang berjalan lama. Klien mengekspos begin_<method-name> metode yang mengembalikan objek poller. Penelepon harus menunggu operasi selesai dengan memanggil result() objek poller yang dikembalikan dari begin_<method-name> metode . Cuplikan kode sampel disediakan untuk mengilustrasikan menggunakan Contoh operasi yang berjalan lama di bawah ini.

Contoh

Bagian berikut ini menyediakan beberapa cuplikan kode yang mencakup beberapa tugas layanan Bahasa yang paling umum, termasuk:

Menganalisis Sentimen

analyze_sentiment melihat teks inputnya dan menentukan apakah sentimennya positif, negatif, netral, atau campuran. Responsnya termasuk analisis sentimen per kalimat dan skor keyakinan.

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

Respons yang dikembalikan adalah daftar heterogen objek hasil dan kesalahan: list[AnalyzeSentimentResult, DocumentError]

Silakan lihat dokumentasi layanan untuk diskusi konseptual analisis sentimen. Untuk melihat cara melakukan analisis yang lebih terperinci ke dalam opini yang terkait dengan aspek individu (seperti atribut produk atau layanan) dalam teks, lihat di sini.

Mengenali Entitas

recognize_entities mengenali dan mengategorikan entitas dalam teks inputnya sebagai orang, tempat, organisasi, tanggal/waktu, jumlah, persentase, mata uang, dan banyak lagi.

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

Respons yang dikembalikan adalah daftar heterogen objek hasil dan kesalahan: list[RecognizeEntitiesResult, DocumentError]

Silakan lihat dokumentasi layanan untuk diskusi konseptual pengenalan entitas bernama dan jenis yang didukung.

Mengenali Entitas Tertaut

recognize_linked_entities mengenali dan membedakan identitas setiap entitas yang ditemukan dalam teks inputnya (misalnya, menentukan apakah terjadinya kata Mars mengacu pada planet, atau dewa perang Romawi). Entitas yang dikenali dikaitkan dengan URL ke Pangkalan Pengetahuan terkenal, seperti 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

Respons yang dikembalikan adalah daftar heterogen objek hasil dan kesalahan: list[RecognizeLinkedEntitiesResult, DocumentError]

Silakan lihat dokumentasi layanan untuk diskusi konseptual tentang penautan entitas dan jenis yang didukung.

Mengenali Entitas PII

recognize_pii_entities mengenali dan mengategorikan entitas Informasi Pengidentifikasi Pribadi (PII) dalam teks inputnya, seperti Nomor Jaminan Sosial, informasi rekening bank, nomor kartu kredit, dan banyak lagi.

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

Respons yang dikembalikan adalah daftar heterogen objek hasil dan kesalahan: list[RecognizePiiEntitiesResult, DocumentError]

Silakan lihat dokumentasi layanan untuk jenis entitas PII yang didukung.

Catatan: Layanan Kenali Entitas PII tersedia di API versi v3.1 dan yang lebih baru.

Ekstrak Frasa Kunci

extract_key_phrases menentukan titik pembicaraan utama dalam teks inputnya. Misalnya, untuk teks input "Makanannya lezat dan ada staf yang luar biasa", API mengembalikan: "makanan" dan "staf yang luar biasa".

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

Respons yang dikembalikan adalah daftar heterogen objek hasil dan kesalahan: list[ExtractKeyPhrasesResult, DocumentError]

Silakan lihat dokumentasi layanan untuk diskusi konseptual ekstraksi frasa kunci.

Mendeteksi Bahasa

detect_language menentukan bahasa teks inputnya, termasuk skor keyakinan bahasa yang diprediksi.

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

Respons yang dikembalikan adalah daftar heterogen objek hasil dan kesalahan: list[DetectLanguageResult, DocumentError]

Silakan merujuk ke dokumentasi layanan untuk diskusi konseptual deteksi bahasa dan dukungan bahasa dan wilayah.

Analisis Entitas Layanan Kesehatan

Operasi jangka panjangbegin_analyze_healthcare_entities mengekstrak entitas yang diakui dalam domain layanan kesehatan, dan mengidentifikasi hubungan antara entitas dalam dokumen input dan tautan ke sumber informasi yang diketahui dalam berbagai database terkenal, seperti UMLS, CHV, MSH, dll.

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
]

Catatan: Analisis Entitas Layanan Kesehatan hanya tersedia dengan API versi v3.1 dan yang lebih baru.

Analisis Ganda

Operasi jangka panjangbegin_analyze_actions melakukan beberapa analisis atas satu set dokumen dalam satu permintaan. Saat ini didukung menggunakan kombinasi API Bahasa berikut dalam satu permintaan:

  • Pengenalan Entitas
  • Pengenalan Entitas PII
  • Pengenalan Entitas Tertaut
  • Ekstraksi Frasa Kunci
  • Analisis Sentimen
  • Pengenalan Entitas Kustom (API versi 2022-05-01 dan yang lebih baru)
  • Klasifikasi Label Tunggal Kustom (API versi 2022-05-01 dan yang lebih baru)
  • Klasifikasi Multi Label Kustom (API versi 2022-05-01 dan yang lebih baru)
  • Analisis Entitas Layanan Kesehatan (API versi 2022-05-01 dan yang lebih baru)
  • Ringkasan Ekstraktif (API versi 2023-04-01 dan yang lebih baru)
  • Ringkasan Abstraktif (API versi 2023-04-01 dan yang lebih baru)
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("------------------------------------------")

Respons yang dikembalikan adalah objek yang merangkum beberapa iterable, masing-masing mewakili hasil analisis individu.

Catatan: Beberapa analisis tersedia dalam API versi v3.1 dan yang lebih baru.

Konfigurasi Opsional

Argumen kata kunci opsional dapat diteruskan di tingkat klien dan per operasi. Dokumentasi referensi azure-core menjelaskan konfigurasi yang tersedia untuk percobaan ulang, pengelogan, protokol transportasi, dan banyak lagi.

Pemecahan Masalah

Umum

Klien Text Analytics akan memunculkan pengecualian yang ditentukan di Azure Core.

Pembuatan Log

Pustaka ini menggunakan pustaka pengelogan standar untuk pengelogan. Informasi dasar tentang sesi HTTP (URL, header, dll.) dicatat di tingkat INFO.

Pengelogan tingkat DEBUG mendetail, termasuk isi permintaan/respons dan header yang tidak diedit, dapat diaktifkan pada klien dengan argumen kata kunci 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."])

Demikian pula, logging_enable dapat mengaktifkan pengelogan mendetail untuk satu operasi, meskipun tidak diaktifkan untuk klien:

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

Langkah berikutnya

Lebih banyak kode sampel

Sampel kode ini menunjukkan operasi skenario umum dengan pustaka klien Azure Text Analytics.

Autentikasi klien dengan kunci API layanan Cognitive Services/Language atau kredensial token dari azure-identity:

Skenario umum

Skenario tingkat lanjut

Dokumentasi tambahan

Untuk dokumentasi yang lebih luas tentang Azure Cognitive Service for Language, lihat dokumentasi Layanan Bahasa tentang docs.microsoft.com.

Berkontribusi

Proyek ini menyambut baik kontribusi dan saran. Sebagian besar kontribusi mengharuskan Anda menyetujui Perjanjian Lisensi Kontributor (CLA) yang menyatakan bahwa Anda memiliki hak untuk, dan benar-benar melakukannya, memberi kami hak untuk menggunakan kontribusi Anda. Untuk detailnya, kunjungi cla.microsoft.com.

Ketika Anda mengirimkan permintaan tarik, CLA-bot akan secara otomatis menentukan apakah Anda perlu memberikan CLA dan menghias PR dengan tepat (misalnya, label, komentar). Cukup ikuti instruksi yang diberikan oleh bot. Anda hanya perlu melakukan ini sekali di semua repos menggunakan CLA kami.

Proyek ini telah mengadopsi Kode Etik Sumber Terbuka Microsoft. Untuk informasi selengkapnya, lihat Tanya Jawab Umum Tata Tertib atau hubungi opencode@microsoft.com untuk pertanyaan atau komentar lainnya.