Haben Sie Probleme mit KI oder Full-Stack-Entwicklung? Unsere Experten sind für Sie da: maßgeschneiderte Beratung, technische Integration und mehr. Erreichen Sie uns unter [email protected].

Hinzufügen einer Textzusammenfassung zu Google Docs mit der Text Summarization API von NLP Cloud

Artikel von Rafał Rybnik, Leiter der Softwareentwicklung am Instytut Badań Pollster

Ob Sie nun Schriftsteller oder Datenwissenschaftler sind oder einfach nur Quellen überfliegen, um Ihre Arbeit zu erledigen, das Lesen das Lesen längerer Texte, um Informationskrümel herauszupicken, kann ziemlich anstrengend sein. Die Automatisierung solcher Elemente der Ihrer Arbeit können Sie sich auf die kreative Seite der Dinge konzentrieren.

Text-Zusammenfassung
Wenn nicht anders angegeben, stammen alle Bilder in diesem Artikel vom Autor.

Text-Zusammenfassung

Bei der Textzusammenfassung handelt es sich um eine Technik zur Extraktion der wichtigsten Informationen aus einem umfangreichen Text. Manuelle Textzusammenfassung ist eine schwierige und zeitaufwändige Aufgabe, weshalb NLP- und maschinelle Lernalgorithmen Algorithmen populär, um sie zu automatisieren.

Es gibt fertige Lösungen auf dem Markt, sei es in Form von Bibliotheken oder fertigen Tools für Endnutzer.

In diesem Artikel werden wir unsere eigene maßgeschneiderte Lösung vorbereiten, die gleichzeitig keine fortgeschrittenen Kenntnisse der Datenwissenschaft erfordert.

NLP Cloud

NLP Cloud ist ein Anbieter mehrerer APIs für die Textverarbeitung mit Modellen des maschinellen Lernens. Eine davon ist der Text Summarizer, der in Bezug auf eine einfache Implementierung vielversprechend aussieht.

Die von NLP Cloud bereitgestellte Zusammenfassung ist abstrakt, was bedeutet, dass neue Sätze generiert werden können und Teile mit geringem Informations-Rausch-Verhältnis entfernt werden.

Hier ein Beispiel:

Text-Zusammenfassung API

Wir übergeben einen Textblock, und das Modell gibt eine Zusammenfassung zurück. Aber die Bedienung in einer Konsole ist nicht sehr bequem. Also lassen wir Google Docs das ausgewählte Textfragment auf diese Weise zusammenfassen.

Erweitern von Google Docs

Unser Ziel ist es, ein praktisches Menü zu erstellen, mit dem die Textzusammenfassung automatisch aus Google Docs heraus erfolgt.

Apps Script Projektstruktur

So ist unser Projekt aufgebaut. Mit Apps Script werden wir die GUI um eine Schaltfläche erweitern, die Funktionen auslöst, die mit der NLP Cloud API kommunizieren und dann das Ergebnis unten einfügen.

Wir beginnen mit der Vorbereitung eines Zusatzes für das Menü.

Menü erstellen

Die Verwendung von Google Apps Scripts zum Hinzufügen benutzerdefinierter Funktionen zu Google Text & Tabellen ist ziemlich einfach. Sie können die Benutzeroberfläche mit neuen Menüs, Dialogfeldern und Seitenleisten anpassen. Um ein Skript zu erstellen, wählen Sie nach dem Öffnen von Google Text & Tabellen Werkzeuge -> Skript-Editor.

Alle Schnittstellenelemente sollten in der Funktion onOpen hinzugefügt werden. Sie wird nach dem Öffnen des Dokuments ausgeführt und ermöglicht es uns, das Menü hinzuzufügen.

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

Nachdem Sie das Skript gespeichert und Docs aktualisiert haben, sollten Sie ein neues Menüelement "Text Summarizer" finden.

Google Docs Menü

Bevor wir die Funktion summarizeSelection implementieren, müssen wir den ausgewählten Text erhalten.

Auswahl treffen

Der knifflige Teil besteht darin, den aktuell ausgewählten Text abzurufen und ihn an Funktionen zu übergeben. Dies ist dank der Funktion getSelection möglich:

DocumentApp.getActiveDocument().getSelection();

Diese Funktion gibt jedoch nicht nur einen hervorgehobenen Teil des Dokuments zurück, sondern einen ganzen Absatz, in dem sich die Markierungen befinden. Deshalb erstellen wir eine komplexere getSelectedText -Funktion:

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

Die Funktion nimmt einfach den gesamten Absatz und kürzt ihn auf das ausgewählte Fragment ab. Sie gibt auch den Index des Absatzes zurück, damit Sie wissen, wo Sie die Zusammenfassung einfügen müssen.

Lassen Sie uns nun den Text an die API senden und das Ergebnis analysieren.

Externe APIs

Wir werden den UrlFetch Dienst verwenden, um API-Anfragen direkt zu stellen. Die Anforderung der Textzusammenfassung-API erfordert eine Autorisierung durch ein Token. Um es zu erhalten, melden Sie sich bei nlpcloud.com an (der kostenlose Plan reicht aus).

Die angeforderte API gibt eine rohe JSON-Antwort für eine Anfrage zurück.

Denken Sie daran, dass alle von diesem Skript verarbeiteten Texte an eine externe API gesendet werden.

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

}

Um die Funktionalität zu testen, markieren Sie einfach ein Textfragment in Docs und wählen Sie im Menü Docs die Option Textzusammenfassung -> Auswahl zusammenfassen.

Nach einer kurzen Bearbeitungszeit sollten Sie ein Pop-up-Fenster mit dem Ergebnis sehen, das Sie sogar kopieren können.

Erstellung von Textzusammenfassungen

Antwort auf das Dokument schreiben

Finally, we can insert an API-generated summary directly into the document. For ease of distinction, bold the text of the summary. Aus diesem Grund gibt die Funktion getSelectedText auch den Absatzindex des ausgewählten Textes zurück.

Auf diese Weise wissen wir genau, wo Apps Script den neuen Text einfügen soll.

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

Testen wir die endgültige Version:

Mitbringsel

Der Aufbau einer Anwendung, die die Funktionalität von Google Text & Tabellen auf der Grundlage externer APIs erweitert, ist eine interessante Alternative zum Aufbau großer Systeme zur Automatisierung lästiger Arbeitsschritte. Außerdem können einzelne Komponenten je nach Bedarf und spezifischen Fähigkeiten ersetzt werden. So kann unsere Lösung beispielsweise um Emotionserkennung oder Textklassifizierung (auch in NLP Cloud verfügbar) erweitert werden. Sie können auch Ihre eigene API oder einfache Funktionen direkt in Apps Script erstellen.

Papierflugzeug

Danke fürs Lesen. Ich hoffe, es hat Ihnen genauso viel Spaß gemacht zu lesen, wie es mir Spaß gemacht hat, dies für Sie zu schreiben.