Vaikeuksia tekoälyn tai full-stack-kehityksen kanssa? Asiantuntijamme opastavat sinua: räätälöityjä neuvoja, teknistä integrointia ja paljon muuta. Ota yhteyttä osoitteessa [email protected].

Tekstin tiivistämisen lisääminen Google Docsiin Natural Language Processing Cloudin tekstin tiivistämisen API:n avulla.

Article by Rafał Rybnik, Ohjelmistokehityksen päällikkö Instytut Badań Pollster

Olitpa sitten kirjoittaja, datatieteilijä tai vain selaamassa lähteitä saadaksesi työnsä tehtyä, lukemisen pidempien tekstien lukeminen ja tiedonmurujen poimiminen voi olla melko uuvuttavaa. Tällaisten elementtien automatisointi työsi automatisointi antaa sinulle mahdollisuuden keskittyä asioiden luovaan puoleen.

Tekstin tiivistäminen
Ellei toisin mainita, kaikki artikkelin kuvat ovat kirjoittajan ottamia.

Tekstin tiivistäminen

Tekstin tiivistäminen on tekniikka, jolla poimitaan keskeiset informaatioelementit laajasta tekstistä. Manuaalinen tekstin tiivistäminen on vaikea ja aikaa vievä tehtävä, joten luonnollisen kielen prosessoinnista ja koneoppimisalgoritmeista on tullut suosittuja sen automatisoimiseksi.

Markkinoilla on valmiita ratkaisuja, joko kirjastojen tai loppukäyttäjille tarkoitettujen valmiiden työkalujen muodossa.

Tässä artikkelissa valmistelemme oman räätälöidyn ratkaisun, joka ei kuitenkaan vaadi edistynyttä tietämystä datatieteestä.

NLP Cloud

NLP Cloud tarjoaa useita sovellusrajapintoja tekstinkäsittelyyn koneoppimismallien avulla. Yksi näistä on tekstin tiivistelmäohjelma, joka vaikuttaa lupaavalta yksinkertaisen toteutuksen kannalta.

NLP Cloudin tarjoama tiivistelmäohjelma on abstrahoiva, mikä tarkoittaa, että uusia lauseita saatetaan luoda ja osat, joissa on alhainen informaatio-kohinasuhde, poistetaan.

Katsotaanpa esimerkki:

Tekstin tiivistäminen API

Annamme tekstilohkon, ja malli palauttaa yhteenvedon. Konsolissa toimiminen ei kuitenkaan ole kovin kätevää. Laitetaan siis Google Docs tekemään yhteenveto valitusta tekstinpätkästä tällä tavalla.

Google Docsin laajentaminen

Tavoitteenamme on luoda kätevä valikko, jonka avulla tekstin tiivistäminen tapahtuu automaattisesti Google Docsissa.

Apps Script -projektin rakenne

Hankkeemme on jäsennelty näin. Käyttämällä Apps Script -ohjelmaa laajennamme graafista käyttöliittymää painikkeella, joka käynnistää toiminnot, jotka kommunikoivat NLP Cloud API:n kanssa ja lisäävät sitten alla olevan tuloksen.

Aloitamme valmistelemalla lisäosan valikkoon.

Valikon tekeminen

Google Apps Scripts -skriptien käyttäminen mukautettujen toimintojen lisäämiseen Google Docsiin on melko helppoa. Voit muokata käyttöliittymää uusilla valikoilla, valintaikkunoilla ja sivupalkkeilla. Voit luoda skriptin avaamalla Google Docsin ja valitsemalla Työkalut -> Skriptieditori.

Kaikki käyttöliittymäelementit olisi lisättävä tähän toimintoon: onOpen. Se suoritetaan asiakirjan avaamisen jälkeen, ja sen avulla voimme lisätä valikon.

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

Kun olet tallentanut komentosarjan ja päivittänyt Docsin, sinun pitäisi löytää uusi valikkokohta "Text Summarizer".

Google Docs -valikko

Meidän on saatava valittu teksti ja toteutettava sitten seuraava toiminto: summarizeSelection.

Hanki valinta

Hankala osa on saada tällä hetkellä valittu teksti ja siirtää se funktioihin. Se on mahdollista tämän funktion ansiosta: 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];
}

Funktio yksinkertaisesti ottaa koko kappaleen ja leikkaa sen vain valitun katkelman kohdalle. Se palauttaa myös kappaleen indeksin, jotta tiedät, mihin kohtaan tiivistelmä lisätään.

Nyt lähetetään teksti API:lle ja analysoidaan tulos.

Ulkoiset sovellusliittymät

Käytämme seuraavaa palvelua API-pyyntöjen tekemiseen suoraan: UrlFetch. Tekstin tiivistämisen API-pyyntö vaatii valtuutuksen tunnuksen avulla. Saat sen rekisteröitymällä osoitteessa nlpcloud.com (ilmaispaketti riittää mainiosti).

Pyynnön kohteena oleva sovellusliittymä palauttaa raa'an JSON-vastauksen pyyntöön.

Muista, että kaikki tämän skriptin käsittelemä teksti lähetetään ulkoiseen API:han.

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

}

Voit testata toiminnallisuutta valitsemalla tekstikappaleen Docsissa ja valitsemalla Docs-valikosta Tekstin tiivistäminen -> Tiivistä valinta.

Hetken käsittelyn jälkeen sinun pitäisi nähdä ponnahdusikkuna, jossa näkyy tulos, jonka voit jopa kopioida.

Tekstin yhteenvedon tuottaminen

Vastauksen kirjoittaminen asiakirjaan

Lopuksi voimme lisätä API:n tuottaman yhteenvedon suoraan asiakirjaan. Erottamisen helpottamiseksi lihavoi tiivistelmän teksti. Siksi seuraava funktio palauttaa myös valitun tekstin kappaleen indeksin: getSelectedText.

Näin tiedämme tarkalleen, mihin kohtaan Apps Scriptin on lisättävä uusi teksti.

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

Testataan lopullista versiota:

Takeaways

Sovelluksen rakentaminen, joka laajentaa Google Docsin toimintoja ulkoisten sovellusliittymien avulla, on mielenkiintoinen vaihtoehto suurten järjestelmien rakentamiselle hankalien työvaiheiden automatisoimiseksi. Lisäksi yksittäisiä komponentteja voidaan korvata tarpeiden ja erityisosaamisen mukaan. Ratkaisuamme voidaan esimerkiksi laajentaa tunteiden tunnistuksella tai tekstiluokittelulla (saatavilla myös NLP Cloudissa). Voit myös laatia oman API:n tai yksinkertaisia toimintoja suoraan Apps Scriptissä.

Paperilentokone

Kiitos lukemisesta. Toivottavasti nautitte lukemisesta yhtä paljon kuin minä nautin tämän kirjoittamisesta teille.