Máte potíže s umělou inteligencí nebo s vývojem celého balíku? Naši odborníci jsou tu pro vás: poradenství na míru, technická integrace a další. Obraťte se na [email protected].

Přidání shrnutí textu do Dokumentů Google pomocí rozhraní API pro shrnutí textu služby Natural Language Processing Cloud

Article by Rafał Rybnik, Vedoucí vývoje softwaru ve společnosti Instytut Badań Pollster

Ať už jste spisovatel, datový vědec, nebo jen procházíte zdroje, abyste měli hotovou práci, čtení je pro vás důležité. delší texty a vybírat z nich drobky informací může být docela vyčerpávající. Automatizace takových prvků práce vám umožní soustředit se na kreativní stránku věci.

Shrnutí textu
Pokud není uvedeno jinak, všechny obrázky v článku jsou od autora.

Shrnutí textu

Shrnutí textu je technika extrakce klíčových informačních prvků z rozsáhlého textu. Manuální je obtížný a časově náročný úkol, proto se zpracování přirozeného jazyka a algoritmy strojového učení staly základem pro shrnutí textu. populární pro její automatizaci.

Na trhu existují hotová řešení, ať už ve formě knihoven nebo hotových nástrojů pro koncové uživatele.

V tomto článku si připravíme vlastní řešení na míru, které zároveň nevyžaduje pokročilé znalosti datové vědy.

NLP Cloud

NLP Cloud je poskytovatelem několika rozhraní API pro zpracování textu pomocí modelů strojového učení. Jedním z nich je textový sumarizátor, který vypadá slibně z hlediska jednoduché implementace.

Souhrnovač poskytovaný službou NLP Cloud je abstraktní, což znamená, že mohou být generovány nové věty a části s nízkým poměrem informace k šumu jsou odstraněny.

Podívejme se na příklad:

Rozhraní API pro shrnutí textu

Předáme blok textu a model vrátí shrnutí. Práce v konzole však není příliš pohodlná. Přimějme tedy aplikaci Dokumenty Google, aby vybraný fragment textu shrnula tímto způsobem.

Rozšíření Dokumentů Google

Naším cílem je vytvořit pohodlnou nabídku, aby shrnutí textu probíhalo automaticky z Dokumentů Google.

Struktura projektu Apps Script

Takto je strukturován náš projekt. Pomocí Apps Scriptu rozšíříme grafické uživatelské rozhraní o tlačítko, které spustí funkce komunikující s rozhraním NLP Cloud API, a poté vložíme níže uvedený výsledek.

Začneme přípravou doplňku pro menu.

Tvorba menu

Použití skriptů Google Apps k přidání vlastních funkcí do Dokumentů Google je poměrně snadné. Uživatelské rozhraní můžete přizpůsobit pomocí nových nabídek, dialogových oken a postranních panelů. Chcete-li vytvořit skript, po otevření Dokumentů Google vyberte Nástroje -> Editor skriptů.

V této funkci by měly být přidány všechny prvky rozhraní: onOpen. Spustí se po otevření dokumentu a umožní nám přidat nabídku.

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

Po uložení skriptu a obnovení Dokumentů byste měli najít nový prvek nabídky "Text Summarizer".

Nabídka Dokumenty Google

Musíme získat vybraný text a poté implementovat následující funkci: summarizeSelection.

Získat výběr

Složitější je získat aktuálně vybraný text a předat ho funkcím. To je možné díky této funkci: 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];
}

Funkce jednoduše vezme celý odstavec a zkrátí jej na vybraný fragment. Vrátí také index odstavce, abyste věděli, kam vložit shrnutí.

Nyní odešleme text do rozhraní API a analyzujme výsledek.

Externí rozhraní API

K přímému zadávání požadavků API použijeme následující službu: UrlFetch. Požadavek na API pro shrnutí textu vyžaduje autorizaci pomocí tokenu. Chcete-li jej získat, zaregistrujte se na adrese nlpcloud.com (stačí bezplatný tarif).

Požadované rozhraní API vrací nezpracovanou odpověď JSON na požadavek.

Nezapomeňte, že veškerý text zpracovávaný tímto skriptem je odesílán do externího rozhraní 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!');
    }

}

Chcete-li tuto funkci vyzkoušet, stačí v Dokumentech vybrat fragment textu a v nabídce Dokumenty zvolit možnost Shrnutí textu -> Shrnout výběr.

Po chvíli zpracování by se mělo zobrazit vyskakovací okno s výsledkem, který můžete i zkopírovat.

Generování shrnutí textu

Psaní odpovědi na dokument

Nakonec můžeme přímo do dokumentu vložit shrnutí vygenerované rozhraním API. Pro snadnější rozlišení text shrnutí zvýrazněte tučným písmem. Proto následující funkce vrací také index odstavce vybraného textu: getSelectedText.

Tímto způsobem přesně víme, kam máme skriptu Apps Script říci, aby nový text vložil.

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

Otestujme konečnou verzi:

Výstupy

Vytvoření aplikace, která rozšiřuje funkce Dokumentů Google na základě externích rozhraní API, je zajímavou alternativou k budování rozsáhlých systémů pro automatizaci nepohodlných pracovních kroků. Jednotlivé komponenty lze navíc nahradit v závislosti na potřebách a specifických dovednostech. Naše řešení lze například rozšířit o detekci emocí nebo klasifikaci textu (rovněž dostupné v NLP Cloud). Můžete si také připravit vlastní rozhraní API nebo jednoduché funkce přímo v aplikaci Apps Script.

Papírové letadlo

Děkujeme za přečtení. Doufám, že jste si čtení užili stejně jako já, když jsem pro vás tuto knihu psal.