Se connecter à une API: analyser le sentiment des commentaires

Niveau de codage: intermédiaire
Durée: 20 minutes
Type de projet: automatisation avec un menu personnalisé

Objectifs

  • Comprendre ce que la solution fait
  • Comprendre ce que font les services Apps Script dans la solution
  • configurer votre environnement ;
  • Configurez le script.
  • Exécutez le script.

À propos de cette solution

Vous pouvez analyser à grande échelle des données textuelles, comme des réponses à des questions ouvertes. Pour effectuer une analyse des entités et des sentiments depuis Google Sheets, cette solution utilise le service UrlFetch pour se connecter à l'API Google Cloud Natural Language.

Schéma du fonctionnement de l'analyse des sentiments

Fonctionnement

Le script rassemble le texte de la feuille de calcul et se connecte à l'API Google Cloud Natural Language pour analyser les entités et les sentiments présents dans la chaîne. Un tableau croisé dynamique résume le score moyen du sentiment pour chaque entité mentionnée dans toutes les lignes de données textuelles.

Services Apps Script

Cette solution utilise les services suivants:

  • Service de feuille de calcul : envoie les données textuelles à l'API Google Cloud Natural Language et marque chaque ligne comme "Terminé" une fois que son sentiment a été analysé.
  • Service UrlFetch : se connecte à l'API Google Cloud Natural Language pour effectuer une analyse des entités et des sentiments dans le texte.

Prérequis

Pour utiliser cet exemple, vous devez remplir les conditions préalables suivantes:

  • Un compte Google (l'approbation de l'administrateur peut être nécessaire pour les comptes Google Workspace).
  • Un navigateur Web avec accès à Internet

  • Un projet Google Cloud avec un compte de facturation associé. Consultez Activer la facturation pour un projet.

Configurer votre environnement

Ouvrez votre projet Cloud dans la console Google Cloud.

Si ce n'est pas déjà fait, ouvrez le projet Cloud que vous prévoyez d'utiliser pour cet exemple:

  1. Dans la console Google Cloud, accédez à la page Sélectionner un projet.

    Sélectionner un projet Cloud

  2. Sélectionnez le projet Google Cloud que vous souhaitez utiliser. Vous pouvez également cliquer sur Créer un projet et suivre les instructions à l'écran. Si vous créez un projet Google Cloud, vous devrez peut-être activer la facturation pour ce projet.

Activer l'API Google Cloud Natural Language

Cette solution se connecte à l'API Google Cloud Natural Language. Avant d'utiliser les API Google, vous devez les activer dans un projet Google Cloud. Vous pouvez activer une ou plusieurs API dans un même projet Google Cloud.

  • Dans votre projet Cloud, activez l'API Google Cloud Natural Language.

    Activer l'API

Cette solution nécessite un projet Cloud avec un écran de consentement configuré. La configuration de l'écran de consentement OAuth définit ce que Google affiche aux utilisateurs et enregistre votre application afin que vous puissiez la publier ultérieurement.

  1. Dans la console Google Cloud, accédez à Menu  > > Branding.

    Accéder à "Branding"

  2. Si vous avez déjà configuré , vous pouvez configurer les paramètres suivants de l'écran d'autorisation OAuth dans Branding (Marquage), Audience (Audience) et Data Access (Accès aux données). Si le message Pas encore configuré s'affiche, cliquez sur Commencer:
    1. Sous Informations sur l'application, dans Nom de l'application, saisissez un nom pour l'application.
    2. Dans Adresse e-mail d'assistance utilisateur, choisissez une adresse e-mail d'assistance à laquelle les utilisateurs peuvent vous contacter s'ils ont des questions sur leur consentement.
    3. Cliquez sur Suivant.
    4. Sous Audience, sélectionnez Interne.
    5. Cliquez sur Suivant.
    6. Sous Coordonnées, saisissez une adresse e-mail à laquelle vous pourrez être informé de toute modification apportée à votre projet.
    7. Cliquez sur Suivant.
    8. Sous Terminer, consultez le Règlement sur les données utilisateur dans les services d'API Google et, si vous acceptez, sélectionnez J'accepte le Règlement sur les données utilisateur dans les services d'API Google.
    9. Cliquez sur Continuer.
    10. Cliquez sur Créer.
  3. Pour l'instant, vous pouvez ignorer l'ajout d'autorisations. À l'avenir, lorsque vous créerez une application à utiliser en dehors de votre organisation Google Workspace, vous devrez définir le type d'utilisateur sur Externe. Ajoutez ensuite les champs d'application d'autorisation dont votre application a besoin. Pour en savoir plus, consultez le guide complet Configurer le consentement OAuth.

Obtenir une clé API pour l'API Google Cloud Natural Language

  1. Accédez à Google Cloud Console. Assurez-vous que votre projet avec facturation activée est ouvert.
  2. Dans la console Google Cloud, accédez à Menu  > API et services > Identifiants.

    Accéder à "Identifiants"

  3. Cliquez sur Créer des identifiants > Clé API.

  4. Notez votre clé API pour l'utiliser ultérieurement.

Configurer le script

Créer le projet Apps Script

  1. Cliquez sur le bouton ci-dessous pour créer une copie de l'exemple de feuille de calcul Analyse du sentiment pour les commentaires. Le projet Apps Script de cette solution est joint à la feuille de calcul.
    Créer une copie
  2. Cliquez sur Extensions > Apps Script.
  3. Remplacez la variable suivante dans le fichier de script par votre clé API:
    const myApiKey = 'YOUR_API_KEY'; // Replace with your API key.
  4. Cliquez sur Enregistrer Icône Enregistrer.

Ajouter des données textuelles

  1. Revenez à la feuille de calcul.
  2. Ajoutez des données textuelles aux colonnes id et comments. Vous pouvez utiliser des exemples d'avis sur des locations de vacances de Kaggle ou vos propres données. Vous pouvez ajouter d'autres colonnes si nécessaire, mais pour s'exécuter correctement, le script doit contenir des données dans les colonnes id et comments.

Exécuter le script

  1. En haut de la feuille de calcul, cliquez sur Outils d'analyse du sentiment > Marquer les entités et le sentiment. Vous devrez peut-être actualiser la page pour que ce menu personnalisé s'affiche.
  2. Lorsque vous y êtes invité, autorisez le script. Si l'écran d'autorisation OAuth affiche l'avertissement Cette application n'est pas validée, sélectionnez Avancé > Accéder à {Nom du projet} (non sécurisé).

  3. Cliquez à nouveau sur Outils d'analyse du sentiment > Marquer des entités et des sentiments.

  4. Une fois le script terminé, accédez à la feuille Tableau croisé dynamique pour afficher les résultats.

Examiner le code

Pour consulter le code Apps Script de cette solution, cliquez sur Afficher le code source ci-dessous:

Afficher le code source

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

Contributeurs

Cet exemple est géré par Google avec l'aide des experts Google pour les développeurs.

Étapes suivantes