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.

Med mindre annet er oppgitt, er alle bilder i artikkelen tatt av forfatteren.
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 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:

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.
Målet vårt er å lage en praktisk meny slik at tekstoppsummering skjer automatisk fra Google Dokumenter.

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.
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".

Vi må hente den valgte teksten og deretter implementere følgende funksjon: summarizeSelection.
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.
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.

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:
Å 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.

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