Python 用 Azure Text Analytics クライアント ライブラリ - バージョン 5.3.0
Azure Cognitive Service for Language は、テキストを理解および分析するための自然言語処理 (NLP) 機能を提供するクラウドベースのサービスであり、次のメイン機能が含まれています。
- 感情分析
- 名前付きエンティティの認識
- 言語検出
- キー フレーズ抽出
- Entity Linking
- 複数の分析
- 個人を特定できる情報 (PII) の検出
- Text Analytics for Health
- カスタム固有表現認識
- カスタム テキスト分類
- 抽出テキストの要約
- 抽象テキストの要約
ソースコード | パッケージ (PyPI) | パッケージ (Conda) | API リファレンス ドキュメント | 製品ドキュメント | サンプル
作業の開始
前提条件
- このパッケージを使用するには、Python 3.7 以降が必要です。
- このパッケージを使用するには、 Azure サブスクリプション と Cognitive Services または言語サービス リソース が必要です。
Cognitive Services または言語サービス リソースを作成する
言語サービスでは、 マルチサービスアクセスとシングルサービスアクセスの両方がサポートされています。 1 つのエンドポイント/キーで複数の Cognitive Services にアクセスする予定の場合は、Cognitive Services リソースを作成します。 言語サービスへのアクセスのみの場合は、言語サービス リソースを作成します。 このドキュメントの手順に従って、Azure Portal または 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/
のようにします。
パッケージをインストールする
pip を使用して Python 用 Azure Text Analytics クライアント ライブラリをインストールします。
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))
以降では、Azure Cognitive Service for Language API が対象であることに
5.2.X
注意してください。 これらの API には、Text Analytics クライアント ライブラリの以前のバージョンで見つかったテキスト分析と自然言語処理機能が含まれます。 さらに、サービス 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 キーワード (keyword) 引数をクライアントに渡すことによって選択できます。 最新の言語サービス機能については、最新のベータ版 API バージョンを選択することを検討してください。 運用環境のシナリオでは、最新の安定バージョンをお勧めします。 古いバージョンに設定すると、機能の互換性が低下する可能性があります。
クライアントを認証する
エンドポイントを取得する
言語サービス リソースのエンドポイントは、 Azure Portal または 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 キーは、Azure Portal の Cognitive Services または言語サービス リソースから取得できます。 または、次の Azure CLI スニペットを使用して、リソースの API キーを取得することもできます。
az cognitiveservices account keys list --name "resource-name" --resource-group "resource-group-name"
API キー資格情報を使用して TextAnalyticsClient を作成する
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))
Azure Active Directory 資格情報を使用して TextAnalyticsClient を作成する
Azure Active Directory (AAD) トークン資格情報を使用するには、azure-identity ライブラリから取得した目的の資格情報の種類のインスタンスを指定します。 リージョン エンドポイントでは AAD 認証がサポートされないことに注意してください。 この種類の認証を使用するために、リソースの カスタム サブドメイン 名を作成します。
AAD を使用した認証には、いくつかの初期セットアップが必要です。
- azure-identity をインストールする
- 新しい AAD アプリケーションを登録する
- サービス プリンシパルにロールを割り当てることで、
"Cognitive Services Language Reader"
言語サービスへのアクセス権を付与します。
セットアップ後、使用する azure.identity から 資格情報 の種類を選択できます。 たとえば、 DefaultAzureCredential を使用してクライアントを認証できます。
AAD アプリケーションのクライアント ID、テナント ID、クライアント シークレットの値を環境変数として設定します(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
Text Analytics クライアント ライブラリには、ドキュメントのサンプル バッチに関する分析を行うための TextAnalyticsClientが用意されています。 言語検出やキー フレーズ抽出など、テキスト分析の特定の用途にアクセスするための同期操作と非同期操作の両方が提供されます。
入力
ドキュメントは、言語サービスの予測モデルによって分析される 1 つの単位です。 各操作の入力は、ドキュメントの 一覧 として渡されます。
各ドキュメントは、リスト内の文字列として渡すことができます (例: )。
documents = ["I hated the movie. It was so slow!", "The movie made it into my top ten favorites. What a great movie!"]
または、アイテムごとのドキュメントid
または language
country_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!"},
]
ドキュメントの長さの制限、最大バッチ サイズ、サポートされているテキスト エンコードなど、入力の サービス 制限に関するページを参照してください。
戻り値
1 つのドキュメントの戻り値には、結果オブジェクトまたはエラー オブジェクトを指定できます。 結果オブジェクトとエラー オブジェクトのコレクションを含む異種リストは、各操作から返されます。 これらの結果/エラーは、指定されたドキュメントの順序とインデックス照合されます。
AnalyzeSentimentResult などの結果はテキスト分析操作の結果であり、ドキュメント入力に関する予測または予測が含まれます。
エラー オブジェクト DocumentError は、サービスがドキュメントの処理に問題があり、失敗した理由が含まれていることを示します。
ドキュメント エラー処理
属性を使用して、リスト内の結果オブジェクトまたはエラー オブジェクトを is_error
フィルター処理できます。 結果オブジェクトの場合、これは常に False
であり、 DocumentError の 場合は です True
。
たとえば、すべての 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操作
実行時間の長い操作は、操作を開始するためにサービスに送信された最初の要求で構成される操作です。その後、間隔を指定してサービスをポーリングして、操作が完了したか失敗したか、成功したかどうかを判断して結果を取得します。
医療分析、カスタム テキスト分析、または複数の分析をサポートするメソッドは、実行時間の長い操作としてモデル化されます。
クライアントは、poller オブジェクトを begin_<method-name>
返すメソッドを公開します。 呼び出し元は、 メソッドから返された poller オブジェクトを呼び出 result()
して、操作が完了するまで待機する begin_<method-name>
必要があります。
実行時間の長い操作の使用例を示すサンプル コード スニペット 用意されています。
例
次のセクションでは、次のような最も一般的な言語サービス タスクの一部をカバーするいくつかのコード スニペットを示します。
- 感情の分析
- エンティティを認識する
- リンクされたエンティティを認識する
- PII エンティティを認識する
- キー フレーズの抽出
- 言語の検出
- 医療エンティティの分析
- 複数の分析
- カスタム エンティティ認識
- カスタム単一ラベル分類
- カスタムマルチラベル分類
- 抽出要約
- 抽象要約
感情の分析
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 は、入力テキストで見つかった各エンティティの ID を認識し、明確にします (たとえば、Mars という単語の出現が惑星を指すのか、ローマ戦争の神なのかを判断します)。 認識されたエンティティは、Wikipedia などのよく知られたサポート情報への 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]
エンティティのリンクとサポートされる型の概念的な説明については、サービス ドキュメントを参照してください。
PII エンティティを認識する
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]
サポートされている PII エンティティの種類については、サービスのドキュメントを参照してください。
注: Recognize PII Entities サービスは、API バージョン v3.1 以降で使用できます。
キー フレーズを抽出する
extract_key_phrasesは、入力テキスト内のメインの通信ポイントを決定します。 たとえば、"食べ物は美味しく、素晴らしいスタッフがいました" という入力テキストの場合、API は "food" と "wonderful staff" を返します。
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 バージョン v3.1 以降でのみ使用できます。
複数の分析
実行時間の長い操作begin_analyze_actions は、1 つの要求で 1 つのドキュメント セットに対して複数の分析を実行します。 現在、1 つの要求で次の言語 API の任意の組み合わせを使用してサポートされています。
- エンティティ認識
- PII エンティティの認識
- リンクされたエンティティの認識
- キー フレーズ抽出
- 感情分析
- カスタム エンティティ認識 (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 バージョン v3.1 以降では、複数の分析を使用できます。
オプションの構成
省略可能なキーワード (keyword)引数は、クライアントと操作ごとのレベルで渡すことができます。 azure-core リファレンス ドキュメント では、再試行、ログ記録、トランスポート プロトコルなどの使用可能な構成について説明しています。
トラブルシューティング
全般
Text Analytics クライアントは、Azure Core で定義されている例外を発生させます。
ログの記録
このライブラリでは、ログ記録に標準 のログ ライブラリが使用されます。 HTTP セッションに関する基本情報 (URL、ヘッダーなど) は INFO レベルでログに記録されます。
要求/応答本文と編集されていないヘッダーを含む詳細なデバッグ レベルのログ記録は、次のように logging_enable
キーワード引数を使用してクライアントで有効にすることができます。
import sys
import logging
from azure.identity import DefaultAzureCredential
from azure.ai.textanalytics import TextAnalyticsClient
# Create a logger for the 'azure' SDK
logger = logging.getLogger('azure')
logger.setLevel(logging.DEBUG)
# Configure a console output
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)
endpoint = "https://<resource-name>.cognitiveservices.azure.com/"
credential = DefaultAzureCredential()
# This client will log detailed information about its HTTP sessions, at DEBUG level
text_analytics_client = TextAnalyticsClient(endpoint, credential, logging_enable=True)
result = text_analytics_client.analyze_sentiment(["I did not like the restaurant. The food was too spicy."])
同様に、logging_enable
は、詳細なログ記録がクライアントで有効になっていない場合でも、1 回の操作のために有効にすることができます。
result = text_analytics_client.analyze_sentiment(documents, logging_enable=True)
次のステップ
その他のサンプル コード
これらのコード サンプルは、Azure Text Analytics クライアント ライブラリでの一般的なシナリオ操作を示しています。
Cognitive Services/Language Service API キーまたは azure-identity からのトークン資格情報を使用してクライアントを認証します。
一般的なシナリオ
- センチメントの分析: sample_analyze_sentiment.py (非同期バージョン)
- エンティティを認識する: sample_recognize_entities.py (非同期バージョン)
- 個人を特定できる情報を認識する: sample_recognize_pii_entities.py (非同期バージョン)
- リンクされたエンティティを認識する: sample_recognize_linked_entities.py (非同期バージョン)
- キー フレーズの抽出: sample_extract_key_phrases.py (非同期バージョン)
- 言語の検出: sample_detect_language.py (非同期バージョン)
- 医療エンティティ分析: sample_analyze_healthcare_entities.py (非同期バージョン)
- 複数の分析: sample_analyze_actions.py (非同期バージョン)
- カスタム エンティティ認識: sample_recognize_custom_entities.py (async_version)
- カスタム単一ラベル分類: sample_single_label_classify.py (async_version)
- カスタム マルチ ラベル分類: sample_multi_label_classify.py (async_version)
- 抽出テキストの要約: sample_extract_summary.py (非同期バージョン)
- 抽象テキスト要約: sample_abstract_summary.py (非同期バージョン)
高度なシナリオ
- オピニオン マイニング: sample_analyze_sentiment_with_opinion_mining.py (async_version)
その他のドキュメント
Azure Cognitive Service for Language の詳細なドキュメントについては、docs.microsoft.com に関する 言語サービスのドキュメントを参照 してください。
共同作成
このプロジェクトでは、共同作成と提案を歓迎しています。 ほとんどの共同作成では、共同作成者使用許諾契約書 (CLA) にご同意いただき、ご自身の共同作成内容を使用する権利を Microsoft に供与する権利をお持ちであり、かつ実際に供与することを宣言していただく必要があります。 詳細については、「 cla.microsoft.com」を参照してください。
pull request を送信すると、CLA を提供して PR (ラベル、コメントなど) を適宜装飾する必要があるかどうかを CLA ボットが自動的に決定します。 ボットによって提供される手順にそのまま従ってください。 この操作は、Microsoft の CLA を使用するすべてのリポジトリについて、1 回だけ行う必要があります。
このプロジェクトでは、Microsoft オープン ソースの倫理規定を採用しています。 詳しくは、「Code of Conduct FAQ (倫理規定についてよくある質問)」を参照するか、opencode@microsoft.com 宛てに質問またはコメントをお送りください。
Azure SDK for Python