Analyser le sentiment des commentaires à l'aide de l'API Google Cloud Natural Language

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

Objectifs

  • Comprendre ce que fait la solution
  • Comprendre le rôle des 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 commentaires ouverts. Pour effectuer une analyse des entités et des sentiments dans 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 collecte 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écapitule le score de sentiment moyen 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ée" 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 souhaitez 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 pour que vous puissiez la publier ultérieurement.

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

    Accéder à la section "Branding"

  2. Si vous avez déjà configuré Google Auth platform, vous pouvez configurer les paramètres de l'écran d'autorisation OAuth suivants dans Branding, Audience et Accès aux données. Si le message Google Auth platform pas encore configuré s'affiche, cliquez sur Premiers pas :
    1. Sous Informations sur l'application, dans Nom de l'application, saisissez le nom de l'application.
    2. Dans Adresse e-mail d'assistance utilisateur, sélectionnez une adresse e-mail d'assistance que les utilisateurs pourront 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 l'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 de niveaux d'accès. À 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 niveaux 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 pour lequel la facturation est 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, car vous en aurez besoin lors d'une prochaine étape.

Configurer le script

Créer le projet Apps Script

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

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 provenant de Kaggle ou vos propres données. Vous pouvez ajouter d'autres colonnes si nécessaire, mais pour que le script s'exécute correctement, les colonnes id et comments doivent contenir des données.

Exécuter le script

  1. En haut de la feuille de calcul, cliquez sur Outils d'analyse des sentiments > Marquer les entités et les sentiments. 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 de consentement OAuth affiche l'avertissement Cette application n'est pas validée, poursuivez en sélectionnant Avancé > Accéder à {Nom du projet} (non sécurisé).

  3. Cliquez de nouveau sur Outils d'analyse des sentiments > Marquer les entités et les 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 Google Developer Experts.

Étapes suivantes