Susiduriate su sunkumais dirbtinio intelekto arba viso paketo kūrimo srityje? Mūsų ekspertai padės jums: teiksime pritaikytus patarimus, techninę integraciją ir dar daugiau. Kreipkitės į [email protected].

Į "Google" dokumentus pridėkite teksto apibendrintoją naudodami "Natural Language Processing Cloud" teksto apibendrinimo API

Article by Rafał Rybnik, Programinės įrangos kūrimo vadovas Instytut Badań Pollster

Nesvarbu, ar esate rašytojas, duomenų mokslininkas, ar tiesiog peržvelgiate šaltinius, kad atliktumėte darbą, skaitydami ilgesnių tekstų skaitymas, kad ištrauktumėte informacijos trupinius, gali būti gana varginantis. Tokių elementų automatizavimas darbo automatizavimas leidžia susitelkti į kūrybinę darbo pusę.

Teksto apibendrinimas
Jei nenurodyta kitaip, visos straipsnyje pateiktos nuotraukos yra autoriaus.

Teksto apibendrinimas

Teksto apibendrinimas - tai metodas, kuriuo iš didelės apimties teksto išskiriami pagrindiniai informaciniai elementai. Rankinis teksto apibendrinimas yra sudėtinga ir daug laiko reikalaujanti užduotis, todėl natūralios kalbos apdorojimo ir mašininio mokymosi algoritmai tapo išpopuliarėjo siekiant jį automatizuoti.

Rinkoje yra paruoštų sprendimų - bibliotekų arba galutiniams naudotojams skirtų įrankių.

Šiame straipsnyje parengsime savo pritaikytą sprendimą, kuris nereikalauja pažangių duomenų mokslo žinių.

NLP Cloud

"NLP Cloud" yra kelių API, skirtų teksto apdorojimui naudojant mašininio mokymosi modelius, teikėjas. Viena iš jų - teksto apibendrintojas, kuris atrodo daug žadantis, nes jį paprasta įgyvendinti.

"NLP Cloud" teikiamas apibendrintojas yra abstraktus, o tai reiškia, kad gali būti sukuriami nauji sakiniai ir pašalinamos dalys, kurių informacijos ir triukšmo santykis yra žemas.

Pažiūrėkime pavyzdį:

Teksto apibendrinimo API

Perduodame teksto bloką, o modelis grąžina santrauką. Tačiau dirbti konsolėje nėra labai patogu. Taigi padarykime taip, kad "Google Docs" apibendrintų pasirinktą teksto fragmentą.

"Google" dokumentų išplėtimas

Mūsų tikslas - sukurti patogų meniu, kad teksto apibendrinimas būtų atliekamas automatiškai iš "Google" dokumentų.

Programų scenarijaus projekto struktūra

Taip sudaryta mūsų projekto struktūra. Naudodami "Apps Script" išplėsime grafinę sąsają mygtuku, kuris įjungs funkcijas, palaikančias ryšį su "NLP Cloud API", ir įterpsime toliau pateiktą rezultatą.

Pradėsime rengdami meniu priedą.

Meniu sudarymas

Naudojant "Google Apps" skriptus "Google" dokumentus papildyti pasirinktinėmis funkcijomis gana paprasta. Naudotojo sąsają galite pritaikyti naujiems meniu, dialogo langams ir šoninėms juostoms. Jei norite sukurti scenarijų, atidarę "Google" dokumentus, pasirinkite Įrankiai -> Scenarijų redaktorius.

Visi sąsajos elementai turėtų būti pridėti šioje funkcijoje: onOpen. Jis paleidžiamas atidarius dokumentą ir leidžia pridėti meniu.

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

Išsaugoję scenarijų ir atnaujinę "Docs", turėtumėte rasti naują meniu elementą "Teksto apibendrinimas".

Turime gauti pasirinktą tekstą ir tada įgyvendinti šią funkciją: summarizeSelection.

Gaukite atranką

Sudėtinga dalis yra gauti šiuo metu pasirinktą tekstą ir perduoti jį funkcijoms. Tai įmanoma šios funkcijos dėka: 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];
}

Funkcija tiesiog paima visą pastraipą ir sutrumpina ją iki pasirinkto fragmento. Ji taip pat grąžina pastraipos indeksą, kad žinotumėte, kur įterpti santrauką.

Dabar nusiųskime tekstą į API ir analizuokime rezultatą.

Išorinės API

API užklausoms tiesiogiai atlikti naudosime šią paslaugą: UrlFetch. Teksto apibendrinimo API užklausai reikalingas autorizavimas naudojant taikeną. Norėdami jį gauti, užsiregistruokite svetainėje nlpcloud.com (užteks nemokamo plano).

Prašoma API grąžina neapdorotą JSON atsakymą į užklausą.

Nepamirškite, kad visas šio scenarijaus apdorotas tekstas siunčiamas į išorinę 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!');
    }

}

Norėdami išbandyti šią funkciją, tiesiog pasirinkite teksto fragmentą "Dokumentuose" ir meniu "Dokumentai" pasirinkite "Teksto apibendrinimas" -> "Apibendrinti pasirinkimą".

Po akimirkos apdorojimo turėtumėte pamatyti iššokantį langą su rezultatu, kurį galite net nukopijuoti.

Teksto santraukos generavimas

Atsakymo į dokumentą rašymas

Galiausiai galime įterpti API sukurtą santrauką tiesiai į dokumentą. Kad būtų lengviau atskirti, santraukos tekstą paryškinkite. Todėl toliau pateikta funkcija taip pat grąžina pasirinkto teksto pastraipos indeksą: getSelectedText.

Taip tiksliai žinosime, kur "Apps Script" nurodyti įterpti naują tekstą.

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

Išbandykime galutinę versiją:

Išvados

Programos, kuri išplečia "Google" dokumentų funkcionalumą pagal išorines API, kūrimas yra įdomi alternatyva kurti dideles sistemas, skirtas nepatogiems darbo veiksmams automatizuoti. Be to, atskirus komponentus galima pakeisti, atsižvelgiant į poreikius ir konkrečius įgūdžius. Pavyzdžiui, mūsų sprendimą galima išplėsti emocijų aptikimu arba teksto klasifikavimu (taip pat prieinama NLP Cloud). Taip pat galite parengti savo API arba paprastas funkcijas tiesiogiai "Apps Script".

Popierinis lėktuvas

Dėkojame, kad skaitote. Tikiuosi, kad jums patiko skaityti taip pat, kaip man patiko tai rašyti.