Ajouter un résumé de texte à Google Docs en utilisant l'API de résumé de texte de NLP Cloud

Article de Rafał Rybnik, Head of Software Development chez Instytut Badań Pollster

Que vous soyez écrivain, data scientist ou simplement en train d'écumer des sources, lire des textes longs pour extraire des bribes d'information peut être épuisant. Automatiser cette partie de votre travail vous permet de vous concentrer sur le côté plus créatif des choses.

Résumé de texte
Sauf indication contraire, toutes les images de l'article sont faites par l'auteur.

Résumé de texte

Le résumé du texte est la technique d'extraction des éléments d'information clés d'un texte volumineux. Le résumé manuel du texte est une tâche difficile et coûteuse en temps, de sorte que le NLP et les algorithmes d'apprentissage automatique sont devenus populaires pour l'automatiser.

Il existe des solutions prêtes à l'emploi sur le marché, que ce soit sous la forme de bibliothèques ou d'outils clés en main pour les utilisateurs finaux.

Dans cet article, nous allons créer notre propre solution sur mesure, qui en même temps ne nécessite pas de connaissances avancées en matière de datascience.

NLP Cloud

NLP Cloud est un fournisseur de plusieurs API pour le traitement de texte à l'aide de modèles d'apprentissage automatique. L'un d'entre eux est le résumé de texte, qui semble prometteur et avec une mise en œuvre simple.

Le résumé fourni par NLP Cloud est abstrait, ce qui signifie que de nouvelles phrases peuvent être générées et que les parties avec un faible rapport information-bruit sont supprimées.

Voyons un exemple :

API de résumé de texte

Nous passons un bloc de texte, et le modèle renvoie un résumé. Mais l'exploitation dans une console n'est pas très pratique. Donc, laissons Google Docs résumer le fragment de texte sélectionné.

Ajouter la fonctionnalité à Google Docs

Notre objectif est de créer un menu pratique afin que la synthèse de texte se fasse automatiquement à partir de Google Docs.

Structure du project Apps Script

C'est ainsi que notre projet est structuré. En utilisant Apps Script, nous étendrons l'interface graphique avec un bouton qui déclenchera les fonctions qui communiquent avec l'API Cloud NLP, puis insérerons le résultat ci-dessous.

Nous commencerons par préparer un add-on pour le menu.

Le Menu

Utiliser Google Apps Scripts pour ajouter des fonctionnalités personnalisées à Google Docs est assez facile. Vous pouvez personnaliser l'interface utilisateur avec de nouveaux menus, boîtes de dialogue et barres latérales. Pour créer un script, après avoir ouvert Google Docs, sélectionnez Outils -> Éditeur de script.

Tous les éléments d'interface doivent être ajoutés dans la fonction onOpen. La fonction est exécutée après l'ouverture du document et nous permet d'ajouter le menu.

function onOpen() {
    var ui = DocumentApp.getUi();
    
    ui.createMenu('Text Summarizer')
        .addItem('Summarize selection', 'summarizeSelection')
        .addToUi();
    }
    
    function summarizeSelection() {
    // summarization function
}

Après avoir enregistré le script et rafraîchi Google Docs, vous devriez trouver le nouvel élément de menu "Text Summarizer".

Google Docs Menu

Avant d'implémenter la fonction summarizeSelection, on doit récupérer le texte sélectionné.

Obtenir la sélection

La partie délicate est d'obtenir le texte sélectionné et de le passer aux fonctions. C'est possible grâce à la fonction getSelection :

DocumentApp.getActiveDocument().getSelection();

Cependant, cette fonction retourne non seulement une partie surlignée des documents, mais un paragraphe entier dans lequel se trouve la sélection. C'est pourquoi nous créons une fonction plus complexe getSelectedText :

function getSelectedText() {
var document = DocumentApp.getActiveDocument();
var body = document.getBody();
var text = "";

var selection = document.getSelection();
var parent = false;
var insertPoint 

if (selection) {
    var elements = selection.getRangeElements();

    if(elements[0].isPartial()) {
    text = elements[0].getElement().asText().getText();
    text = text.substring(elements[0].getStartOffset(),elements[0].getEndOffsetInclusive()+1)
        parent = elements[0].getElement().getParent();
    } else {
    text = elements.map( function(element) {
        parent = element.getElement().getParent();
        return element.getElement().asText().getText(); 
    });
    }
    // Logger.log(text);
    if (parent) {
    insertPoint = body.getChildIndex(parent);
    }
}
return [text, insertPoint];
}

La fonction prend simplement l'ensemble du paragraphe et le réduit au fragment sélectionné. Elle retourne également l'index du paragraphe afin que vous sachiez où insérer le résumé.

Maintenant, envoyez le texte à l'API et analysez le résultat.

APIs externes

Nous utiliserons le service UrlFetch pour faire des requêtes d'API directement. La requête d'API de résumé de texte nécessite une autorisation par token. Pour l'obtenir, inscrivez-vous sur nlpcloud.com (le plan gratuit suffira largement).

L'API renvoie une réponse brute en JSON.

Rappelez-vous que tous les textes traités par ce script sont envoyés à l'API externe.

function summarizeSelection() {
    var document = DocumentApp.getActiveDocument();
    var selectedText = getSelectedText();
    var text = selectedText[0];
    var insertPoint = selectedText[1];

    if (text) {
        DocumentApp.getUi().alert(text);
        var url = 'https://api.nlpcloud.io/v1/bart-large-cnn/summarization';

        var response = UrlFetchApp.fetch(
        url, 
        {
            'method': 'POST',
            'contentType': 'application/json',
            'headers':{
            'Authorization': 'Token c714fb961e7f6ef1336ab7f501f4d842f2dc2380'
            },
            'payload': JSON.stringify({"text":text}),
            'muteHttpExceptions': true
        }
        );

        try {
        summary_text = JSON.parse(response.getContentText())['summary_text'];
        DocumentApp.getUi().alert(summary_text);

        } catch (e) {
        DocumentApp.getUi().alert('Something went wrong 🙁');
        }

    } else {
        DocumentApp.getUi().alert('You must select some text!');
    }

}

Pour tester la fonctionnalité, il suffit de sélectionner un fragment de texte dans Docs et de choisir Text Summarization -> Summarize selection dans le menu Docs.

Après un moment de traitement, vous devriez voir un pop-up avec le résultat, que vous pouvez même copier.

Génération de résumé de texte

Ecrire la réponse dans le document

Enfin, nous pouvons insérer un résumé généré par l'API directement dans le document. Pour faciliter la distinction, formatons en gras le texte du résumé. C'est pourquoi la fonction getSelectedText retourne également l'index des paragraphes du texte sélectionné.

De cette façon, nous savons exactement où dire à Apps Script d'insérer le nouveau texte.

function summarizeSelection() {
    var document = DocumentApp.getActiveDocument();
    var selectedText = getSelectedText();
    var text = selectedText[0];
    var insertPoint = selectedText[1];
    
    if (text) {
        DocumentApp.getUi().alert(text);
        var url = 'https://api.nlpcloud.io/v1/bart-large-cnn/summarization';
    
        var response = UrlFetchApp.fetch(
        url, 
        {
            'method': 'POST',
            'contentType': 'application/json',
            'headers':{
            'Authorization': 'Token c714fb961e7f6ef1336ab7f501f4d842f2dc2380'
            },
            'payload': JSON.stringify({"text":text}),
            'muteHttpExceptions': true
        }
        );
    
        try {
        summary_text = JSON.parse(response.getContentText())['summary_text'];
        DocumentApp.getUi().alert(summary_text);
    
        } catch (e) {
        DocumentApp.getUi().alert('Something went wrong 🙁');
        }
        //////////////
        var body = document.getBody();
        var summaryParagraph = body.insertParagraph(insertPoint+1, summary_text);
        summaryParagraph.setBold(true);
        //////////////
    } else {
        DocumentApp.getUi().alert('You must select some text!');
    }
    
}

Voyons la version finale :

A retenir

Bâtir une application qui étend la fonctionnalité de Google Docs basée sur des API externes est une alternative intéressante à la construction d'applications complexes afin d'automatiser les étapes de travail gênantes. De plus, des composants individuels peuvent être remplacés, en fonction des besoins et des compétences spécifiques. Par exemple, notre solution peut être étendue avec de l'analyse de sentiments ou de la classification de texte (également disponible sur NLP Cloud). Vous pouvez également créer votre propre API ou des fonctions simples directement dans Apps Script.

Avion en papier

Merci d'avoir lu cet article. J'espère que vous avez aimé le lire autant que j'ai aimé l'écrire pour vous.