Поделиться через


Клиентская библиотека Azure Анализ текста для Python — версия 5.3.0

Azure Cognitive Service для языка — это облачная служба, которая предоставляет функции обработки естественного языка (NLP) для понимания и анализа текста и включает в себя следующие main функции:

  • Анализ тональности
  • Распознавание именованных сущностей
  • Распознавание языка
  • Извлечение ключевых фраз
  • Связывание сущностей
  • Множественный анализ
  • Обнаружение личных сведений
  • Анализ текста для сферы здравоохранения
  • Настраиваемый компонент Распознавания именованных сущностей
  • Настраиваемая классификация текста
  • Обобщение извлекаемого текста
  • Обобщение абстрактного текста

Исходный код | Пакет (PyPI) | Пакет (Conda) | Справочная документация по | APIДокументация по продукту | Образцы

Начало работы

Предварительные требования

Создание ресурса Cognitive Services или языковой службы

Языковая служба поддерживает доступ как с несколькими службами, так и с одной службой. Создайте ресурс Cognitive Services, если планируете осуществлять доступ к нескольким службам с помощью одной конечной точки или ключа. Для доступа только к языковой службе создайте ресурс языковой службы. Вы можете создать ресурс с помощью портала Azure или Azure CLI , выполнив действия, описанные в этом документе.

Взаимодействие со службой с помощью клиентской библиотеки начинается с клиента . Чтобы создать клиентский объект, вам потребуется Служба Cognitive Services или Языковая служба для ресурса, а также служба endpoint , credential которая позволяет получить доступ:

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)

Обратите внимание, что для некоторых ресурсов Cognitive Services конечная точка может отличаться от приведенного выше фрагмента кода. Например, https://<region>.api.cognitive.microsoft.com/.

Установка пакета

Установите клиентную библиотеку Azure Анализ текста для Python с помощью 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))

Обратите внимание, что 5.2.X и более новые предназначены для API-интерфейсов Языка Azure Cognitive Service. Эти API включают функции анализа текста и обработки естественного языка в предыдущих версиях клиентской библиотеки Анализ текста. Кроме того, API службы изменился с семантического на управление версиями на основе даты. Эта версия клиентской библиотеки по умолчанию использует последнюю поддерживаемую версию API, которая в настоящее время является 2023-04-01.

В этой таблице показана связь между версиями пакета SDK и поддерживаемыми версиями API службы.

Версия пакета SDK Поддерживаемая версия API службы
5.3.X — последний стабильный выпуск 3.0, 3.1, 2022-05-01, 2023-04-01 (по умолчанию)
5.2.X 3.0, 3.1, 2022-05-01 (по умолчанию)
5.1.0 3.0, 3.1 (по умолчанию)
5.0.0 3.0

Версию API можно выбрать путем передачи api_version аргумента ключевое слово клиенту. Для новейших функций языковой службы рекомендуется выбрать самую последнюю бета-версию API. Для рабочих сценариев рекомендуется использовать последнюю стабильную версию. Установка более старой версии может привести к снижению совместимости функций.

Аутентификация клиента

Получение конечной точки

Вы можете найти конечную точку для ресурса языковой службы с помощью портала Azure или 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"

Получение ключа API

Ключ API можно получить из ресурса Cognitive Services или языковой службы на портале Azure. Кроме того, вы можете использовать приведенный ниже фрагмент Azure CLI , чтобы получить ключ API ресурса.

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

Создание textAnalyticsClient с учетными данными ключа API

Получив значение ключа API, его можно передать в виде строки в экземпляр AzureKeyCredential. Используйте ключ в качестве параметра учетных данных для проверки подлинности клиента:

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

Создание textAnalyticsClient с учетными данными Azure Active Directory

Чтобы использовать учетные данные маркера Azure Active Directory (AAD), укажите экземпляр нужного типа учетных данных, полученных из библиотеки azure-identity . Обратите внимание, что региональные конечные точки не поддерживают проверку подлинности AAD. Создайте пользовательское имя поддомена для ресурса, чтобы использовать этот тип проверки подлинности.

Для проверки подлинности с помощью AAD требуется некоторая начальная настройка:

После настройки можно выбрать тип учетных данных из azure.identity для использования. Например, для проверки подлинности клиента можно использовать DefaultAzureCredential :

Задайте значения идентификатора клиента, идентификатора клиента и секрета клиента приложения AAD в качестве переменных среды: AZURE_CLIENT_ID, AZURE_TENANT_ID AZURE_CLIENT_SECRET

Используйте возвращенные учетные данные маркера для проверки подлинности клиента:

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)

Основные понятия

TextAnalyticsClient

Клиентская библиотека Анализ текста предоставляет textAnalyticsClient для анализа пакетов документов. Он предоставляет синхронные и асинхронные операции для доступа к определенному использованию анализа текста, например распознаванию языка или извлечению ключевых фраз.

Входные данные

Документ — это единая единица, которую необходимо проанализировать с помощью прогнозных моделей в языковой службе. Входные данные для каждой операции передаются в виде списка документов.

Каждый документ можно передать в виде строки в списке, например.

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

или, если вы хотите передать документ id для каждого элемента или languagecountry_hint/, их можно передать в виде списка DetectLanguageInput или TextDocumentInput или в виде диктовки представления объекта:

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

Ознакомьтесь с ограничениями службы для входных данных, включая ограничения на длину документа, максимальный размер пакета и поддерживаемую кодировку текста.

Возвращаемое значение

Возвращаемое значение для одного документа может быть результатом или объектом ошибки. Из каждой операции возвращается разнородный список, содержащий коллекцию объектов result и error. Эти результаты и ошибки сопоставляются с порядком предоставленных документов.

Результат, такой как AnalyzeSentimentResult, является результатом операции анализа текста и содержит прогноз или прогнозы о входных данных документа.

Объект ошибкиDocumentError указывает, что у службы возникли проблемы с обработкой документа, и содержит причину сбоя.

Обработка ошибок документа

Вы можете отфильтровать результат или объект ошибки в списке с помощью атрибута is_error . Для результирующих объектов это всегда False , а для DocumentErrorTrue.

Например, чтобы отфильтровать все элементы DocumentErrors, можно использовать понимание списка:

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

Атрибут также можно использовать для kind фильтрации между типами результатов:

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

Длительные операции — это операции, которые состоят из первоначального запроса, отправленного службе для запуска операции, за которым следует опрос службы с интервалами, чтобы определить, была ли операция завершена или завершилась сбоем, и если она была успешной, для получения результата.

Методы, поддерживающие медицинский анализ, анализ пользовательского текста или несколько анализов, смоделированы как длительные операции. Клиент предоставляет begin_<method-name> метод, возвращающий объект опроса. Вызывающие объекты должны дождаться завершения операции, вызвав result() объект опроса, возвращенный из begin_<method-name> метода . Примеры фрагментов кода приведены для демонстрации с помощью длительных операций ниже.

Примеры

В следующем разделе представлено несколько фрагментов кода, охватывающих некоторые из наиболее распространенных задач языковой службы, в том числе:

Анализ тональности

analyze_sentiment просматривает входной текст и определяет, является ли его тональность положительной, отрицательной, нейтральной или смешанной. Ответ включает анализ тональности каждого предложения и оценки достоверности.

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

Возвращенный ответ представляет собой разнородный список объектов результатов и ошибок: list[AnalyzeSentimentResult, DocumentError]

Концептуальное обсуждение анализа тональности см. в документации по службам. Чтобы узнать, как проводить более детализированный анализ мнений, связанных с отдельными аспектами (например, атрибутами продукта или услуги), в тексте, см. здесь.

Распознавание сущностей

recognize_entities распознает и категоризирует сущности во входном тексте как людей, места, организации, дату и время, количества, проценты, валюты и многое другое.

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

Возвращенный ответ представляет собой разнородный список объектов результатов и ошибок: list[RecognizeEntitiesResult, DocumentError]

Концептуальное обсуждение распознавания именованных сущностей и поддерживаемых типов см. в документации по службам.

Распознавание связанных сущностей

recognize_linked_entities распознает и неоднозначно определяет личность каждой сущности, найденной во входном тексте (например, определяет, относится ли слово Марс к планете или к римскому богу войны). Распознаваемые сущности связаны с URL-адресами известного база знаний, например Википедии.

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

Возвращенный ответ представляет собой разнородный список объектов результатов и ошибок: list[RecognizeLinkedEntitiesResult, DocumentError]

Обратитесь к документации по службе, чтобы ознакомиться с концептуальной дискуссией о связывании сущностей и поддерживаемых типах.

Распознавание сущностей личных сведений

recognize_pii_entities распознает и классифицирует сущности личных сведений (PII) во входном тексте, например номера социального страхования, сведения о банковском счете, кредитные карта номера и многое другое.

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

Возвращенный ответ представляет собой разнородный список объектов результатов и ошибок: list[RecognizePiiEntitiesResult, DocumentError]

Сведения о поддерживаемых типах сущностей личных сведений см. в документации по службе.

Примечание. Служба распознавания сущностей личных сведений доступна в API версии 3.1 и более поздних.

Извлечение ключевых фраз

extract_key_phrases определяет main тезисов во входном тексте. Например, для входного текста "Еда была вкусной и были замечательные сотрудники", API возвращает: "еда" и "замечательный персонал".

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

Возвращенный ответ представляет собой разнородный список объектов результатов и ошибок: list[ExtractKeyPhrasesResult, DocumentError]

Концептуальное обсуждение извлечения ключевых фраз см. в документации по службам.

Определение языка

detect_language определяет язык входного текста, включая оценку достоверности прогнозируемого языка.

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

Возвращенный ответ представляет собой разнородный список объектов результатов и ошибок: list[DetectLanguageResult, DocumentError]

Обратитесь к документации по службам, чтобы ознакомиться с концептуальной дискуссией об обнаружении языка и поддержке языка и региона.

Анализ сущностей здравоохранения

Длительная операцияbegin_analyze_healthcare_entities извлекает сущности, распознанные в области здравоохранения, и определяет связи между сущностями во входном документе и ссылки на известные источники информации в различных хорошо известных базах данных, таких как UMLS, CHV, MSH и т. д.

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
]

Примечание. Анализ сущностей здравоохранения доступен только с API версии 3.1 и более поздних версий.

Множественный анализ

Долго выполняющаяся операцияbegin_analyze_actions выполняет несколько анализов по одному набору документов в одном запросе. В настоящее время поддерживается использование любого сочетания следующих API языка в одном запросе:

  • Распознавание сущностей
  • Распознавание сущностей личных сведений
  • Распознавание связанных сущностей
  • Извлечение ключевых фраз
  • Анализ тональности
  • Пользовательское распознавание сущностей (API версии 2022-05-01 и более поздних версий)
  • Настраиваемая классификация одной метки (API версии 2022-05-01 и более поздние версии)
  • Пользовательская классификация нескольких меток (API версии 2022-05-01 и более поздние версии)
  • Анализ сущностей здравоохранения (API версии 2022-05-01 и более поздних версий)
  • Извлечение сводных данных (API версии 2023-04-01 и более поздних версий)
  • Абстрактное обобщение (API версии 2023-04-01 и более поздние версии)
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("------------------------------------------")

Возвращаемый ответ — это объект, инкапсулирующий несколько итерируемых объектов, каждый из которых представляет результаты отдельного анализа.

Примечание. В API версии 3.1 и более поздних доступны несколько анализов.

Дополнительная настройка

Необязательные аргументы ключевое слово можно передать на уровне клиента и для каждой операции. В справочной документации azure-Core описаны доступные конфигурации для повторных попыток, ведения журнала, транспортных протоколов и многого другого.

Устранение неполадок

Общие сведения

Клиент Анализ текста вызовет исключения, определенные в Azure Core.

Ведение журнала

Эта библиотека использует стандартную библиотеку ведения журнала для ведения журнала. Основные сведения о сеансах HTTP (URL-адреса, заголовки и т. д.) регистрируются на уровне INFO.

С помощью аргумента-ключевого слова logging_enable можно включить в клиенте ведение журнала на уровне отладки (DEBUG), на котором фиксируются сведения о телах запросов и ответов, а также заголовки без изменений:

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 можно включить подробное журналирование для отдельной операции (даже если этот режим не включен в клиенте):

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

Дальнейшие действия

Больше примеров кода

В этих примерах кода показаны распространенные операции сценария с клиентской библиотекой azure Анализ текста.

Выполните проверку подлинности клиента с помощью ключа API Cognitive Services или языковой службы или учетных данных маркера из azure-identity:

Распространенные сценарии

Расширенные сценарии

Дополнительная документация

Более подробную документацию по Azure Cognitive Service для языковой службы см. в документации языковой службы по docs.microsoft.com.

Участие

На этом проекте приветствуются публикации и предложения. Для участия в большинстве процессов по разработке документации необходимо принять лицензионное соглашение участника (CLA), в котором указывается, что вы предоставляете нам права на использование ваших публикаций. Дополнительные сведения см . на странице cla.microsoft.com.

При отправке запроса на включение внесенных изменений CLA-бот автоматически определит необходимость предоставления соглашения CLA и соответствующего оформления запроса на включение внесенных изменений (например, добавление метки, комментария). Просто следуйте инструкциям бота. Будет достаточно выполнить их один раз для всех репозиториев, поддерживающих соглашение CLA.

В рамках этого проекта действуют правила поведения в отношении продуктов с открытым исходным кодом Майкрософт. Дополнительные сведения см. в разделе часто задаваемых вопросов о правилах поведения или обратитесь к opencode@microsoft.com с любыми дополнительными вопросами или комментариями.