একটি API এর সাথে সংযোগ করুন: প্রতিক্রিয়া অনুভূতি বিশ্লেষণ করুন

কোডিং লেভেল : ইন্টারমিডিয়েট
সময়কাল : 20 মিনিট
প্রকল্পের ধরন : একটি কাস্টম মেনু সহ অটোমেশন

উদ্দেশ্য

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

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

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

সেন্টিমেন্ট বিশ্লেষণ কিভাবে কাজ করে তার চিত্র

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

স্ক্রিপ্টটি স্প্রেডশীট থেকে পাঠ্য সংগ্রহ করে এবং স্ট্রিংটিতে উপস্থিত সত্তা এবং অনুভূতি বিশ্লেষণ করতে Google ক্লাউড ন্যাচারাল ল্যাঙ্গুয়েজ API-এর সাথে সংযোগ করে৷ একটি পিভট টেবিল টেক্সট ডেটার সমস্ত সারি জুড়ে উল্লিখিত প্রতিটি সত্তার জন্য গড় সেন্টিমেন্ট স্কোর সংক্ষিপ্ত করে।

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

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

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

পূর্বশর্ত

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

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

  • একটি সংশ্লিষ্ট বিলিং অ্যাকাউন্ট সহ একটি Google ক্লাউড প্রকল্প৷ একটি প্রকল্পের জন্য বিলিং সক্ষম করুন দেখুন।

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

Google ক্লাউড কনসোলে আপনার ক্লাউড প্রকল্প খুলুন

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

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

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

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

Google Cloud Natural Language API চালু করুন

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

  • আপনার ক্লাউড প্রকল্পে, Google ক্লাউড ন্যাচারাল ল্যাঙ্গুয়েজ API চালু করুন।

    API চালু করুন

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

  1. Google ক্লাউড কনসোলে, মেনু > API এবং পরিষেবা > OAuth সম্মতি স্ক্রীনে যান।

    OAuth সম্মতি স্ক্রিনে যান

  2. ব্যবহারকারীর প্রকারের জন্য অভ্যন্তরীণ নির্বাচন করুন, তারপরে তৈরি করুন ক্লিক করুন।
  3. অ্যাপ রেজিস্ট্রেশন ফর্মটি পূরণ করুন, তারপর সংরক্ষণ করুন এবং চালিয়ে যান-এ ক্লিক করুন।
  4. আপাতত, আপনি স্কোপ যোগ করা এড়িয়ে যেতে পারেন এবং সেভ এবং কন্টিনিউ এ ক্লিক করতে পারেন। ভবিষ্যতে, যখন আপনি আপনার Google Workspace সংস্থার বাইরে ব্যবহারের জন্য একটি অ্যাপ তৈরি করবেন, তখন আপনাকে অবশ্যই ব্যবহারকারীর ধরন পরিবর্তন করে External তে পরিবর্তন করতে হবে এবং তারপরে, আপনার অ্যাপের প্রয়োজনীয় অনুমোদনের সুযোগ যোগ করতে হবে।

  5. আপনার অ্যাপ নিবন্ধন সারাংশ পর্যালোচনা করুন. পরিবর্তন করতে, সম্পাদনা ক্লিক করুন। অ্যাপ নিবন্ধন ঠিক আছে বলে মনে হলে, ড্যাশবোর্ডে ফিরে যান ক্লিক করুন।

Google Cloud Natural Language API-এর জন্য একটি API কী পান৷

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

    শংসাপত্রে যান

  3. শংসাপত্র তৈরি করুন > API কী ক্লিক করুন।

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

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

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

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

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

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

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

  1. স্প্রেডশীটের শীর্ষে, সেন্টিমেন্ট টুলস > সত্তা এবং সেন্টিমেন্ট চিহ্নিত করুন ক্লিক করুন। এই কাস্টম মেনু প্রদর্শিত হওয়ার জন্য আপনাকে পৃষ্ঠাটি রিফ্রেশ করতে হতে পারে।
  2. অনুরোধ করা হলে, স্ক্রিপ্ট অনুমোদন করুন. যদি OAuth সম্মতি স্ক্রীন সতর্কতা প্রদর্শন করে, এই অ্যাপটি যাচাই করা হয়নি , তাহলে Advanced > Go to {Project Name} (অনিরাপদ) নির্বাচন করে চালিয়ে যান।

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

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

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

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

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

Code.gs

solutions/automations/feedback-sentiment-analysis/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.
let 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
  let ss = SpreadsheetApp.getActiveSpreadsheet();
  let dataSheet = ss.getSheetByName('Review Data');
  let rows = dataSheet.getDataRange();
  let numRows = rows.getNumRows();
  let values = rows.getValues();
  let 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.
  let entitySheet = ss.getSheetByName('Entity Sentiment Data');
  if (entitySheet == null) {
   ss.insertSheet('Entity Sentiment Data');
   let entitySheet = ss.getSheetByName('Entity Sentiment Data');
   let esHeaderRange = entitySheet.getRange(1,1,1,6);
   let 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.
  let textColumnIdx = headerRow.indexOf(COLUMN_NAME.COMMENTS);
  let entityColumnIdx = headerRow.indexOf(COLUMN_NAME.ENTITY);
  let 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) {
    let value = values[i];
    let commentEnCellVal = value[textColumnIdx];
    let entityCellVal = value[entityColumnIdx];
    let reviewId = value[idColumnIdx];

    // Calls retrieveEntitySentiment function for each row that has a comment 
    // and also an empty entity_sentiment cell value.
    if(commentEnCellVal && !entityCellVal) {
        let nlData = retrieveEntitySentiment(commentEnCellVal);
        // Pastes each entity and sentiment score into Entity Sentiment Data sheet.
        let newValues = []
        for (let entity in nlData.entities) {
          entity = nlData.entities [entity];
          let 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) {
  let apiKey = myApiKey;
  let apiEndpoint = 'https://language.googleapis.com/v1/documents:analyzeEntitySentiment?key=' + apiKey;
  // Creates a JSON request, with text string, language, type and encoding
  let 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.
  let nlOptions = {
    method : 'post',
    contentType: 'application/json',  
    payload : JSON.stringify(nlData)
  };
  // Makes the API call.
  let response = UrlFetchApp.fetch(apiEndpoint, nlOptions);
  return JSON.parse(response);
};

অবদানকারী

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

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