Imate težave z umetno inteligenco ali razvojem celotnega paketa? Naši strokovnjaki so vam na voljo za pomoč: prilagojeni nasveti, tehnična integracija in še več. Obrnite se na [email protected].

Dodajanje zbirnika besedila v Googlove dokumente z uporabo API-ja za povzemanje besedila v oblaku za obdelavo naravnega jezika

Article by Rafał Rybnik, Vodja razvoja programske opreme v Instytut Badań Pollster

Ne glede na to, ali ste pisec, podatkovni znanstvenik ali le prebirate vire, da bi opravili delo, branje daljših besedil, da bi izluščili drobce informacij, je lahko precej naporno. Avtomatizacija takšnih elementov dela vam omogoča, da se osredotočite na ustvarjalno plat stvari.

Povzemanje besedila
Če ni navedeno drugače, so vse slike v članku avtorjeve.

Povzemanje besedila

Povzemanje besedila je tehnika izločanja ključnih informacijskih elementov iz obsežnega besedila. Ročno zato so postali algoritmi strojnega učenja in obdelave naravnega jezika zahtevno in časovno potratno opravilo. priljubljeni za njeno avtomatizacijo.

Na trgu so na voljo pripravljene rešitve v obliki knjižnic ali pripravljenih orodij za končne uporabnike.

V tem članku bomo pripravili lastno prilagojeno rešitev, ki hkrati ne zahteva naprednega znanja podatkovne znanosti.

NLP Cloud

NLP Cloud je ponudnik več vmesnikov API za obdelavo besedila z modeli strojnega učenja. Eden od teh je povzetek besedila, ki je videti obetaven z vidika preproste izvedbe.

Povzetek, ki ga zagotavlja NLP Cloud, je abstrakten, kar pomeni, da se lahko ustvarijo novi stavki in odstranijo deli z nizkim razmerjem med informacijami in šumom.

Oglejmo si primer:

API za povzemanje besedila

Predamo blok besedila, model pa vrne povzetek. Vendar delovanje v konzoli ni preveč priročno. Zato poskrbimo, da Google Dokumenti povzamejo izbrani del besedila na ta način.

Razširitev Googlovih dokumentov

Naš cilj je ustvariti priročen meni, s katerim bo povzemanje besedila potekalo samodejno v Googlovih dokumentih.

Struktura projekta Apps Script

Tako je strukturiran naš projekt. Z uporabo programa Apps Script bomo grafični vmesnik razširili z gumbom, ki bo sprožil funkcije, ki komunicirajo z vmesnikom API NLP Cloud, in nato vstavili spodnji rezultat.

Začeli bomo s pripravo dodatka za meni.

Izdelava menija

Uporaba skript Google Apps za dodajanje funkcij po meri v dokumente Google Docs je precej preprosta. Uporabniški vmesnik lahko prilagodite z novimi meniji, pogovornimi okni in stranskimi vrsticami. Če želite ustvariti skript, po odprtju programa Google Dokumenti izberite Orodja -> Urejevalnik skript.

V tej funkciji je treba dodati vse elemente vmesnika: onOpen. Zažene se po odprtju dokumenta in nam omogoča dodajanje menija.

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

Po shranjevanju skripte in osvežitvi Dokumentov morate najti nov element menija "Povzetek besedila".

Google Dokumenti Meni

Pridobiti moramo izbrano besedilo in nato implementirati naslednjo funkcijo: summarizeSelection.

Pridobite izbor

Težavno je pridobiti trenutno izbrano besedilo in ga posredovati funkcijam. To je mogoče zahvaljujoč tej funkciji: 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 preprosto vzame celoten odstavek in ga skrči na izbrani del. Vrne tudi indeks odstavka, tako da veste, kam vstaviti povzetek.

Zdaj pošljite besedilo API-ju in razčlenite rezultat.

Zunanji vmesniki API

Za neposredno izvajanje zahtevkov API bomo uporabili naslednjo storitev: UrlFetch. Zahteva API za povzemanje besedila zahteva avtorizacijo z žetonom. Če ga želite pridobiti, se prijavite na nlpcloud.com (brezplačni načrt je povsem ustrezen).

Zahtevani API vrne neobdelan odgovor JSON za zahtevo.

Ne pozabite, da se vsa besedila, ki jih ta skripta obdeluje, pošljejo v zunanji 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!');
    }

}

Če želite preizkusiti to funkcijo, v Dokumentih izberite odlomek besedila in v meniju Dokumenti izberite Povzetek besedila -> Povzeti izbor.

Po nekaj trenutkih obdelave se prikaže pojavno okno z rezultatom, ki ga lahko tudi kopirate.

Ustvarjanje povzetka besedila

Pisanje odgovora na dokument

Nazadnje lahko povzetek, ki ga ustvari API, vstavimo neposredno v dokument. Za lažje razlikovanje besedilo povzetka krepko označite. Zato naslednja funkcija vrne tudi indeks odstavka izbranega besedila: getSelectedText.

Tako bomo natančno vedeli, kam naj program Apps Script vstavi novo besedilo.

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

Preizkusimo končno različico:

Izvlečki

Gradnja aplikacije, ki razširja funkcionalnost Googlovih dokumentov na podlagi zunanjih vmesnikov API, je zanimiva alternativa gradnji velikih sistemov za avtomatizacijo neprijetnih delovnih korakov. Poleg tega lahko posamezne komponente zamenjate glede na potrebe in specifična znanja. Na primer, našo rešitev je mogoče razširiti z zaznavanjem čustev ali razvrščanjem besedil (na voljo tudi v oblaku NLP Cloud). Pripravite lahko tudi lasten API ali preproste funkcije neposredno v aplikaciji Apps Script.

Papirnato letalo

Hvala za branje. Upam, da ste uživali v branju, tako kot sem jaz uživala v pisanju za vas.