API'ye bağlanma: Geri bildirim yaklaşımını analiz etme

Kodlama seviyesi: Orta
Süre: 20 dakika
Proje türü: Özel menü olan otomasyon

Hedefler

  • Çözümün ne işe yaradığını anlayın.
  • Apps Komut Dosyası hizmetlerinin çözüm kapsamında neler yaptığını anlayın.
  • Ortamınızı ayarlayın.
  • Komut dosyasını ayarlayın.
  • Komut dosyasını çalıştırın.

Bu çözüm hakkında

Açık uçlu geri bildirim gibi metin verilerini geniş ölçekte analiz edebilirsiniz. Bu çözüm, Google E-Tablolar'dan varlık ve yaklaşım analizi gerçekleştirmek için UrlFetch Service'i kullanarak Google Cloud Natural Language API'ye bağlanır.

yaklaşım analizinin nasıl çalıştığını gösteren diyagram

İşleyiş şekli

Komut dosyası, e-tablodan metin toplar ve dizede bulunan varlıkları ve duyguyu analiz etmek için Google Cloud Natural Language API'ye bağlanır. Pivot tablo, tüm metin verisi satırlarında bahsedilen her bir varlığın ortalama yaklaşım puanını özetler.

Apps Komut Dosyası hizmetleri

Bu çözüm aşağıdaki hizmetleri kullanır:

  • E-tablo hizmeti - Metin verilerini Google Cloud Natural Language API'ye gönderir ve bildirimi analiz edildikten sonra her satırı "Tamamlandı" olarak işaretler.
  • UrlFetch hizmeti - Metin üzerinde varlık ve yaklaşım analizi gerçekleştirmek için Google Cloud Natural Language API'ye bağlanır.

Ön koşullar

Bu örneği kullanmak için aşağıdaki önkoşullara ihtiyacınız vardır:

  • Google Hesabı (Google Workspace hesapları için yönetici onayı gerekebilir).
  • İnternete erişimi olan bir web tarayıcısı.

  • İlişkilendirilmiş bir faturalandırma hesabı olan bir Google Cloud projesi. Proje için faturalandırmayı etkinleştirme başlıklı makaleyi inceleyin.

Ortamınızı ayarlama

Google Cloud Console'da Cloud projenizi açma

Henüz açık değilse bu örnek için kullanmayı düşündüğünüz Cloud projesini açın:

  1. Google Cloud konsolunda Proje seçin sayfasına gidin.

    Bir Cloud projesi seçin

  2. Kullanmak istediğiniz Google Cloud projesini seçin. Alternatif olarak Proje oluştur'u tıklayıp ekrandaki talimatları da uygulayabilirsiniz. Bir Google Cloud projesi oluşturursanız proje için faturalandırmayı etkinleştirmeniz gerekebilir.

Google Cloud Natural Language API'yi açma

Bu çözüm Google Cloud Natural Language API'ye bağlanır. Google API'lerini kullanmadan önce bunları bir Google Cloud projesinde etkinleştirmeniz gerekir. Tek bir Google Cloud projesinde bir veya daha fazla API etkinleştirebilirsiniz.

Bu çözüm, yapılandırılmış bir izin ekranına sahip bir Cloud projesi gerektirir. OAuth izin ekranının yapılandırılması, Google'ın kullanıcılara neleri göstereceğini tanımlar ve uygulamanızı daha sonra yayınlayabilmeniz için kaydeder.

  1. Google Cloud konsolunda Menü > API'ler ve Hizmetler > OAuth izin ekranı'na gidin.

    OAuth izin ekranına gidin

  2. Kullanıcı türü için Dahili'yi seçin ve Oluştur'u tıklayın.
  3. Uygulama kayıt formunu doldurun, ardından Kaydet ve Devam Et'i tıklayın.
  4. Şimdilik kapsam eklemeyi atlayıp Kaydet ve Devam Et'i tıklayabilirsiniz. Gelecekte Google Workspace kuruluşunuzun dışında kullanmak için bir uygulama oluşturduğunuzda Kullanıcı türü'nü Harici olarak değiştirmeniz ve uygulamanızın gerektirdiği yetkilendirme kapsamlarını eklemeniz gerekir.

  5. Uygulama kaydı özetinizi inceleyin. Değişiklik yapmak için Düzenle'yi tıklayın. Uygulama kaydı sorunsuz görünüyorsa Kontrol Paneline Dön'ü tıklayın.

Google Cloud Natural Language API için API anahtarı alma

  1. Google Cloud Console'a gidin. Faturalandırmanın etkin olduğu projenizin açık olduğundan emin olun.
  2. Google Cloud konsolunda Menü > API'ler ve Hizmetler > Kimlik Bilgileri'ne gidin.

    Kimlik Bilgileri'ne git

  3. Kimlik bilgileri oluştur > API anahtarı'nı tıklayın.

  4. Daha sonraki bir adımda kullanmak üzere API anahtarınızı not edin.

Komut dosyasını kurma

Apps Komut Dosyası projesini oluşturma

  1. Geri bildirim için yaklaşım analizi örnek e-tablosunun kopyasını oluşturmak için aşağıdaki düğmeyi tıklayın. Bu çözüm için Apps Komut Dosyası projesi e-tabloya eklendi.
    Kopya oluştur
  2. Uzantılar > Apps Komut Dosyası'nı tıklayın.
  3. Komut dosyasındaki şu değişkeni API anahtarınızla güncelleyin:
    const myApiKey = 'YOUR_API_KEY'; // Replace with your API key.
  4. Kaydet'i Kaydet simgesi tıklayın.

Metin verileri ekleme

  1. E-tabloya dön.
  2. Metin verilerini id ve comments sütunlarına ekleyin. Kaggle'daki örnek tatil mülkü incelemelerini veya kendi verilerinizi kullanabilirsiniz. Gerekirse daha fazla sütun ekleyebilirsiniz ancak başarıyla çalışması için komut dosyasının id ve comments sütunlarında veri olması gerekir.

Komut dosyasını çalıştırma

  1. E-tablonun en üstünde Yaklaşım Araçları > Varlıkları ve yaklaşımı işaretle'yi tıklayın. Bu özel menünün görünmesi için sayfayı yenilemeniz gerekebilir.
  2. İstendiğinde komut dosyasını yetkilendirin. OAuth izin ekranında Bu uygulama doğrulanmadı uyarısı gösteriliyorsa Gelişmiş > {Project Name} (güvenli değil) uygulamasına git'i seçerek devam edin.

  3. Yaklaşım Araçları'nı tıklayın > Varlıkları ve yaklaşımı işaretle'yi tekrar tıklayın.

  4. Komut dosyası tamamlandığında, sonuçları görmek için Pivot Tablo sayfasına geçin.

Kodu inceleyin

Bu çözümün Apps Komut Dosyası kodunu incelemek için aşağıdaki Kaynak kodu görüntüle'yi tıklayın:

Kaynak kodu göster

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);
};

Katılımcılar

Bu örnek, Google Geliştirici Uzmanlarının yardımıyla Google tarafından sağlanmaktadır.

Sonraki adımlar