Aracılığıyla paylaş


Python için Azure Metin Analizi istemci kitaplığı - sürüm 5.3.0

Dil için Azure Bilişsel Hizmet, metni anlamak ve çözümlemek için Doğal Dil İşleme (NLP) özellikleri sağlayan ve aşağıdaki ana özellikleri içeren bulut tabanlı bir hizmettir:

  • Yaklaşım Analizi
  • Adlandırılmış Varlık Tanıma
  • Dil Algılama
  • Anahtar İfade Ayıklama
  • Varlık Bağlama
  • Birden Çok Analiz
  • Kişisel Bilgiler (PII) Algılama
  • Sistem Durumu için Metin Analizi
  • Özel Adlandırılmış Varlık Tanıma
  • Özel Metin Sınıflandırması
  • Ayıklayıcı Metin Özetlemesi
  • Soyut Metin Özetlemesi

Kaynak kodu | Paket (PyPI) | Paket (Conda) | API başvuru belgeleri | Ürün belgeleri | Örnekleri

Başlarken

Önkoşullar

Bilişsel Hizmetler veya Dil hizmeti kaynağı oluşturma

Dil hizmeti hem çok hizmetli hem de tek hizmetli erişimi destekler. Tek bir uç nokta/anahtar altında birden çok bilişsel hizmete erişmeyi planlıyorsanız Bilişsel Hizmetler kaynağı oluşturun. Yalnızca Dil hizmeti erişimi için bir Dil hizmeti kaynağı oluşturun. Bu belgedeki adımları izleyerek Azure Portal veya Azure CLI kullanarak kaynağı oluşturabilirsiniz.

İstemci kitaplığını kullanan hizmetle etkileşim istemcisiyle başlar. İstemci nesnesi oluşturmak için, kaynağınızda Bilişsel Hizmetler veya Dil hizmetine endpoint ve aşağıdakilere erişmenize olanak tanıyan bir credential hizmete ihtiyacınız olacaktır:

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)

Bazı Bilişsel Hizmetler kaynakları için uç noktanın yukarıdaki kod parçacığından farklı görünebileceğini unutmayın. Örneğin, https://<region>.api.cognitive.microsoft.com/.

Paketi yükleme

Pip ile Python için Azure Metin Analizi istemci kitaplığını yükleyin:

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

ve daha yenisinin Dil API'leri için Azure Bilişsel Hizmet'i hedeflediğini 5.2.X unutmayın. Bu API'ler, Metin Analizi istemci kitaplığının önceki sürümlerinde bulunan metin analizi ve doğal dil işleme özelliklerini içerir. Buna ek olarak, hizmet API'sinin anlamsal sürüm oluşturmadan tarih tabanlı sürüm oluşturma işlemine geçti. İstemci kitaplığının bu sürümü varsayılan olarak şu anda olan desteklenen en son API sürümünü kullanır 2023-04-01.

Bu tabloda, SDK sürümleri ile hizmetin desteklenen API sürümleri arasındaki ilişki gösterilmektedir

SDK sürümü Hizmetin desteklenen API sürümü
5.3.X - En son kararlı sürüm 3.0, 3.1, 2022-05-01, 2023-04-01 (varsayılan)
5.2.X 3.0, 3.1, 2022-05-01 (varsayılan)
5.1.0 3.0, 3.1 (varsayılan)
5.0.0 3.0

API sürümü, api_version anahtar sözcük bağımsız değişkeni istemciye geçirilerek seçilebilir. En son Dil hizmeti özellikleri için en son beta API sürümünü seçmeyi göz önünde bulundurun. Üretim senaryoları için en son kararlı sürüm önerilir. Eski bir sürüme ayar yapmak özellik uyumluluğunu azaltabilir.

İstemcinin kimliğini doğrulama

Uç noktayı alma

Dil hizmeti kaynağınız için uç noktayı Azure Portal'ı veya Azure CLI'yı kullanarak bulabilirsiniz:

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

API Anahtarını Alma

API anahtarınıAzure Portal'daki Bilişsel Hizmetler veya Dil hizmeti kaynağından alabilirsiniz. Alternatif olarak, kaynağınızın API anahtarını almak için aşağıdaki Azure CLI parçacığını kullanabilirsiniz.

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

API Anahtarı Kimlik Bilgileri ile TextAnalyticsClient Oluşturma

API anahtarının değerine sahip olduktan sonra, bunu AzureKeyCredential örneğine dize olarak geçirebilirsiniz. İstemcinin kimliğini doğrulamak için kimlik bilgisi parametresi olarak anahtarını kullanın:

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

Azure Active Directory Kimlik Bilgileri ile TextAnalyticsClient Oluşturma

Azure Active Directory (AAD) belirteci kimlik bilgilerini kullanmak için azure-identity kitaplığından alınan istenen kimlik bilgisi türünün bir örneğini sağlayın. Bölgesel uç noktaların AAD kimlik doğrulamayı desteklemediğini unutmayın. Bu kimlik doğrulama türünü kullanmak için kaynağınız için özel bir alt etki alanı adı oluşturun.

AAD ile kimlik doğrulaması için bazı ilk kurulumlar gerekir:

Kurulumdan sonra azure.identity'den hangi kimlik bilgisi türünü kullanacağınızı seçebilirsiniz. Örneğin, istemcinin kimliğini doğrulamak için DefaultAzureCredential kullanılabilir:

AAD uygulamasının istemci kimliği, kiracı kimliği ve istemci gizli dizisi değerlerini ortam değişkenleri olarak ayarlayın: AZURE_CLIENT_ID, AZURE_TENANT_ID, AZURE_CLIENT_SECRET

İstemcinin kimliğini doğrulamak için döndürülen belirteç kimlik bilgilerini kullanın:

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)

Önemli kavramlar

TextAnalyticsClient

Metin Analizi istemci kitaplığı, belge toplu işlemleri üzerinde analiz yapmak için textAnalyticsClient sağlar. Dil algılama veya anahtar ifade ayıklama gibi belirli bir metin analizi kullanımına erişmek için hem zaman uyumlu hem de zaman uyumsuz işlemler sağlar.

Giriş

Belge, Dil hizmetindeki tahmine dayalı modeller tarafından analiz edilecek tek bir birimdir. Her işlemin girişi belge listesi olarak geçirilir.

Her belge listede bir dize olarak geçirilebilir, örneğin.

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

veya öğe başına bir belge id veya languagecountry_hint/geçirmek isterseniz, bunlar DetectLanguageInput veya TextDocumentInput listesi ya da nesnenin dikte benzeri bir gösterimi olarak geçirilebilir:

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

Belge uzunluğu sınırları, maksimum toplu iş boyutu ve desteklenen metin kodlaması dahil olmak üzere giriş için hizmet sınırlamalarına bakın.

Dönüş Değeri

Tek bir belgenin dönüş değeri sonuç veya hata nesnesi olabilir. Sonuç ve hata nesneleri koleksiyonunu içeren heterojen bir liste her işlemden döndürülür. Bu sonuçlar/hatalar dizinle sağlanan belgelerin sırasıyla eşleşmektedir.

AnalyzeSentimentResult gibi bir sonuç, metin çözümleme işleminin sonucudur ve belge girişiyle ilgili tahmin veya tahminler içerir.

DocumentErrorhata nesnesi, hizmetin belgeyi işlerken sorun yaşadığını ve başarısız olmasının nedenini içerdiğini gösterir.

Belge Hata İşleme

özniteliğini kullanarak is_error listedeki bir sonuç veya hata nesnesini filtreleyebilirsiniz. Bir sonuç nesnesi için bu her zaman False ve DocumentError için budur True.

Örneğin, tüm DocumentError'ları filtrelemek için liste kavramasını kullanabilirsiniz:

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

Sonuç türleri arasında filtreleme yapmak için özniteliğini kind de kullanabilirsiniz:

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 İşlemleri

Uzun süre çalışan işlemler, bir işlemi başlatmak için hizmete gönderilen ilk isteklerden oluşan ve ardından işlemin tamamlanıp tamamlanmadığını ve başarılı olup olmadığını belirlemek için hizmeti aralıklarla yoklayarak sonucu almak için gerçekleştirilen işlemlerdir.

Sağlık analizini, özel metin analizini veya birden çok analizi destekleyen yöntemler, uzun süre çalışan operasyonlar olarak modellenir. İstemci, bir begin_<method-name> poller nesnesi döndüren bir yöntemi kullanıma sunar. Çağıranların yönteminden döndürülen poller nesnesini çağırarak result() işlemin tamamlanmasını beklemesi begin_<method-name> gerekir. Örnek kod parçacıkları, aşağıda uzun süre çalışan işlemlerin kullanılmasını göstermek için

Örnekler

Aşağıdaki bölümde, en yaygın Dil hizmeti görevlerinden bazılarını kapsayan çeşitli kod parçacıkları sağlanır:

Yaklaşımı Analiz Etme

analyze_sentiment giriş metnine bakar ve yaklaşımının pozitif, negatif, nötr veya karma olup olmadığını belirler. Yanıt, cümle başına yaklaşım analizini ve güvenilirlik puanlarını içerir.

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

Döndürülen yanıt, sonuç ve hata nesnelerinin heterojen bir listesidir: list[AnalyzeSentimentResult, DocumentError]

Yaklaşım analizinin kavramsal bir tartışması için lütfen hizmet belgelerine bakın. Bir metindeki tek tek yönlerle (örneğin, bir ürünün veya hizmetin öznitelikleri) ilgili görüşler üzerinde daha ayrıntılı analiz yapmayı görmek için buraya bakın.

Varlıkları Tanıma

recognize_entities giriş metnindeki varlıkları kişiler, yerler, kuruluşlar, tarih/saat, miktarlar, yüzdeler, para birimleri ve daha fazlası olarak tanır ve kategoriler.

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

Döndürülen yanıt, sonuç ve hata nesnelerinin heterojen bir listesidir: list[RecognizeEntitiesResult, DocumentError]

Adlandırılmış varlık tanıma ve desteklenen türlerin kavramsal bir tartışması için lütfen hizmet belgelerine bakın.

Bağlantılı Varlıkları Tanıma

recognize_linked_entities , giriş metninde bulunan her varlığın kimliğini tanır ve ayırt eder (örneğin, Mars sözcüğünün bir oluşumunun gezegene mi yoksa Roma savaş tanrısına mı başvurduğuna karar verme). Tanınan varlıklar Wikipedia gibi tanınmış bir bilgi bankası URL'leriyle ilişkilendirilir.

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

Döndürülen yanıt, sonuç ve hata nesnelerinin heterojen bir listesidir: list[RecognizeLinkedEntitiesResult, DocumentError]

Varlık bağlama ve desteklenen türlerin kavramsal bir tartışması için lütfen hizmet belgelerine bakın.

PII Varlıklarını Tanıma

recognize_pii_entities , Giriş metnindeki Sosyal Güvenlik Numaraları, banka hesabı bilgileri, kredi kartı numaraları ve daha fazlası gibi Kişisel Bilgileri (PII) tanır ve kategorilere ayırır.

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

Döndürülen yanıt, sonuç ve hata nesnelerinin heterojen bir listesidir: list[RecognizePiiEntitiesResult, DocumentError]

Desteklenen PII varlık türleri için lütfen hizmet belgelerine bakın.

Not: PII Varlıklarını Tanıma hizmeti API sürümü v3.1 ve daha yeni sürümlerde kullanılabilir.

Anahtar İfadeleri Ayıklama

extract_key_phrases , giriş metnindeki ana konuşma noktalarını belirler. Örneğin, "Yemekler lezzetliydi ve harika personel vardı" giriş metni için API şunu döndürür: "yemek" ve "harika 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)
        ))

Döndürülen yanıt, sonuç ve hata nesnelerinin heterojen bir listesidir: list[ExtractKeyPhrasesResult, DocumentError]

Anahtar ifade ayıklamanın kavramsal bir tartışması için lütfen hizmet belgelerine bakın.

Dili Algıla

detect_language , tahmin edilen dilin güvenilirlik puanı dahil olmak üzere giriş metninin dilini belirler.

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

Döndürülen yanıt, sonuç ve hata nesnelerinin heterojen bir listesidir: list[DetectLanguageResult, DocumentError]

Dil algılama ve dil ile bölgesel desteğin kavramsal bir tartışması için lütfen hizmet belgelerine bakın.

Healthcare Varlık Analizi

Uzun süre çalışan işlembegin_analyze_healthcare_entities sağlık alanı içinde tanınan varlıkları ayıklar ve giriş belgesindeki varlıklar arasındaki ilişkileri ve UMLS, CHV, MSH gibi çeşitli iyi bilinen veritabanlarındaki bilinen bilgi kaynaklarına bağlantılar tanımlar.

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
]

Not: Healthcare Varlıkları Analizi yalnızca API sürümü v3.1 ve daha yeni sürümlerde kullanılabilir.

Birden Çok Analiz

Uzun süre çalışan işlembegin_analyze_actions tek bir istekteki bir belge kümesi üzerinde birden çok analiz gerçekleştirir. Şu anda tek bir istekte aşağıdaki Dil API'lerinin herhangi bir bileşimi kullanılarak desteklenmektedir:

  • Varlık Tanıma
  • PII Varlıkları Tanıma
  • Bağlı Varlık Tanıma
  • Anahtar İfade Ayıklama
  • Yaklaşım Analizi
  • Özel Varlık Tanıma (API sürüm 2022-05-01 ve daha yeni)
  • Özel Tek EtiketLi Sınıflandırma (API sürüm 2022-05-01 ve daha yeni)
  • Özel Çoklu Etiket Sınıflandırması (API sürüm 2022-05-01 ve daha yeni)
  • Healthcare Varlıkları Analizi (API sürüm 2022-05-01 ve daha yeni)
  • Ayıklayıcı Özetleme (API sürüm 2023-04-01 ve daha yeni)
  • Soyut Özetleme (API sürüm 2023-04-01 ve daha yeni)
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("------------------------------------------")

Döndürülen yanıt, her biri ayrı ayrı çözümlemelerin sonuçlarını temsil eden birden çok yinelenebilir öğeyi kapsülleyen bir nesnedir.

Not: API sürümü v3.1 ve daha yeni sürümlerde birden çok analiz kullanılabilir.

İsteğe Bağlı Yapılandırma

İsteğe bağlı anahtar sözcük bağımsız değişkenleri istemci ve işlem başına düzeyinde geçirilebilir. Azure-core başvuru belgelerinde yeniden denemeler, günlüğe kaydetme, aktarım protokolleri ve daha fazlası için kullanılabilir yapılandırmalar açıklanmaktadır.

Sorun giderme

Genel

Metin Analizi istemcisi, Azure Core'da tanımlanan özel durumları tetikler.

Günlüğe Kaydetme

Bu kitaplık , günlüğe kaydetme için standart günlük kitaplığını kullanır. HTTP oturumları (URL'ler, üst bilgiler vb.) hakkındaki temel bilgiler BİlGİ düzeyinde günlüğe kaydedilir.

İstek/yanıt gövdeleri ve engellenmemiş üst bilgiler de dahil olmak üzere ayrıntılı HATA AYıKLAMA düzeyi günlüğü, anahtar sözcük bağımsız değişkeniyle logging_enable bir istemcide etkinleştirilebilir:

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."])

Benzer şekilde, logging_enable istemci için etkinleştirilmemiş olsa bile tek bir işlem için ayrıntılı günlüğe kaydetmeyi etkinleştirebilir:

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

Sonraki adımlar

Daha fazla örnek kod

Bu kod örnekleri, Azure Metin Analizi istemci kitaplığıyla yaygın senaryo işlemlerini gösterir.

Azure-identity'den bilişsel hizmetler/dil hizmeti API anahtarı veya belirteç kimlik bilgileriyle istemcinin kimliğini doğrulama:

Genel senaryolar

Gelişmiş senaryolar

Diğer belgeler

Dil için Azure Bilişsel Hizmet hakkında daha kapsamlı belgeler için docs.microsoft.com dil hizmeti belgelerine bakın.

Katkıda bulunma

Bu proje, katkı ve önerilere açıktır. Çoğu durumda, sağladığınız katkıyı kullanmamız için bize hak tanıma hakkına sahip olduğunuzu ve bu hakkı bize tanıdığınızı bildiren bir Katkıda Bulunan Lisans Sözleşmesi’ni (CLA) kabul etmeniz gerekir. Ayrıntılar için cla.microsoft.com adresini ziyaret edin.

Bir çekme isteği gönderdiğinizde, CLA robotu bir CLA sağlamanız gerekip gerekmediğini otomatik olarak belirler ve çekme isteğini uygun şekilde donatır (örn. etiket, açıklama). Robot tarafından sağlanan yönergeleri izlemeniz yeterlidir. Bu işlemi, CLA’mızı kullanarak tüm depolarda yalnızca bir kere yapmanız gerekir.

Bu proje Microsoft Open Source Code of Conduct (Microsoft Açık Kaynak Kullanım Kuralları) belgesinde listelenen kurallara uygundur. Daha fazla bilgi için Kullanım Kuralları SSS bölümüne bakın veya ek sorularınız veya yorumlarınızla iletişime geçin opencode@microsoft.com .