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

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

Hedefler

  • Çözümün ne yaptığını anlayın.
  • Apps Script hizmetlerinin çözümde ne 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 öğe ve duyar analizi yapmak için Google Cloud Natural Language API'ye bağlanmak üzere UrlFetch Hizmeti'ni kullanır.

Yaklaşım analizinin işleyiş şeklini gösteren şema

İş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 veri satırlarında bahsedilen her öğenin 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 her satırın duygusu analiz edildikten sonra "Tamamlandı" olarak işaretler.
  • UrlFetch hizmeti: Metin üzerinde varlık ve duygu analizi yapmak için Google Cloud Natural Language API'ye bağlanır.

Ön koşullar

Bu örneği kullanmak için aşağıdaki ön koş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şkili 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

Cloud projenizi Google Cloud Console'da açma

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

  1. Google Cloud Console'da Proje seçin sayfasına gidin.

    Bulut projesi seçin

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

Google Cloud Natural Language API'yi etkinleştirme

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

Bu çözüm için yapılandırılmış bir izin ekranı içeren bir Cloud projesi gerekir. OAuth kullanıcı rızası ekranını yapılandırarak Google'ın kullanıcılara ne göstereceğini tanımlar ve uygulamanızı daha sonra yayınlayabilmeniz için kaydedersiniz.

  1. Google Cloud Console'da 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 doldurup Kaydet ve Devam Et'i tıklayın.
  4. Şimdilik kapsam eklemeyi atlayabilir ve Kaydet ve Devam Et'i tıklayabilirsiniz. Gelecekte, Google Workspace kuruluşunuzun dışında kullanılacak bir uygulama oluşturduğunuzda Kullanıcı türü'nü Harici olarak değiştirmeniz ve ardından 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ının sorunsuz görünmesi durumunda Kontrol paneline dön'ü tıklayın.

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

  1. Google Cloud Console'a gidin. Faturalandırma özelliği etkinleştirilmiş projenizin açık olduğundan emin olun.
  2. Google Cloud Console'da Menü > API'ler ve Hizmetler > Kimlik bilgileri'ne gidin.

    Kimlik Bilgileri'ne gidin

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

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

Komut dosyasını ayarlama

Apps Komut Dosyası projesini oluşturma

  1. Geri bildirim için duygu analizi örnek e-tablosunun kopyasını oluşturmak üzere aşağıdaki düğmeyi tıklayın. Bu çözümün Apps Komut Dosyası projesi e-tabloya eklenir.
    Kopya oluştur
  2. Uzantılar > Apps Komut Dosyası'nı tıklayın.
  3. Komut dosyası dosyasında aşağıdaki 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ün.
  2. Kimlik ve yorumlar sütunlarına metin verileri ekleyin. Kaggle'daki örnek tatil mülkü yorumlarını veya kendi verilerinizi kullanabilirsiniz. Gerekirse daha fazla sütun ekleyebilirsiniz ancak komut dosyasının başarılı bir şekilde çalışabilmesi için id ve comments sütunlarında veri bulunmalıdır.

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

  1. E-tablonun üst kısmında Duygu Araçları > Öğeleri ve duyguları 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ş > {Proje Adı}'na git (güvenli değil)'i seçerek devam edin.

  3. Duygu Araçları > Öğeleri ve duyguyu 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 inceleme

Bu çözümün Apps Komut Dosyası kodunu incelemek için aşağıdaki Kaynak kodunu 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);
};

Katkıda bulunanlar

Bu örnek, Google Geliştirici Uzmanları'nın yardımıyla Google tarafından yönetilir.

Sonraki adımlar