مكتبة عميل Azure Text Analytics ل Python - الإصدار 5.3.0
خدمة Azure المعرفية للغة هي خدمة مستندة إلى السحابة توفر ميزات معالجة اللغة الطبيعية (NLP) لفهم النص وتحليله، وتتضمن الميزات الرئيسية التالية:
- تحليل التوجه
- التعرف على الكيانات المسماة
- اكتشاف اللغة
- استخراج العبارة الرئيسية
- ربط الكيانات
- تحليل متعدد
- الكشف عن معلومات التعريف الشخصية (PII)
- تحليلات النص للصحة
- التعرف على الكيان المسمى المخصص
- تصنيف النص المخصص
- تلخيص النص الاستخراجي
- تلخيص النص التجريدي
التعليمات البرمجية | المصدرالحزمة (PyPI) | حزمة (Conda) | الوثائق | المرجعية لواجهة برمجة التطبيقاتوثائق | المنتجعينات
الشروع في العمل
المتطلبات الأساسية
- مطلوب Python 3.7 لاحقا لاستخدام هذه الحزمة.
- يجب أن يكون لديك اشتراك Azureومورد خدمة الخدمات المعرفية أو اللغة لاستخدام هذه الحزمة.
إنشاء مورد خدمة الخدمات المعرفية أو اللغة
تدعم خدمة Language كلا من الوصول متعدد الخدمات وخدمة واحدة. يمكنك إنشاء مورد الخدمات المعرفية إذا كنت تخطط للوصول إلى خدمات معرفية متعددة ضمن نقطة نهاية/مفتاح فردي. للوصول إلى خدمة Language فقط، قم بإنشاء مورد خدمة Language. يمكنك إنشاء المورد باستخدام مدخل Microsoft Azure أو Azure CLI باتباع الخطوات الواردة في هذا المستند.
يبدأ التفاعل مع الخدمة باستخدام مكتبة العميل بعميل .
لإنشاء كائن عميل، ستحتاج إلى الخدمات المعرفية أو خدمة 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)
لاحظ أنه بالنسبة لبعض موارد الخدمات المعرفية، قد تبدو نقطة النهاية مختلفة عن قصاصة التعليمات البرمجية أعلاه.
على سبيل المثال، https://<region>.api.cognitive.microsoft.com/
.
تثبيت الحِزَمة
قم بتثبيت مكتبة عميل Azure Text Analytics ل 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
وأحدث يستهدف خدمة Azure المعرفية لواجهات برمجة تطبيقات اللغة. تتضمن واجهات برمجة التطبيقات هذه تحليل النص وميزات معالجة اللغة الطبيعية الموجودة في الإصدارات السابقة من مكتبة عميل Text Analytics. بالإضافة إلى ذلك، تغيرت واجهة برمجة تطبيقات الخدمة من الإصدار الدلالي إلى الإصدار المستند إلى التاريخ. يتم تعيين هذا الإصدار من مكتبة العميل افتراضيا إلى أحدث إصدار مدعوم من واجهة برمجة التطبيقات، وهو حاليا2023-04-01
.
يوضح هذا الجدول العلاقة بين إصدارات SDK وإصدارات واجهة برمجة التطبيقات المدعومة للخدمة
إصدار SDK | إصدار خدمة واجهة برمجة التطبيقات المدعومة |
---|---|
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_version إلى العميل. للحصول على أحدث ميزات خدمة اللغة، ضع في اعتبارك تحديد أحدث إصدار من واجهة برمجة تطبيقات بيتا. بالنسبة لسيناريوهات الإنتاج، يوصى بأحدث إصدار مستقر. قد يؤدي الإعداد إلى إصدار أقدم إلى تقليل توافق الميزات.
مصادقة العميل
الحصول على نقطة النهاية
يمكنك العثور على نقطة النهاية لمورد خدمة اللغة باستخدام مدخل Microsoft 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 من الخدمات المعرفية أو مورد خدمة اللغة في مدخل Microsoft Azure. بدلا من ذلك، يمكنك استخدام قصاصة برمجية Azure CLI أدناه للحصول على مفتاح واجهة برمجة التطبيقات لموردك.
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 . لاحظ أن نقاط النهاية الإقليمية لا تدعم مصادقة AAD. قم بإنشاء اسم مجال فرعي مخصص لموردك لاستخدام هذا النوع من المصادقة.
تتطلب المصادقة مع AAD بعض الإعداد الأولي:
- تثبيت azure-identity
- تسجيل تطبيق AAD جديد
- امنح حق الوصول إلى خدمة Language عن طريق تعيين
"Cognitive Services Language Reader"
الدور إلى كيان الخدمة الخاص بك.
بعد الإعداد، يمكنك اختيار نوع بيانات الاعتماد من 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
توفر مكتبة عميل Text Analytics TextAnalyticsClient لإجراء تحليل على من المستندات. يوفر كلا من العمليات المتزامنة وغير المتزامنة للوصول إلى استخدام معين لتحليل النص، مثل الكشف عن اللغة أو استخراج العبارة الرئيسية.
إدخال
المستند هو وحدة واحدة لتحليلها بواسطة النماذج التنبؤية في خدمة Language. يتم تمرير الإدخال لكل عملية كقوائم بالمستندات.
يمكن تمرير كل مستند كسلسلة في القائمة، على سبيل المثال.
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!"},
]
راجع قيود الخدمة للإدخال، بما في ذلك حدود طول المستند والحد الأقصى لحجم الدفعة وترميز النص المدعوم.
القيمة المرجعة
يمكن أن تكون القيمة المرجعة لمستند واحد نتيجة أو عنصر خطأ. يتم إرجاع قائمة غير متجانسة تحتوي على مجموعة من كائنات النتائج والخطأ من كل عملية. تتم مطابقة هذه النتائج/الأخطاء مع ترتيب المستندات المقدمة.
النتيجة، مثل 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
العمليات طويلة الأمد هي عمليات تتكون من طلب أولي تم إرساله إلى الخدمة لبدء عملية، متبوعة باستطلاع الخدمة على فترات لتحديد ما إذا كانت العملية قد اكتملت أو فشلت، وما إذا كانت قد نجحت، للحصول على النتيجة.
يتم تصميم الأساليب التي تدعم تحليل الرعاية الصحية أو تحليل النص المخصص أو التحليلات المتعددة على أنها عمليات طويلة الأمد.
يعرض العميل أسلوبا begin_<method-name>
يقوم بإرجاع كائن الاستقصاء. يجب أن ينتظر المتصلون حتى تكتمل العملية عن طريق استدعاء 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 تعترف وتزيل الغموض عن هوية كل كيان موجود في نص الإدخال الخاص به (على سبيل المثال، تحديد ما إذا كان حدوث كلمة المريخ يشير إلى الكوكب، أو إلى إله الحرب الروماني). ترتبط الكيانات المعترف بها بعناوين 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 في إصدار واجهة برمجة التطبيقات v3.1 والإصدارات الأحدث.
استخراج العبارات الرئيسية
يحدد extract_key_phrases نقاط الحوار الرئيسية في نص الإدخال الخاص به. على سبيل المثال، بالنسبة لنص الإدخال "كان الطعام لذيذا وكان هناك فريق عمل رائع"، تعود واجهة برمجة التطبيقات: "الطعام" و"فريق عمل رائع".
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
]
ملاحظة: يتوفر تحليل كيانات الرعاية الصحية فقط مع إصدار واجهة برمجة التطبيقات v3.1 والإصدارات الأحدث.
تحليل متعدد
تقوم العملية طويلة الأمدbegin_analyze_actions بإجراء تحليلات متعددة على مجموعة واحدة من المستندات في طلب واحد. يتم دعمه حاليا باستخدام أي مجموعة من واجهات برمجة تطبيقات اللغة التالية في طلب واحد:
- التعرف على الكيانات
- التعرف على كيانات PII
- التعرف على الكيان المرتبط
- استخراج العبارة الرئيسية
- تحليل التوجه
- التعرف على الكيان المخصص (إصدار واجهة برمجة التطبيقات 2022-05-01 والأحدث)
- تصنيف تسمية فردية مخصصة (إصدار واجهة برمجة التطبيقات 2022-05-01 والأحدث)
- تصنيف مخصص متعدد التسميات (إصدار واجهة برمجة التطبيقات 2022-05-01 والأحدث)
- تحليل كيانات الرعاية الصحية (إصدار واجهة برمجة التطبيقات 2022-05-01 والأحدث)
- التلخيص الاستخراجي (إصدار واجهة برمجة التطبيقات 2023-04-01 والإصدارات الأحدث)
- تلخيص تجريدي (إصدار واجهة برمجة التطبيقات 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("------------------------------------------")
الاستجابة التي تم إرجاعها هي كائن يغلف العديد من التكرارات، كل منها يمثل نتائج التحليلات الفردية.
ملاحظة: يتوفر تحليل متعدد في إصدار واجهة برمجة التطبيقات v3.1 والإصدارات الأحدث.
التكوين الاختياري
يمكن تمرير وسيطات الكلمة الأساسية الاختيارية على مستوى العميل وكل عملية. تصف الوثائق المرجعية azure-core التكوينات المتوفرة لإعادة المحاولة والتسجيل وبروتوكولات النقل والمزيد.
استكشاف الأخطاء وإصلاحها
عام
سيقوم عميل Text Analytics برفع الاستثناءات المحددة في Azure Core.
تسجيل الدخول
تستخدم هذه المكتبة مكتبة التسجيل القياسية للتسجيل. يتم تسجيل المعلومات الأساسية حول جلسات HTTP (عناوين URL والعناوين وما إلى ذلك) على مستوى INFO.
يمكن تمكين تسجيل مستوى DEBUG مفصلة بما في ذلك الهيئات طلب /استجابة ورؤوس غير منقحة على عميل مع 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
يمكن تمكين تسجيل مفصل لعملية واحدة، حتى عندما لا يتم تمكين للعميل:
result = text_analytics_client.analyze_sentiment(documents, logging_enable=True)
الخطوات التالية
المزيد من نماذج التعليمات البرمجية
تعرض نماذج التعليمات البرمجية هذه عمليات السيناريو الشائعة مع مكتبة عميل Azure Text Analytics.
مصادقة العميل باستخدام مفتاح 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 المعرفية للغة، راجع وثائق Language Service على docs.microsoft.com.
المساهمة
هذا المشروع يرحب بالمساهمات والاقتراحات. معظم المساهمات تتطلب منك الموافقة على اتفاقية ترخيص المساهم (CLA) التي تعلن أن لديك الحق في منحنا حق استخدام مساهمتك. للحصول على التفاصيل، تفضل بزيارة cla.microsoft.com.
عند إرسال طلب سحب، سيحدد روبوت CLA-bot تلقائيًا ما إذا كنت بحاجة إلى تقديم CLA وتزيين العلاقات العامة بشكل مناسب (على سبيل المثال، التسمية أو التعليق). ما عليك سوى اتباع التعليمات التي يقدمها الروبوت. ستحتاج فقط إلى القيام بذلك مرة واحدة عبر جميع عمليات إعادة الشراء باستخدام CLA الخاص بنا.
اعتمد هذا المشروع مدونة السلوك من المصادر المفتوحة من Microsoft. لمزيد من المعلومات، راجع الأسئلة المتداولة حول قواعد السلوك أو الاتصال opencode@microsoft.com بأي أسئلة أو تعليقات إضافية.
Azure SDK for Python