1. نظرة عامة
تتيح لك Natual Language API استخراج المعلومات من النصوص غير المنظَّمة باستخدام تقنية تعلُّم الآلة من Google. في هذا البرنامج التعليمي، ستركز على استخدام مكتبة برامج بايثون الخاصة بها.
المعلومات التي ستطّلع عليها
- كيفية إعداد البيئة
- كيفية إجراء تحليل الآراء
- كيفية إجراء تحليل الكيان
- كيفية إجراء تحليل بناء الجملة
- كيفية تصنيف المحتوى
- كيفية الإشراف على النص
المتطلبات
استطلاع
كيف ستستخدم هذا البرنامج التعليمي؟
كيف تقيّم تجربتك مع Python؟
كيف تقيّم تجربتك مع خدمات Google Cloud؟
2. الإعداد والمتطلبات
إعداد بيئة ذاتية
- سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.
- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديلها في أي وقت.
- يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud وغير قابل للتغيير (لا يمكن تغييره بعد تحديده). تنشئ Cloud Console سلسلة فريدة تلقائيًا. فعادةً لا تهتم بما هو. في معظم الدروس التطبيقية حول الترميز، يجب الإشارة إلى رقم تعريف المشروع (الذي يتم تحديده عادةً على أنّه
PROJECT_ID
). وإذا لم يعجبك رقم التعريف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. ويمكنك بدلاً من ذلك تجربة طلبك الخاص ومعرفة ما إذا كان متاحًا. ولا يمكن تغييره بعد هذه الخطوة ويبقى طوال مدة المشروع. - لمعلوماتك، هناك قيمة ثالثة، وهي رقم المشروع، الذي تستخدمه بعض واجهات برمجة التطبيقات. اطّلِع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام الموارد/واجهات برمجة التطبيقات في Cloud. لن يؤدي إكمال هذا الدرس التطبيقي حول الترميز إلى فرض أي تكاليف، إن وُجدت. لإيقاف تشغيل الموارد لتجنب تحمُّل الفواتير إلى ما هو أبعد من هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج فترة تجريبية مجانية بقيمة 300 دولار أمريكي.
بدء Cloud Shell
يمكنك إدارة Google Cloud عن بُعد من الكمبيوتر المحمول، إلا أنّك ستستخدم في هذا الدرس التطبيقي Cloud Shell، وهي بيئة سطر أوامر يتم تشغيلها في السحابة الإلكترونية.
تفعيل Cloud Shell
- من Cloud Console، انقر على تفعيل Cloud Shell .
إذا كانت هذه هي المرة الأولى التي تبدأ فيها Cloud Shell، ستظهر لك شاشة وسيطة تصف ماهيتها. إذا ظهرت لك شاشة وسيطة، انقر على متابعة.
من المفترَض أن تستغرق عملية إدارة الحسابات والاتصال بخدمة Cloud Shell بضع دقائق فقط.
يتم تحميل هذا الجهاز الافتراضي مع جميع أدوات التطوير اللازمة. وتوفّر هذه الشبكة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت ويتم تشغيله في Google Cloud، ما يحسّن بشكل كبير من أداء الشبكة والمصادقة. يمكنك تنفيذ معظم عملك، إن لم يكن كلّه، في هذا الدرس التطبيقي حول الترميز باستخدام متصفّح.
بعد الربط بخدمة Cloud Shell، من المفترض أن تتأكّد من أنّه تمّت مصادقتك وأنّ المشروع مضبوط على رقم تعريف مشروعك.
- شغِّل الأمر التالي في Cloud Shell لتأكيد مصادقتك:
gcloud auth list
مخرجات الأمر
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- شغّل الأمر التالي في Cloud Shell للتأكد من معرفة الأمر gcloud بمشروعك:
gcloud config list project
مخرجات الأمر
[core] project = <PROJECT_ID>
إذا لم يكن كذلك، يمكنك تعيينه من خلال هذا الأمر:
gcloud config set project <PROJECT_ID>
مخرجات الأمر
Updated property [core/project].
3- إعداد البيئة
قبل أن تتمكن من البدء في استخدام Natural Language API، شغِّل الأمر التالي في Cloud Shell لتفعيل واجهة برمجة التطبيقات:
gcloud services enable language.googleapis.com
ينبغي أن تظهر لك على النحو التالي:
Operation "operations/..." finished successfully.
والآن، يمكنك استخدام Natural Language API!
انتقِل إلى الدليل الرئيسي:
cd ~
أنشئ بيئة بايثون افتراضية لعزل التبعيات:
virtualenv venv-language
تفعيل البيئة الافتراضية:
source venv-language/bin/activate
تثبيت مكتبة برامج IPython وPandas و Natural Language API:
pip install ipython pandas tabulate google-cloud-language
ينبغي أن تظهر لك على النحو التالي:
... Installing collected packages: ... pandas ... ipython ... google-cloud-language Successfully installed ... google-cloud-language-2.11.0 ...
والآن، أصبحت جاهزًا لاستخدام مكتبة عملاء Natural Language API!
في الخطوات التالية، ستستخدم مترجمًا تفاعليًا بلغة Python يُسمى IPython، وقد تم تثبيته في الخطوة السابقة. يمكنك بدء جلسة من خلال تشغيل ipython
في Cloud Shell:
ipython
ينبغي أن تظهر لك على النحو التالي:
Python 3.9.2 (default, Feb 28 2021, 17:03:44) Type 'copyright', 'credits' or 'license' for more information IPython 8.15.0 -- An enhanced Interactive Python. Type '?' for help. In [1]:
4. تحليل الآراء
يفحص تحليل المشاعر النص المعنيّ ويحدّد الآراء العاطفية السائدة في النص، لا سيّما لتحديد المشاعر التي يتم التعبير عنها على أنّها إيجابية أو سلبية أو محايدة، سواء على مستوى الجملة أو المستند. ويتم تنفيذها باستخدام الطريقة analyze_sentiment
التي تعرض AnalyzeSentimentResponse
.
انسخ الرمز التالي إلى جلسة IPython:
from google.cloud import language
def analyze_text_sentiment(text: str) -> language.AnalyzeSentimentResponse:
client = language.LanguageServiceClient()
document = language.Document(
content=text,
type_=language.Document.Type.PLAIN_TEXT,
)
return client.analyze_sentiment(document=document)
def show_text_sentiment(response: language.AnalyzeSentimentResponse):
import pandas as pd
columns = ["score", "sentence"]
data = [(s.sentiment.score, s.text.content) for s in response.sentences]
df_sentence = pd.DataFrame(columns=columns, data=data)
sentiment = response.document_sentiment
columns = ["score", "magnitude", "language"]
data = [(sentiment.score, sentiment.magnitude, response.language)]
df_document = pd.DataFrame(columns=columns, data=data)
format_args = dict(index=False, tablefmt="presto", floatfmt="+.1f")
print(f"At sentence level:\n{df_sentence.to_markdown(**format_args)}")
print()
print(f"At document level:\n{df_document.to_markdown(**format_args)}")
إجراء تحليل:
# Input
text = """
Python is a very readable language, which makes it easy to understand and maintain code.
It's simple, very flexible, easy to learn, and suitable for a wide variety of tasks.
One disadvantage is its speed: it's not as fast as some other programming languages.
"""
# Send a request to the API
analyze_sentiment_response = analyze_text_sentiment(text)
# Show the results
show_text_sentiment(analyze_sentiment_response)
من المفترض أن تظهر لك نتيجة على النحو التالي:
At sentence level: score | sentence ---------+------------------------------------------------------------------------------------------ +0.8 | Python is a very readable language, which makes it easy to understand and maintain code. +0.9 | It's simple, very flexible, easy to learn, and suitable for a wide variety of tasks. -0.4 | One disadvantage is its speed: it's not as fast as some other programming languages. At document level: score | magnitude | language ---------+-------------+------------ +0.4 | +2.2 | en
خذ لحظة لاختبار جملك الخاصة.
ملخّص
في هذه الخطوة، تمكنت من إجراء تحليل الآراء على سلسلة من النص!
5- تحليل الكيانات
يفحص تحليل الكيانات النص المحدّد للكيانات المعروفة (الأسماء الصحيحة مثل الشخصيات العامة والمعالم وغيرها)، ويعرض معلومات حول هذه الكيانات. ويتم تنفيذها باستخدام الطريقة analyze_entities
التي تعرض AnalyzeEntitiesResponse
.
انسخ الرمز التالي إلى جلسة IPython:
from google.cloud import language
def analyze_text_entities(text: str) -> language.AnalyzeEntitiesResponse:
client = language.LanguageServiceClient()
document = language.Document(
content=text,
type_=language.Document.Type.PLAIN_TEXT,
)
return client.analyze_entities(document=document)
def show_text_entities(response: language.AnalyzeEntitiesResponse):
import pandas as pd
columns = ("name", "type", "salience", "mid", "wikipedia_url")
data = (
(
entity.name,
entity.type_.name,
entity.salience,
entity.metadata.get("mid", ""),
entity.metadata.get("wikipedia_url", ""),
)
for entity in response.entities
)
df = pd.DataFrame(columns=columns, data=data)
print(df.to_markdown(index=False, tablefmt="presto", floatfmt=".0%"))
إجراء تحليل:
# Input
text = """Guido van Rossum is best known as the creator of Python,
which he named after the Monty Python comedy troupe.
He was born in Haarlem, Netherlands.
"""
# Send a request to the API
analyze_entities_response = analyze_text_entities(text)
# Show the results
show_text_entities(analyze_entities_response)
من المفترض أن تظهر لك نتيجة على النحو التالي:
name | type | salience | mid | wikipedia_url ------------------+--------------+------------+-----------+------------------------------------------------------------- Guido van Rossum | PERSON | 50% | /m/01h05c | https://en.wikipedia.org/wiki/Guido_van_Rossum Python | ORGANIZATION | 38% | /m/05z1_ | https://en.wikipedia.org/wiki/Python_(programming_language) creator | PERSON | 5% | | Monty Python | PERSON | 3% | /m/04sd0 | https://en.wikipedia.org/wiki/Monty_Python comedy troupe | PERSON | 2% | | Haarlem | LOCATION | 1% | /m/0h095 | https://en.wikipedia.org/wiki/Haarlem Netherlands | LOCATION | 1% | /m/059j2 | https://en.wikipedia.org/wiki/Netherlands
خذ لحظة لاختبار الجمل الخاصة بك التي تشير إلى الكيانات الأخرى.
ملخّص
في هذه الخطوة، تمكّنت من إجراء تحليل للكيان.
6- تحليل البنية
يستخلص تحليل بناء الجملة المعلومات اللغوية، ويقسم النص المعين إلى سلسلة من الجمل والرموز (استنادًا بشكل عام إلى حدود الكلمات)، مما يوفر تحليلاً إضافيًا لتلك الرموز المميزة. ويتم تنفيذها باستخدام الطريقة analyze_syntax
التي تعرض AnalyzeSyntaxResponse
.
انسخ الرمز التالي إلى جلسة IPython:
from typing import Optional
from google.cloud import language
def analyze_text_syntax(text: str) -> language.AnalyzeSyntaxResponse:
client = language.LanguageServiceClient()
document = language.Document(
content=text,
type_=language.Document.Type.PLAIN_TEXT,
)
return client.analyze_syntax(document=document)
def get_token_info(token: Optional[language.Token]) -> list[str]:
parts = [
"tag",
"aspect",
"case",
"form",
"gender",
"mood",
"number",
"person",
"proper",
"reciprocity",
"tense",
"voice",
]
if not token:
return ["token", "lemma"] + parts
text = token.text.content
lemma = token.lemma if token.lemma != token.text.content else ""
info = [text, lemma]
for part in parts:
pos = token.part_of_speech
info.append(getattr(pos, part).name if part in pos else "")
return info
def show_text_syntax(response: language.AnalyzeSyntaxResponse):
import pandas as pd
tokens = len(response.tokens)
sentences = len(response.sentences)
columns = get_token_info(None)
data = (get_token_info(token) for token in response.tokens)
df = pd.DataFrame(columns=columns, data=data)
# Remove empty columns
empty_columns = [col for col in df if df[col].eq("").all()]
df.drop(empty_columns, axis=1, inplace=True)
print(f"Analyzed {tokens} token(s) from {sentences} sentence(s):")
print(df.to_markdown(index=False, tablefmt="presto"))
إجراء تحليل:
# Input
text = """Guido van Rossum is best known as the creator of Python.
He was born in Haarlem, Netherlands.
"""
# Send a request to the API
analyze_syntax_response = analyze_text_syntax(text)
# Show the results
show_text_syntax(analyze_syntax_response)
من المفترض أن تظهر لك نتيجة على النحو التالي:
Analyzed 20 token(s) from 2 sentence(s): token | lemma | tag | case | gender | mood | number | person | proper | tense | voice -------------+---------+-------+------------+-----------+------------+----------+----------+----------+---------+--------- Guido | | NOUN | | | | SINGULAR | | PROPER | | van | | NOUN | | | | SINGULAR | | PROPER | | Rossum | | NOUN | | | | SINGULAR | | PROPER | | is | be | VERB | | | INDICATIVE | SINGULAR | THIRD | | PRESENT | best | well | ADV | | | | | | | | known | know | VERB | | | | | | | PAST | as | | ADP | | | | | | | | the | | DET | | | | | | | | creator | | NOUN | | | | SINGULAR | | | | of | | ADP | | | | | | | | Python | | NOUN | | | | SINGULAR | | PROPER | | . | | PUNCT | | | | | | | | He | | PRON | NOMINATIVE | MASCULINE | | SINGULAR | THIRD | | | was | be | VERB | | | INDICATIVE | SINGULAR | THIRD | | PAST | born | bear | VERB | | | | | | | PAST | PASSIVE in | | ADP | | | | | | | | Haarlem | | NOUN | | | | SINGULAR | | PROPER | | , | | PUNCT | | | | | | | | Netherlands | | NOUN | | | | SINGULAR | | PROPER | | . | | PUNCT | | | | | | | |
خذ لحظة لاختبار جملك الخاصة مع الهياكل النحوية الأخرى.
إذا تعمّقت في تفاصيل إحصاءات الردود، ستجد أيضًا العلاقات بين الرموز المميّزة. في ما يلي تفسير مرئي يوضّح التحليل الكامل لبناء الجملة لهذا المثال، ولقطة شاشة من العرض التوضيحي للغة الطبيعية على الإنترنت:
ملخّص
في هذه الخطوة، كنت قادرًا على إجراء تحليل بناء الجملة!
7. تصنيف المحتوى
تحلّل ميزة "تصنيف المحتوى" مستندًا وتعرض قائمة بفئات المحتوى التي تنطبق على النص الوارد في المستند. ويتم تنفيذها باستخدام الطريقة classify_text
التي تعرض ClassifyTextResponse
.
انسخ الرمز التالي إلى جلسة IPython:
from google.cloud import language
def classify_text(text: str) -> language.ClassifyTextResponse:
client = language.LanguageServiceClient()
document = language.Document(
content=text,
type_=language.Document.Type.PLAIN_TEXT,
)
return client.classify_text(document=document)
def show_text_classification(text: str, response: language.ClassifyTextResponse):
import pandas as pd
columns = ["category", "confidence"]
data = ((category.name, category.confidence) for category in response.categories)
df = pd.DataFrame(columns=columns, data=data)
print(f"Text analyzed:\n{text}")
print(df.to_markdown(index=False, tablefmt="presto", floatfmt=".0%"))
إجراء تحليل:
# Input
text = """Python is an interpreted, high-level, general-purpose programming language.
Created by Guido van Rossum and first released in 1991, Python's design philosophy
emphasizes code readability with its notable use of significant whitespace.
"""
# Send a request to the API
classify_text_response = classify_text(text)
# Show the results
show_text_classification(text, classify_text_response)
من المفترض أن تظهر لك نتيجة على النحو التالي:
Text analyzed: Python is an interpreted, high-level, general-purpose programming language. Created by Guido van Rossum and first released in 1991, Python's design philosophy emphasizes code readability with its notable use of significant whitespace. category | confidence --------------------------------------+-------------- /Computers & Electronics/Programming | 99% /Science/Computer Science | 99%
خذ لحظة لاختبار جملك الخاصة المتعلقة بفئات أخرى. لاحظ أنه يجب تقديم كتلة نص (مستند) تحتوي على عشرين رمزًا مميزًا على الأقل (كلمة وعلامات ترقيم).
ملخّص
وفي هذه الخطوة، تمكنت من تصنيف المحتوى!
8. الإشراف على النص
تستند ميزة الإشراف على النص إلى أحدث نموذج من نماذج PaLM 2 من Google، وهي تساعد في تحديد مجموعة كبيرة من المحتوى الضارّ، بما في ذلك الكلام الذي يحضّ على الكراهية والتسلّط والتحرش الجنسي. ويتم تنفيذها باستخدام الطريقة moderate_text
التي تعرض ModerateTextResponse
.
انسخ الرمز التالي إلى جلسة IPython:
from google.cloud import language
def moderate_text(text: str) -> language.ModerateTextResponse:
client = language.LanguageServiceClient()
document = language.Document(
content=text,
type_=language.Document.Type.PLAIN_TEXT,
)
return client.moderate_text(document=document)
def show_text_moderation(text: str, response: language.ModerateTextResponse):
import pandas as pd
def confidence(category: language.ClassificationCategory) -> float:
return category.confidence
columns = ["category", "confidence"]
categories = sorted(response.moderation_categories, key=confidence, reverse=True)
data = ((category.name, category.confidence) for category in categories)
df = pd.DataFrame(columns=columns, data=data)
print(f"Text analyzed:\n{text}")
print(df.to_markdown(index=False, tablefmt="presto", floatfmt=".0%"))
إجراء تحليل:
# Input
text = """I have to read Ulysses by James Joyce.
I'm a little over halfway through and I hate it.
What a pile of garbage!
"""
# Send a request to the API
response = moderate_text(text)
# Show the results
show_text_moderation(text, response)
من المفترض أن تظهر لك نتيجة على النحو التالي:
Text analyzed: I have to read Ulysses by James Joyce. I'm a little over halfway through and I hate it. What a pile of garbage! category | confidence -----------------------+-------------- Toxic | 67% Insult | 58% Profanity | 53% Violent | 48% Illicit Drugs | 29% Religion & Belief | 27% Politics | 22% Death, Harm & Tragedy | 21% Finance | 18% Derogatory | 14% Firearms & Weapons | 11% Health | 10% Legal | 10% War & Conflict | 7% Public Safety | 5% Sexual | 4%
خذ لحظة لاختبار جملك الخاصة.
ملخّص
في هذه الخطوة، تمكنت من الإشراف على النص!
9. تهانينا!
لقد تعلمت كيفية استخدام Natural Language API باستخدام Python!
تَنظيم
لتنظيف بيئة التطوير، من Cloud Shell:
- إذا كنت لا تزال في جلسة IPython، يُرجى الرجوع إلى واجهة الأوامر:
exit
- التوقف عن استخدام بيئة Python الافتراضية:
deactivate
- حذف مجلد البيئة الافتراضية:
cd ~ ; rm -rf ./venv-language
لحذف مشروعك على Google Cloud، اتّبِع الخطوات التالية من Cloud Shell:
- استرداد رقم تعريف مشروعك الحالي:
PROJECT_ID=$(gcloud config get-value core/project)
- تأكَّد من أنّ هذا هو المشروع الذي تريد حذفه:
echo $PROJECT_ID
. - حذف المشروع:
gcloud projects delete $PROJECT_ID
مزيد من المعلومات
- اختبار العرض التوضيحي في متصفّحك: https://cloud.google.com/natural-language#natural-language-api-demo
- مستندات اللغة الطبيعية: https://cloud.google.com/natural-language/docs
- Python على Google Cloud: https://cloud.google.com/python
- مكتبات عميل Cloud للغة Python: https://github.com/googleapis/google-cloud-python
الترخيص
هذا العمل مرخّص بموجب رخصة المشاع الإبداعي 2.0 مع نسب العمل إلى مؤلف عام.