تتيح لك واجهة برمجة التطبيقات Cloud Natural Language استخراج العناصر من النص وإجراء تحليل للمشاعر والتركيب النحوي وتصنيف النص إلى فئات.
في هذا التمرين المعملي، سنتعلّم كيفية استخدام Natural Language API لتحليل الكيانات والمشاعر والتركيب النحوي.
ما ستتعرّف عليه
- إنشاء طلب بيانات من Natural Language API وإرسال الطلب إلى واجهة برمجة التطبيقات باستخدام curl
- استخراج الكيانات وإجراء تحليل للآراء في النص باستخدام Natural Language API
- إجراء تحليل لغوي على النص باستخدام Natural Language API
- إنشاء طلب Natural Language API بلغة مختلفة
المتطلبات
كيف ستستخدم هذا البرنامج التعليمي؟
ما هو تقييمك لتجربة استخدام Google Cloud Platform؟
إعداد البيئة بالسرعة التي تناسبك
إذا لم يكن لديك حساب على Google (Gmail أو Google Apps)، عليك إنشاء حساب. سجِّل الدخول إلى "وحدة تحكّم Google Cloud Platform" (console.cloud.google.com) وأنشِئ مشروعًا جديدًا:
تذكَّر معرّف المشروع، وهو اسم فريد في جميع مشاريع Google Cloud (الاسم أعلاه مستخدَم حاليًا ولن يكون متاحًا لك، نأسف لذلك). سيتم الإشارة إليه لاحقًا في هذا الدرس العملي باسم PROJECT_ID.
بعد ذلك، عليك تفعيل الفوترة في Cloud Console من أجل استخدام موارد Google Cloud.
لن تكلفك تجربة هذا الدرس البرمجي أكثر من بضعة دولارات، ولكن قد تكون التكلفة أعلى إذا قررت استخدام المزيد من الموارد أو إذا تركتها قيد التشغيل (راجِع قسم "التنظيف" في نهاية هذا المستند).
يمكن للمستخدمين الجدد في Google Cloud Platform الاستفادة من فترة تجريبية مجانية بقيمة 300 دولار أمريكي.
انقر على رمز القائمة في أعلى يمين الشاشة.

اختَر واجهات برمجة التطبيقات والخدمات من القائمة المنسدلة وانقر على "لوحة البيانات".

انقر على تفعيل واجهات برمجة التطبيقات والخدمات.

بعد ذلك، ابحث عن "اللغة" في مربّع البحث. انقر على Google Cloud Natural Language API:

انقر على تفعيل لتفعيل Cloud Natural Language API:

انتظِر بضع ثوانٍ حتى يتم تفعيلها. سيظهر لك ما يلي بعد تفعيلها:

Google Cloud Shell هي بيئة سطر أوامر تعمل في السحابة الإلكترونية. تتضمّن هذه الآلة الافتراضية المستندة إلى Debian جميع أدوات التطوير التي تحتاج إليها (gcloud وbq وgit وغيرها)، كما توفّر دليلًا منزليًا ثابتًا بسعة 5 غيغابايت. سنستخدم Cloud Shell لإنشاء طلبنا إلى Natural Language API.
للبدء في استخدام Cloud Shell، انقر على رمز "تفعيل Google Cloud Shell"
في أعلى يسار شريط العنوان.

يتم فتح جلسة Cloud Shell داخل إطار جديد في أسفل وحدة التحكّم وعرض موجه سطر الأوامر. انتظِر إلى أن يظهر الطلب user@project:~$
بما أنّنا سنستخدم curl لإرسال طلب إلى Natural Language API، علينا إنشاء مفتاح API لتضمينه في عنوان URL للطلب. لإنشاء مفتاح واجهة برمجة تطبيقات، انتقِل إلى قسم "بيانات الاعتماد" في "واجهات برمجة التطبيقات والخدمات" (APIs & services) في Cloud Console:


في القائمة المنسدلة، اختَر مفتاح واجهة برمجة التطبيقات:

بعد ذلك، انسخ المفتاح الذي أنشأته للتو. ستحتاج إلى هذا المفتاح لاحقًا في الدرس التطبيقي.
بعد الحصول على مفتاح واجهة برمجة التطبيقات، احفظه في متغيّر بيئة لتجنُّب إدراج قيمة مفتاح واجهة برمجة التطبيقات في كل طلب. يمكنك إجراء ذلك في Cloud Shell. احرص على استبدال <your_api_key> بالمفتاح الذي نسخته للتو.
export API_KEY=<YOUR_API_KEY>أول طريقة في Natural Language API سنستخدمها هي analyzeEntities. باستخدام هذه الطريقة، يمكن لواجهة برمجة التطبيقات استخراج الكيانات (مثل الأشخاص والأماكن والأحداث) من النص. لتجربة تحليل الكيانات في واجهة برمجة التطبيقات، سنستخدم الجملة التالية:
جوان رولينغ، التي تكتب تحت الاسم المستعار "جاي" ك. رولينغ وروبرت غالبريث، هي روائية وكاتبة سيناريو بريطانية ألّفت سلسلة أفلام الخيال "هاري بوتر".
سننشئ طلبنا إلى Natural Language API في ملف request.json. في بيئة Cloud Shell، أنشئ الملف request.json باستخدام الرمز البرمجي أدناه. يمكنك إنشاء الملف باستخدام أحد محرّرات سطر الأوامر المفضّلة لديك (nano أو vim أو emacs) أو استخدام محرّر Orion المضمّن في Cloud Shell:

request.json
{
"document":{
"type":"PLAIN_TEXT",
"content":"Joanne Rowling, who writes under the pen names J. K. Rowling and Robert Galbraith, is a British novelist and screenwriter who wrote the Harry Potter fantasy series."
},
"encodingType":"UTF8"
}في الطلب، نخبر Natural Language API بالنص الذي سنرسله. قيم النوع المسموح بها هي PLAIN_TEXT أو HTML. في المحتوى، نمرّر النص لإرساله إلى Natural Language API من أجل تحليله. تتيح Natural Language API أيضًا إرسال الملفات المخزّنة في Cloud Storage لمعالجة النصوص. إذا أردنا إرسال ملف من Cloud Storage، سنستبدل content بـ gcsContentUri ونمنحه قيمة عنوان URI لملفنا النصي في Cloud Storage. يُعلم encodingType واجهة برمجة التطبيقات بنوع ترميز النص الذي يجب استخدامه عند معالجة النص. ستستخدم واجهة برمجة التطبيقات هذه المعلومات لتحديد مواضع ظهور كيانات معيّنة في النص.
يمكنك الآن تمرير نص الطلب، بالإضافة إلى متغيّر بيئة مفتاح واجهة برمجة التطبيقات الذي حفظته سابقًا، إلى Natural Language API باستخدام الأمر curl التالي (كل ذلك في سطر أوامر واحد):
curl "https://language.googleapis.com/v1/documents:analyzeEntities?key=${API_KEY}" \
-s -X POST -H "Content-Type: application/json" --data-binary @request.jsonيجب أن تبدو بداية ردّك على النحو التالي:
{
"entities": [
{
"name": "Robert Galbraith",
"type": "PERSON",
"metadata": {
"mid": "/m/042xh",
"wikipedia_url": "https://en.wikipedia.org/wiki/J._K._Rowling"
},
"salience": 0.7980405,
"mentions": [
{
"text": {
"content": "Joanne Rowling",
"beginOffset": 0
},
"type": "PROPER"
},
{
"text": {
"content": "Rowling",
"beginOffset": 53
},
"type": "PROPER"
},
{
"text": {
"content": "novelist",
"beginOffset": 96
},
"type": "COMMON"
},
{
"text": {
"content": "Robert Galbraith",
"beginOffset": 65
},
"type": "PROPER"
}
]
},
...
]
}بالنسبة إلى كل كيان في الرد، نحصل على type الخاص بالكيان، وعنوان URL المرتبط به على Wikipedia إذا كان متوفّرًا، وsalience، ومؤشرات موضع ظهور هذا الكيان في النص. تشير درجة الأهمية إلى رقم في النطاق [0,1] يشير إلى مدى أهمية الكيان بالنسبة إلى النص ككل. يمكن أن تتعرّف Natural Language API أيضًا على العنصر نفسه المذكور بطرق مختلفة. ألقِ نظرة على قائمة mentions في الرد: تستطيع واجهة برمجة التطبيقات أن تحدّد أنّ "جوان رولينغ" و"رولينغ" و"روائي" و "روبرت غالبريث" تشير جميعها إلى الشيء نفسه.
بالإضافة إلى استخراج العناصر، تتيح لك Natural Language API أيضًا إجراء تحليل للمشاعر على جزء من النص. سيتضمّن طلب JSON المَعلمات نفسها الواردة في طلبنا أعلاه، ولكن هذه المرة سنغيّر النص ليشمل عبارة ذات دلالة أقوى. استبدِل ملف request.json بما يلي، ويمكنك استبدال content أدناه بنص من اختيارك:
request.json
{
"document":{
"type":"PLAIN_TEXT",
"content":"Harry Potter is the best book. I think everyone should read it."
},
"encodingType": "UTF8"
}بعد ذلك، سنرسل الطلب إلى نقطة نهاية analyzeSentiment لواجهة برمجة التطبيقات:
curl "https://language.googleapis.com/v1/documents:analyzeSentiment?key=${API_KEY}" \
-s -X POST -H "Content-Type: application/json" --data-binary @request.json
يجب أن تبدو استجابتك على النحو التالي:
{
"documentSentiment": {
"magnitude": 0.8,
"score": 0.4
},
"language": "en",
"sentences": [
{
"text": {
"content": "Harry Potter is the best book.",
"beginOffset": 0
},
"sentiment": {
"magnitude": 0.7,
"score": 0.7
}
},
{
"text": {
"content": "I think everyone should read it.",
"beginOffset": 31
},
"sentiment": {
"magnitude": 0.1,
"score": 0.1
}
}
]
}لاحظ أنّنا نحصل على نوعَين من قيم الآراء: آراء حول المستند ككل، وآراء مقسّمة حسب الجملة. تعرض طريقة "المشاعر" قيمتَين: score وmagnitude. score هو رقم يتراوح بين -1.0 و1.0 يشير إلى مدى إيجابية أو سلبية الجملة. magnitude هو رقم يتراوح بين 0 وما لا نهاية يمثّل أهمية الانطباع المعبر عنه في الجملة، بغض النظر عمّا إذا كان إيجابيًا أو سلبيًا. تحتوي الفقرات النصية الأطول التي تتضمّن عبارات ذات وزن كبير على قيم أكبر. النتيجة للجملة الأولى إيجابية (0.7)، في حين أنّ النتيجة للجملة الثانية محايدة (0.1).
بالإضافة إلى تقديم تفاصيل حول المشاعر في مستند النص الكامل الذي نرسله إلى NL API، يمكنه أيضًا تقسيم المشاعر حسب الكيانات في النص. لنستخدم هذه الجملة كمثال:
أعجبني السوشي، لكنّ الخدمة كانت سيئة.
في هذه الحالة، قد لا يكون الحصول على نتيجة للتحليل المعنوي للجملة بأكملها كما فعلنا أعلاه مفيدًا جدًا. إذا كانت هذه مراجعة لمطعم وكان هناك المئات من المراجعات للمطعم نفسه، نريد أن نعرف بالضبط الأشياء التي أعجبت المستخدمين والأشياء التي لم تعجبهم في مراجعاتهم. لحسن الحظ، تتضمّن واجهة برمجة التطبيقات NL طريقة تتيح لنا الحصول على المشاعر لكل كيان في النص، وهي analyzeEntitySentiment. عدِّل ملف request.json باستخدام الجملة أعلاه لتجربتها:
request.json
{
"document":{
"type":"PLAIN_TEXT",
"content":"I liked the sushi but the service was terrible."
},
"encodingType": "UTF8"
}بعد ذلك، استدعِ نقطة نهاية analyzeEntitySentiment باستخدام أمر curl التالي:
curl "https://language.googleapis.com/v1/documents:analyzeEntitySentiment?key=${API_KEY}" \
-s -X POST -H "Content-Type: application/json" --data-binary @request.json
في الردّ الذي نتلقّاه، نحصل على عنصرَين خاصَّين بالكيان: أحدهما لـ "السوشي" والآخر لـ "الخدمة". في ما يلي استجابة JSON الكاملة:
{
"entities": [
{
"name": "sushi",
"type": "CONSUMER_GOOD",
"metadata": {},
"salience": 0.52716845,
"mentions": [
{
"text": {
"content": "sushi",
"beginOffset": 12
},
"type": "COMMON",
"sentiment": {
"magnitude": 0.9,
"score": 0.9
}
}
],
"sentiment": {
"magnitude": 0.9,
"score": 0.9
}
},
{
"name": "service",
"type": "OTHER",
"metadata": {},
"salience": 0.47283158,
"mentions": [
{
"text": {
"content": "service",
"beginOffset": 26
},
"type": "COMMON",
"sentiment": {
"magnitude": 0.9,
"score": -0.9
}
}
],
"sentiment": {
"magnitude": 0.9,
"score": -0.9
}
}
],
"language": "en"
}
نلاحظ أنّ النتيجة التي تم إرجاعها لكلمة "سوشي" هي 0.9، بينما حصلت كلمة "خدمة" على نتيجة -0.9. رائع! قد تلاحظ أيضًا أنّه يتم عرض كائنَي تحليل مشاعر لكل كيان. إذا تم ذكر أي من هذين المصطلحين أكثر من مرة، ستعرض واجهة برمجة التطبيقات تقييمًا مختلفًا للمشاعر وقيمة مختلفة لكل إشارة، بالإضافة إلى مشاعر مجمّعة للكيان.
بالنظر إلى الطريقة الثالثة في Natural Language API، وهي "التعليق التوضيحي النحوي"، سنتعمّق أكثر في التفاصيل اللغوية للنص. analyzeSyntax هي طريقة تقدّم مجموعة كاملة من التفاصيل حول العناصر الدلالية والنحوية للنص. بالنسبة إلى كل كلمة في النص، ستخبرنا واجهة برمجة التطبيقات بنوع الكلمة (اسم أو فعل أو صفة أو غير ذلك) وكيفية ارتباطها بالكلمات الأخرى في الجملة (هل هي الفعل الأساسي؟ عنصر تعديل؟).
لنجرّبها مع جملة بسيطة. سيكون طلب JSON مشابهًا للطلبات أعلاه، مع إضافة مفتاح "الميزات". سيُعلم ذلك واجهة برمجة التطبيقات بأنّنا نريد تنفيذ التعليق التوضيحي الخاص بالبنية. استبدِل ملف request.json بما يلي:
request.json
{
"document":{
"type":"PLAIN_TEXT",
"content": "Hermione often uses her quick wit, deft recall, and encyclopaedic knowledge to help Harry and Ron."
},
"encodingType": "UTF8"
}بعد ذلك، استدعِ طريقة analyzeSyntax لواجهة برمجة التطبيقات:
curl "https://language.googleapis.com/v1/documents:analyzeSyntax?key=${API_KEY}" \
-s -X POST -H "Content-Type: application/json" --data-binary @request.jsonيجب أن يعرض الردّ عنصرًا مشابهًا للعنصر أدناه لكل رمز مميز في الجملة. في ما يلي، سنلقي نظرة على الردّ الخاص بالكلمة "استخدامات":
{
"text": {
"content": "uses",
"beginOffset": 15
},
"partOfSpeech": {
"tag": "VERB",
"aspect": "ASPECT_UNKNOWN",
"case": "CASE_UNKNOWN",
"form": "FORM_UNKNOWN",
"gender": "GENDER_UNKNOWN",
"mood": "INDICATIVE",
"number": "SINGULAR",
"person": "THIRD",
"proper": "PROPER_UNKNOWN",
"reciprocity": "RECIPROCITY_UNKNOWN",
"tense": "PRESENT",
"voice": "VOICE_UNKNOWN"
},
"dependencyEdge": {
"headTokenIndex": 2,
"label": "ROOT"
},
"lemma": "use"
}لنحلّل الردّ. تزوّدنا السمة partOfSpeech بتفاصيل لغوية عن كل كلمة (الكثير منها غير معروف لأنّها لا تنطبق على اللغة الإنجليزية أو هذه الكلمة المحدّدة). تعرض tag نوع الكلمة، وهو فعل في هذه الحالة. نحصل أيضًا على تفاصيل حول الزمن والأسلوب وما إذا كانت الكلمة مفردة أو جمع. lemma هو الشكل الأساسي للكلمة (بالنسبة إلى كلمة "يستخدم"، يكون الشكل الأساسي هو "استخدام"). على سبيل المثال، الكلمات run وruns وran وrunning لها جميعًا صيغة أساسية واحدة هي run. تكون قيمة اللّمة مفيدة لتتبُّع مرات ظهور كلمة في نص كبير بمرور الوقت.
يتضمّن dependencyEdge بيانات يمكنك استخدامها لإنشاء شجرة تحليل التبعية للنص. هذا رسم بياني يوضّح كيفية ارتباط الكلمات في جملة ببعضها البعض. ستبدو شجرة تحليل التبعية للجملة أعلاه على النحو التالي:

إنّ headTokenIndex في ردّنا أعلاه هو فهرس الرمز المميّز الذي يحتوي على قوس يشير إلى "يستخدم". يمكننا اعتبار كل رمز مميز في الجملة كلمة في مصفوفة، ويشير headTokenIndex بقيمة 2 لكلمة "يستخدم" إلى الكلمة "كثيرًا" المرتبطة بها في الشجرة.
تتيح Natural Language API أيضًا لغات أخرى غير الإنجليزية (القائمة الكاملة هنا). لنجرّب طلب الكيان التالي مع جملة باللغة اليابانية:
request.json
{
"document":{
"type":"PLAIN_TEXT",
"content":"日本のグーグルのオフィスは、東京の六本木ヒルズにあります"
},
"encodingType": "UTF8"
}لاحظ أنّنا لم نحدّد لواجهة برمجة التطبيقات اللغة التي كُتب بها النص، بل يمكنها رصدها تلقائيًا. بعد ذلك، سنرسل الطلب إلى نقطة النهاية analyzeEntities:
curl "https://language.googleapis.com/v1/documents:analyzeEntities?key=${API_KEY}" \
-s -X POST -H "Content-Type: application/json" --data-binary @request.jsonفي ما يلي أول كيانَين في ردّنا:
{
"entities": [
{
"name": "日本",
"type": "LOCATION",
"metadata": {
"mid": "/m/03_3d",
"wikipedia_url": "https://en.wikipedia.org/wiki/Japan"
},
"salience": 0.23854347,
"mentions": [
{
"text": {
"content": "日本",
"beginOffset": 0
},
"type": "PROPER"
}
]
},
{
"name": "グーグル",
"type": "ORGANIZATION",
"metadata": {
"mid": "/m/045c7b",
"wikipedia_url": "https://en.wikipedia.org/wiki/Google"
},
"salience": 0.21155767,
"mentions": [
{
"text": {
"content": "グーグル",
"beginOffset": 9
},
"type": "PROPER"
}
]
},
...
]
"language": "ja"
}تستخرج واجهة برمجة التطبيقات اليابان كموقع جغرافي وGoogle كمؤسسة، بالإضافة إلى صفحات ويكيبيديا لكل منهما.
تعرّفت على كيفية إجراء تحليل للنصوص باستخدام Cloud Natural Language API من خلال استخراج الكيانات وتحليل المشاعر وإضافة تعليقات توضيحية للتركيب النحوي.
المواضيع التي تناولناها
- إنشاء طلب بيانات من Natural Language API وإرسال الطلب إلى واجهة برمجة التطبيقات باستخدام curl
- استخراج الكيانات وإجراء تحليل للآراء في النص باستخدام Natural Language API
- إجراء تحليل لغوي على النص لإنشاء أشجار تحليل التبعية
- إنشاء طلب Natural Language API باللغة اليابانية
الخطوات التالية
- يمكنك الاطّلاع على البرامج التعليمية الخاصة بـ Natural Language API في المستندات.
- جرِّب Vision API وSpeech API.