تحليل الكيان والمشاعر والبنية باستخدام واجهة برمجة تطبيقات Cloud Natural Language API

تتيح لك واجهة برمجة تطبيقات Cloud Natural Language إمكانية استخراج الكيانات من النص وإجراء تحليل الآراء والبنية النحوية وتصنيف النص في فئات.

في هذا الدرس التطبيقي، سنتعرّف على كيفية استخدام واجهة برمجة التطبيقات للغة الطبيعية لتحليل الكيانات والآراء والبنية.

ما ستتعرّف عليه

  • إنشاء طلب Natural Language API واستدعاء واجهة برمجة التطبيقات باستخدام curl
  • استخراج الكيانات وإجراء تحليل الآراء حول النص باستخدام واجهة برمجة تطبيقات اللغات الطبيعية
  • إجراء تحليل لغوي بشأن النص باستخدام واجهة برمجة التطبيقات للغة الطبيعية
  • إنشاء طلب واجهة برمجة تطبيقات للغة الطبيعية بلغة مختلفة

ما متطلباتك

  • مشروع Google Cloud Platform
  • متصفح، مثل Chrome أو Firefox

كيف ستستخدم هذا البرنامج التعليمي؟

قراءة القراءة فقط قراءة القراءة وإكمال التدريبات

كيف تقيِّم تجربتك مع Google Cloud Platform؟

مبتدئ متوسط محترف

إعداد البيئة الذاتية

إذا لم يكن لديك حساب على Google (Gmail أو Google Apps)، يجب إنشاء حساب. تسجيل الدخول إلى وحدة تحكُّم Google Cloud Platform (console.cloud.google.com) وإنشاء مشروع جديد:

لقطة شاشة من 2016-02-10 الساعة 12:45:26.png

عذرًا! وسيُشار إليه لاحقًا في هذا الدرس التطبيقي بعنوان PROJECT_ID.

بعد ذلك، ستحتاج إلى تفعيل الفوترة في Cloud Console لاستخدام موارد Google Cloud.

من المفترض ألا يكلفك العمل على هذا الدرس التطبيقي أكثر من بضعة دولارات، ولكن قد يترتّب عليك أكثر إذا قررت استخدام المزيد من الموارد أو إذا تركتها قيد التشغيل (راجع قسم "عرض الأسعار التقديري" في نهاية هذا المستند).

يكون المستخدمون الجدد لخدمة Google Cloud Platform مؤهَّلين للاستفادة من فترة تجريبية مجانية تبلغ 300 دولار أمريكي.

انقر على رمز القائمة في أعلى يمين الشاشة.

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

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

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

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

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

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

لبدء استخدام Cloud Shell، انقر على الرمز &quot؛تفعيل Google Cloud Shell" لقطة شاشة يوم 2015-06-08 الساعة 5.30.32 مساءً.png في أعلى يسار شريط العناوين.

يتم فتح جلسة Cloud Shell داخل إطار جديد في أسفل وحدة التحكّم وتعرض رسالة سطر أوامر. انتظر حتى يظهر user@project:~$ رسالة مطالبة

بما أننا سنستخدم عنوان URL لإرسال طلب البيانات إلى واجهة برمجة تطبيقات اللغات الطبيعية، سنحتاج إلى إنشاء مفتاح واجهة برمجة تطبيقات لإدخال عنوان URL الخاص بطلبنا. لإنشاء مفتاح واجهة برمجة تطبيقات، انتقِل إلى قسم "بيانات الاعتماد" في واجهات برمجة التطبيقات (API) والخدمات في Cloud Console:

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

بعد ذلك، انسخ المفتاح الذي أنشأته للتو. ستحتاج إلى هذا المفتاح لاحقًا في الدرس التطبيقي.

الآن وبعد أن حصلت على مفتاح واجهة برمجة التطبيقات، احفظه في متغيّر بيئة لتجنُّب الحاجة إلى إدراج قيمة مفتاح واجهة برمجة التطبيقات في كل طلب. ويمكنك إجراء ذلك في Cloud Shell. تأكد من استبدال <your_api_key> بالمفتاح الذي نسخته للتو.

export API_KEY=<YOUR_API_KEY>

أول طريقة واجهة برمجة تطبيقات للغة الطبيعية التي سنستخدمها هي analyzeEntities. باستخدام هذه الطريقة، يمكن أن تستخرج واجهة برمجة التطبيقات الكيانات (مثل الأشخاص والأماكن والأحداث) من النص. لتجربة تحليل كيان واجهة برمجة التطبيقات، سنستخدم الجملة التالية:

"جون رولينغ"، التي تكتب ضمن أسماء القلم "جي". كاي رولينغ وروبرت غالبرايث، روائي وكاتب بريطاني من تأليف هاري بوتر.

سننشئ طلبنا من واجهة برمجة التطبيقات للغة الطبيعية في ملف 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"
}

وفي الطلب، نخبر واجهة برمجة التطبيقات للغة الطبيعية عن النص الذي سنرسله. قيم النوع المسموح بها هي 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 المرتبط بويكيبيديا في حال توفّر واحد، وهو salience، وفهارس الأماكن التي ظهر فيها هذا الكيان في النص. "الصالة" هي رقم في نطاق [0,1] يشير إلى مركز الكيان في النص ككل. يمكن أيضًا لواجهة برمجة تطبيقات Natural Language التعرّف على الكيان نفسه المذكور بطرق مختلفة. اطّلِع على قائمة mentions في الردّ: تستطيع واجهة برمجة التطبيقات معرفة أنّ "جوان رولينغ&&;&&;;raling"&&&;vevelist" &"روبرت غابريث" تشير كلها إلى نفس الأمر.

بالإضافة إلى استخراج الكيانات، تتيح لك واجهة برمجة التطبيقات 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

نردّ في ردّنا على جهازَين، أحدهما لـ "سوشي&&;؛ والآخر لـ"service;" في ما يلي استجابة 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"
}

ونلاحظ أنّ النتيجة التي نتجت عن "سوشي&quot؛ كانت 0.9، بينما حصلت النتيجة "service" على -0.9. رائع! قد تلاحظ أيضًا أنّ هناك عنصرَين من الآراء التي تم عرضها لكل كيان. إذا تمت الإشارة إلى إحدى هاتين العبارتين أكثر من مرة، ستعرض واجهة برمجة التطبيقات نتيجة مختلفة للدلالة وحجمها لكل إشارة، بالإضافة إلى الآراء المجمّعة للكيان.

بالنظر إلى الطريقة الثالثة في واجهة برمجة تطبيقات اللغات الطبيعية - التعليق التوضيحي للبنية - سنتعرّف بالتفصيل على التفاصيل اللغوية للنص. 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

يجب أن تعرض الاستجابة كائنًا مثل العنصر الوارد أدناه لكل رمز مميز في الجملة. سنتعرّف هنا على الردّ على الكلمة &quotsuses":

{
  "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 هي الصيغة الأساسية للكلمة (لـ "uses" it's "use"). على سبيل المثال، تشمل الكلمات run وruns وrun وrun جميعًا كلمة run. قيمة الليما مفيدة لتتبع تكرار الكلمة في جزء كبير من النص بمرور الوقت.

يتضمن dependencyEdge البيانات التي يمكنك استخدامها لإنشاء شجرة تحليل التبعية للنص. هذا رسم بياني يوضّح مدى ارتباط الكلمات في الجملة ببعضها البعض. ستظهر شجرة الاعتمادية للجملة أعلاه على النحو التالي:

headTokenIndex في ردّنا أعلاه هي فهرس الرمز المميّز الذي يحتوي على قوس يشير إلى "uses". يمكننا اعتبار كل رمز مميز في الجملة ككلمة في مصفوفة، ويشير headTokenIndex من 2 إلى &"uses" إلى الكلمة "غالبًا&&;; المرتبطة بها في الشجرة.

تتوافق واجهة برمجة التطبيقات 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 كمؤسسة، إلى جانب صفحات Wikipedia لكل منها.

لقد تعلّمت كيفية إجراء تحليل نصي باستخدام واجهة برمجة التطبيقات لخدمة Cloud Natural Language من خلال استخراج الكيانات، وتحليل العواطف، وإضافة تعليقات توضيحية في البنية.

المواضيع التي تناولناها

  • إنشاء طلب Natural Language API واستدعاء واجهة برمجة التطبيقات باستخدام curl
  • استخراج الكيانات وإجراء تحليل الآراء حول النص باستخدام واجهة برمجة تطبيقات اللغات الطبيعية
  • إجراء تحليل لغوي على النص لإنشاء أشجار اعتمادية
  • إنشاء طلب واجهة برمجة تطبيقات للغة الطبيعية باللغة اليابانية

الخطوات التالية