Sliter du med AI eller fullstack-utvikling? Ekspertene våre er her for å veilede deg: skreddersydde råd, teknisk integrasjon og mer. Ta kontakt på [email protected].

Legg til en tekstoppsummering i Google Dokumenter ved hjelp av Natural Language Processing Clouds API for tekstoppsummering.

Article by Rafał Rybnik, Leder for programvareutvikling ved Instytut Badań Pollster

Enten du er forfatter, dataforsker eller bare skumleser gjennom kilder for å få en jobb gjort, kan det være anstrengende å lese lengre tekster for å plukke ut smuler av informasjon, kan det være ganske utmattende. Ved å automatisere slike deler av arbeidet ditt gjør at du kan fokusere på den kreative siden av ting.

Tekstoppsummering
Med mindre annet er oppgitt, er alle bilder i artikkelen tatt av forfatteren.

Tekstoppsummering

Tekstoppsummering er en teknikk for å trekke ut viktige informasjonselementer fra en omfangsrik tekst. Manuell tekstoppsummering er en vanskelig og tidkrevende oppgave, så Natural Language Processing og maskinlæringsalgoritmer ble populære for å automatisere den. populære for å automatisere det.

Det finnes ferdige løsninger på markedet, enten i form av biblioteker eller ferdige verktøy for sluttbrukere.

I denne artikkelen vil vi utarbeide vår egen skreddersydde løsning, som samtidig ikke krever avansert kunnskap om datavitenskap.

NLP Cloud

NLP Cloud er en leverandør av flere API-er for tekstbehandling ved hjelp av maskinlæringsmodeller. En av disse er tekstoppsummereren, som ser lovende ut når det gjelder enkel implementering.

Sammenfatningen som leveres av NLP Cloud er abstrakt, noe som betyr at nye setninger kan genereres og deler med lavt informasjonsstøyforhold fjernes.

La oss se et eksempel:

API for tekstoppsummering

Vi sender en tekstblokk, og modellen returnerer et sammendrag. Men å operere i en konsoll er ikke veldig praktisk. Så la oss få Google Dokumenter til å oppsummere det valgte tekstfragmentet på denne måten.

Utvidelse av Google Dokumenter

Målet vårt er å lage en praktisk meny slik at tekstoppsummering skjer automatisk fra Google Dokumenter.

Prosjektstruktur for skript for apper

Slik er prosjektet vårt strukturert. Ved hjelp av Apps Script vil vi utvide brukergrensesnittet med en knapp som vil utløse funksjoner som kommuniserer med NLP Cloud API og deretter sette inn resultatet nedenfor.

Vi begynner med å forberede et tillegg til menyen.

Å lage meny

Det er ganske enkelt å bruke Google Apps Scripts til å legge til tilpassede funksjoner i Google Dokumenter. Du kan tilpasse brukergrensesnittet med nye menyer, dialogbokser og sidefelt. For å opprette et skript velger du Verktøy -> Skriptredigering når du har åpnet Google Dokumenter.

Alle grensesnittelementene skal legges til i denne funksjonen: onOpen. Det kjøres etter at dokumentet er åpnet og lar oss legge til menyen.

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

Etter å ha lagret skriptet og oppdatert Dokumenter, bør du finne det nye menyelementet "Tekstoppsummering".

Google Dokumenter-menyen

Vi må hente den valgte teksten og deretter implementere følgende funksjon: summarizeSelection.

Få utvalg

Den vanskelige delen er å få valgt tekst og overføre den til funksjoner. Det er mulig takket være denne funksjonen: getSelection.

DocumentApp.getActiveDocument().getSelection();

However, this function returns not only highlighted part of the documents, but a whole paragraph in which selections resides. That’s why we create more complex getSelectedText function:

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

Funksjonen tar ganske enkelt hele avsnittet og trimmer det ned til bare det valgte fragmentet. Den returnerer også indeksen for avsnittet, slik at du vet hvor du skal sette inn sammendraget.

La oss nå sende teksten til API-et og analysere resultatet.

Eksterne API-er

Vi bruker følgende tjeneste for å sende API-forespørsler direkte: UrlFetch. Forespørsel om API for tekstoppsummering krever autorisasjon gjennom token. For å få det, registrer deg på nlpcloud.com (gratisplanen vil gjøre det bra).

API-et som blir forespurt, returnerer et rå JSON-svar for en forespørsel.

Husk at all tekst som behandles av dette skriptet, sendes til ekstern API.

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

}

For å teste funksjonaliteten er det bare å velge et tekstfragment i Dokumenter og velge Tekstoppsummering -> Oppsummer utvalg fra Dokumenter-menyen.

Etter et øyeblikks behandling bør du se et popup-vindu med resultatet, som du til og med kan kopiere.

Generering av tekstsammendrag

Skriftlig svar på dokument

Til slutt kan vi sette inn et API-genererte sammendrag direkte i dokumentet. For å gjøre det lettere å skille, bør teksten i sammendraget skrives med fet skrift. Derfor returnerer følgende funksjon også avsnittsindeksen for den valgte teksten: getSelectedText.

På denne måten vet vi nøyaktig hvor vi skal be Apps Script om å sette inn den nye teksten.

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

La oss teste den endelige versjonen:

Takeaways

Å bygge en applikasjon som utvider Google Docs-funksjonaliteten basert på eksterne API-er, er et interessant alternativ til å bygge store systemer for å automatisere upraktiske arbeidstrinn. Videre kan individuelle komponenter byttes ut, avhengig av behov og spesifikke ferdigheter. For eksempel kan løsningen vår utvides med følelsesdeteksjon eller tekstklassifisering (også tilgjengelig i NLP Cloud). Du kan også utarbeide ditt eget API eller enkle funksjoner direkte i Apps Script.

Papirfly

Takk for at du leste. Jeg håper du likte å lese like mye som jeg likte å skrive dette for deg.