Google Cloud Natural Language API ব্যবহার করে প্রতিক্রিয়ার অনুভূতি বিশ্লেষণ করুন

কোডিং স্তর : মধ্যবর্তী
সময়কাল : ২০ মিনিট
প্রকল্পের ধরণ : একটি কাস্টম মেনু সহ অটোমেশন

উদ্দেশ্য

  • সমাধানটি কী করে তা বুঝুন।
  • সমাধানের মধ্যে অ্যাপস স্ক্রিপ্ট পরিষেবাগুলি কী করে তা বুঝুন।
  • তোমার পরিবেশ ঠিক করো।
  • স্ক্রিপ্ট সেট আপ করুন।
  • স্ক্রিপ্টটি চালান।

এই সমাধান সম্পর্কে

আপনি টেক্সট ডেটা, যেমন ওপেন-এন্ডেড ফিডব্যাক, স্কেলে বিশ্লেষণ করতে পারেন। Google Sheets থেকে সত্তা এবং অনুভূতি বিশ্লেষণ করতে, এই সমাধানটি Google Cloud Natural Language API এর সাথে সংযোগ স্থাপনের জন্য UrlFetch পরিষেবা ব্যবহার করে।

অনুভূতি বিশ্লেষণ কীভাবে কাজ করে তার চিত্র

কিভাবে এটা কাজ করে

স্ক্রিপ্টটি স্প্রেডশিট থেকে টেক্সট সংগ্রহ করে এবং স্ট্রিংয়ে উপস্থিত এন্টিটি এবং সেন্টিমেন্ট বিশ্লেষণ করার জন্য গুগল ক্লাউড ন্যাচারাল ল্যাঙ্গুয়েজ এপিআই-এর সাথে সংযোগ স্থাপন করে। একটি পিভট টেবিল টেক্সট ডেটার সমস্ত সারি জুড়ে উল্লিখিত প্রতিটি এন্টিটির গড় সেন্টিমেন্ট স্কোরের সারসংক্ষেপ করে।

অ্যাপস স্ক্রিপ্ট পরিষেবা

এই সমাধানটি নিম্নলিখিত পরিষেবাগুলি ব্যবহার করে:

  • স্প্রেডশিট পরিষেবা - গুগল ক্লাউড ন্যাচারাল ল্যাঙ্গুয়েজ এপিআই-তে টেক্সট ডেটা পাঠায় এবং প্রতিটি সারিকে "সম্পূর্ণ" হিসেবে চিহ্নিত করে, একবার এর অনুভূতি বিশ্লেষণ করা হয়ে গেলে।
  • UrlFetch পরিষেবা – টেক্সটের সত্তা এবং অনুভূতি বিশ্লেষণ করতে Google Cloud Natural Language API-এর সাথে সংযোগ স্থাপন করে।

পূর্বশর্ত

এই নমুনাটি ব্যবহার করার জন্য, আপনার নিম্নলিখিত পূর্বশর্তগুলি প্রয়োজন:

  • একটি Google অ্যাকাউন্ট (Google Workspace অ্যাকাউন্টের জন্য প্রশাসকের অনুমোদনের প্রয়োজন হতে পারে)।
  • ইন্টারনেট অ্যাক্সেস সহ একটি ওয়েব ব্রাউজার।

  • একটি গুগল ক্লাউড প্রকল্প যার সাথে একটি সম্পর্কিত বিলিং অ্যাকাউন্ট রয়েছে। একটি প্রকল্পের জন্য বিলিং সক্ষম করুন দেখুন।

আপনার পরিবেশ সেট আপ করুন

গুগল ক্লাউড কনসোলে আপনার ক্লাউড প্রোজেক্ট খুলুন।

যদি এটি ইতিমধ্যে খোলা না থাকে, তাহলে এই নমুনার জন্য আপনি যে ক্লাউড প্রকল্পটি ব্যবহার করতে চান তা খুলুন:

  1. গুগল ক্লাউড কনসোলে, একটি প্রকল্প নির্বাচন করুন পৃষ্ঠায় যান।

    একটি ক্লাউড প্রকল্প নির্বাচন করুন

  2. আপনি যে Google Cloud প্রকল্পটি ব্যবহার করতে চান তা নির্বাচন করুন। অথবা, প্রকল্প তৈরি করুন ক্লিক করুন এবং অন-স্ক্রীন নির্দেশাবলী অনুসরণ করুন। আপনি যদি একটি Google Cloud প্রকল্প তৈরি করেন, তাহলে আপনাকে প্রকল্পের জন্য বিলিং চালু করতে হতে পারে।

গুগল ক্লাউড ন্যাচারাল ল্যাঙ্গুয়েজ এপিআই চালু করুন

এই সমাধানটি গুগল ক্লাউড ন্যাচারাল ল্যাঙ্গুয়েজ এপিআই-এর সাথে সংযুক্ত। গুগল এপিআই ব্যবহার করার আগে, আপনাকে একটি গুগল ক্লাউড প্রজেক্টে সেগুলি চালু করতে হবে। আপনি একটি একক গুগল ক্লাউড প্রজেক্টে এক বা একাধিক এপিআই চালু করতে পারেন।

  • আপনার ক্লাউড প্রজেক্টে, গুগল ক্লাউড ন্যাচারাল ল্যাঙ্গুয়েজ এপিআই চালু করুন।

    API চালু করুন

এই সমাধানের জন্য একটি কনফিগার করা সম্মতি স্ক্রিন সহ একটি ক্লাউড প্রোজেক্ট প্রয়োজন। OAuth সম্মতি স্ক্রিন কনফিগার করার মাধ্যমে Google ব্যবহারকারীদের কাছে কী প্রদর্শন করবে তা নির্ধারণ করা হয় এবং আপনার অ্যাপটি নিবন্ধিত করে যাতে আপনি পরে এটি প্রকাশ করতে পারেন।

  1. গুগল ক্লাউড কনসোলে, মেনু > এ যানGoogle Auth platform > ব্র্যান্ডিং

    ব্র্যান্ডিং-এ যান

  2. যদি আপনি ইতিমধ্যেই কনফিগার করে থাকেন Google Auth platform, আপনি ব্র্যান্ডিং , অডিয়েন্স এবং ডেটা অ্যাক্সেসে নিম্নলিখিত OAuth কনসেন্ট স্ক্রিন সেটিংস কনফিগার করতে পারেন। যদি আপনি এমন একটি বার্তা দেখতে পান যা বলে Google Auth platform এখনও কনফিগার করা হয়নি , শুরু করুন ক্লিক করুন:
    1. অ্যাপ তথ্য এর অধীনে, অ্যাপের নামে , অ্যাপটির জন্য একটি নাম লিখুন।
    2. ব্যবহারকারীর সহায়তা ইমেল বিভাগে, এমন একটি সহায়তা ইমেল ঠিকানা বেছে নিন যেখানে ব্যবহারকারীদের সম্মতি সম্পর্কে প্রশ্ন থাকলে তারা আপনার সাথে যোগাযোগ করতে পারবেন।
    3. পরবর্তী ক্লিক করুন।
    4. অডিয়েন্স এর অধীনে, অভ্যন্তরীণ নির্বাচন করুন।
    5. পরবর্তী ক্লিক করুন।
    6. যোগাযোগের তথ্য এর অধীনে, একটি ইমেল ঠিকানা লিখুন যেখানে আপনার প্রকল্পের যেকোনো পরিবর্তন সম্পর্কে আপনাকে অবহিত করা যেতে পারে।
    7. পরবর্তী ক্লিক করুন।
    8. Finish এর অধীনে, Google API পরিষেবা ব্যবহারকারীর ডেটা নীতি পর্যালোচনা করুন এবং যদি আপনি সম্মত হন, তাহলে আমি Google API পরিষেবাগুলিতে সম্মত: ব্যবহারকারীর ডেটা নীতি নির্বাচন করুন।
    9. চালিয়ে যান ক্লিক করুন।
    10. তৈরি করুন ক্লিক করুন।
  3. আপাতত, আপনি স্কোপ যোগ করা এড়িয়ে যেতে পারেন। ভবিষ্যতে, যখন আপনি আপনার Google Workspace সংস্থার বাইরে ব্যবহারের জন্য একটি অ্যাপ তৈরি করবেন, তখন আপনাকে ব্যবহারকারীর ধরণটি External এ পরিবর্তন করতে হবে। তারপর আপনার অ্যাপের জন্য প্রয়োজনীয় অনুমোদনের স্কোপগুলি যোগ করুন। আরও জানতে, সম্পূর্ণ Configure OAuth সম্মতি নির্দেশিকাটি দেখুন।

গুগল ক্লাউড ন্যাচারাল ল্যাঙ্গুয়েজ এপিআই-এর জন্য একটি এপিআই কী পান

  1. গুগল ক্লাউড কনসোলে যান। নিশ্চিত করুন যে আপনার বিলিং-সক্ষম প্রকল্পটি খোলা আছে।
  2. গুগল ক্লাউড কনসোলে, মেনু > API এবং পরিষেবা > শংসাপত্রগুলিতে যান।

    শংসাপত্রগুলিতে যান

  3. ক্রেডেনশিয়াল তৈরি করুন > API কী ক্লিক করুন।

  4. পরবর্তী ধাপে ব্যবহারের জন্য আপনার API কীটি নোট করুন।

স্ক্রিপ্ট সেট আপ করুন

অ্যাপস স্ক্রিপ্ট প্রজেক্ট তৈরি করুন

  1. প্রতিক্রিয়া নমুনা স্প্রেডশিটের জন্য সেন্টিমেন্ট বিশ্লেষণের একটি কপি তৈরি করতে নীচের বোতামে ক্লিক করুন। এই সমাধানের জন্য অ্যাপস স্ক্রিপ্ট প্রকল্পটি স্প্রেডশিটের সাথে সংযুক্ত করা হয়েছে।
    একটি কপি তৈরি করুন
  2. এক্সটেনশন > অ্যাপস স্ক্রিপ্ট ক্লিক করুন।
  3. আপনার API কী দিয়ে স্ক্রিপ্ট ফাইলে নিম্নলিখিত ভেরিয়েবলটি আপডেট করুন:
    const myApiKey = 'YOUR_API_KEY'; // Replace with your API key.
  4. সংরক্ষণ করুন ক্লিক করুন সংরক্ষণ আইকন .

টেক্সট ডেটা যোগ করুন

  1. স্প্রেডশিটে ফিরে যান।
  2. আইডি এবং মন্তব্য কলামে টেক্সট ডেটা যোগ করুন। আপনি Kaggle থেকে নমুনা অবকাশ সম্পত্তি পর্যালোচনা ব্যবহার করতে পারেন অথবা আপনার নিজস্ব ডেটা ব্যবহার করতে পারেন। প্রয়োজনে আপনি আরও কলাম যোগ করতে পারেন, তবে সফলভাবে চালানোর জন্য, স্ক্রিপ্টটিতে আইডি এবং মন্তব্য কলামে ডেটা থাকতে হবে।

স্ক্রিপ্টটি চালান

  1. স্প্রেডশিটের উপরে, Sentiment Tools > Mark entities and sentiment এ ক্লিক করুন। এই কাস্টম মেনুটি প্রদর্শিত হওয়ার জন্য আপনাকে পৃষ্ঠাটি রিফ্রেশ করতে হতে পারে।
  2. অনুরোধ করা হলে, স্ক্রিপ্টটি অনুমোদন করুন। যদি OAuth সম্মতি স্ক্রিনে "This app is not verified" সতর্কতা প্রদর্শিত হয়, তাহলে Advanced > Go to {Project Name} (unsafe) নির্বাচন করে এগিয়ে যান।

  3. সেন্টিমেন্ট টুলস > আবার এন্টিটি এবং সেন্টিমেন্ট চিহ্নিত করুন- এ ক্লিক করুন।

  4. স্ক্রিপ্টটি শেষ হয়ে গেলে, ফলাফল দেখতে পিভট টেবিল শীটে যান।

কোডটি পর্যালোচনা করুন

এই সমাধানের জন্য অ্যাপস স্ক্রিপ্ট কোড পর্যালোচনা করতে, নীচের " সোর্স কোড দেখুন " এ ক্লিক করুন:

সোর্স কোড দেখুন

কোড.জিএস

সমাধান/অটোমেশন/প্রতিক্রিয়া-অনুভূতি-বিশ্লেষণ/code.js
// To learn how to use this script, refer to the documentation:
// https://developers.google.com/apps-script/samples/automations/feedback-sentiment-analysis

/*
Copyright 2022 Google LLC

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/

// Sets API key for accessing Cloud Natural Language API.
const myApiKey = "YOUR_API_KEY"; // Replace with your API key.

// Matches column names in Review Data sheet to variables.
const COLUMN_NAME = {
  COMMENTS: "comments",
  ENTITY: "entity_sentiment",
  ID: "id",
};

/**
 * Creates a Demo menu in Google Spreadsheets.
 */
function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu("Sentiment Tools")
    .addItem("Mark entities and sentiment", "markEntitySentiment")
    .addToUi();
}

/**
 * Analyzes entities and sentiment for each comment in
 * Review Data sheet and copies results into the
 * Entity Sentiment Data sheet.
 */
function markEntitySentiment() {
  // Sets variables for "Review Data" sheet
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const dataSheet = ss.getSheetByName("Review Data");
  const rows = dataSheet.getDataRange();
  const numRows = rows.getNumRows();
  const values = rows.getValues();
  const headerRow = values[0];

  // Checks to see if "Entity Sentiment Data" sheet is present, and
  // if not, creates a new sheet and sets the header row.
  const entitySheet = ss.getSheetByName("Entity Sentiment Data");
  if (entitySheet == null) {
    ss.insertSheet("Entity Sentiment Data");
    const entitySheet = ss.getSheetByName("Entity Sentiment Data");
    const esHeaderRange = entitySheet.getRange(1, 1, 1, 6);
    const esHeader = [
      [
        "Review ID",
        "Entity",
        "Salience",
        "Sentiment Score",
        "Sentiment Magnitude",
        "Number of mentions",
      ],
    ];
    esHeaderRange.setValues(esHeader);
  }

  // Finds the column index for comments, language_detected,
  // and comments_english columns.
  const textColumnIdx = headerRow.indexOf(COLUMN_NAME.COMMENTS);
  const entityColumnIdx = headerRow.indexOf(COLUMN_NAME.ENTITY);
  const idColumnIdx = headerRow.indexOf(COLUMN_NAME.ID);
  if (entityColumnIdx === -1) {
    Browser.msgBox(
      `Error: Could not find the column named ${COLUMN_NAME.ENTITY}. Please create an empty column with header "entity_sentiment" on the Review Data tab.`,
    );
    return; // bail
  }

  ss.toast("Analyzing entities and sentiment...");
  for (let i = 0; i < numRows; ++i) {
    const value = values[i];
    const commentEnCellVal = value[textColumnIdx];
    const entityCellVal = value[entityColumnIdx];
    const reviewId = value[idColumnIdx];

    // Calls retrieveEntitySentiment function for each row that has a comment
    // and also an empty entity_sentiment cell value.
    if (commentEnCellVal && !entityCellVal) {
      const nlData = retrieveEntitySentiment(commentEnCellVal);
      // Pastes each entity and sentiment score into Entity Sentiment Data sheet.
      const newValues = [];
      for (let entity in nlData.entities) {
        entity = nlData.entities[entity];
        const row = [
          reviewId,
          entity.name,
          entity.salience,
          entity.sentiment.score,
          entity.sentiment.magnitude,
          entity.mentions.length,
        ];
        newValues.push(row);
      }
      if (newValues.length) {
        entitySheet
          .getRange(
            entitySheet.getLastRow() + 1,
            1,
            newValues.length,
            newValues[0].length,
          )
          .setValues(newValues);
      }
      // Pastes "complete" into entity_sentiment column to denote completion of NL API call.
      dataSheet.getRange(i + 1, entityColumnIdx + 1).setValue("complete");
    }
  }
}

/**
 * Calls the Cloud Natural Language API with a string of text to analyze
 * entities and sentiment present in the string.
 * @param {String} the string for entity sentiment analysis
 * @return {Object} the entities and related sentiment present in the string
 */
function retrieveEntitySentiment(line) {
  const apiKey = myApiKey;
  const apiEndpoint = `https://language.googleapis.com/v1/documents:analyzeEntitySentiment?key=${apiKey}`;
  // Creates a JSON request, with text string, language, type and encoding
  const nlData = {
    document: {
      language: "en-us",
      type: "PLAIN_TEXT",
      content: line,
    },
    encodingType: "UTF8",
  };
  // Packages all of the options and the data together for the API call.
  const nlOptions = {
    method: "post",
    contentType: "application/json",
    payload: JSON.stringify(nlData),
  };
  // Makes the API call.
  const response = UrlFetchApp.fetch(apiEndpoint, nlOptions);
  return JSON.parse(response);
}

অবদানকারীরা

এই নমুনাটি গুগল ডেভেলপার বিশেষজ্ঞদের সহায়তায় গুগল দ্বারা রক্ষণাবেক্ষণ করা হয়।

পরবর্তী পদক্ষেপ