Grūtības ar mākslīgā intelekta vai pilnas paketes izstrādi? Mūsu eksperti ir gatavi jums palīdzēt: individuāli pielāgoti padomi, tehniskā integrācija un daudz kas cits. Sazinieties ar [email protected].

Teksta apkopojuma pievienošana Google dokumentiem, izmantojot Natural Language Processing Cloud teksta apkopošanas API

Article by Rafał Rybnik, Programmatūras izstrādes vadītājs Instytut Badań Pollster

Neatkarīgi no tā, vai esat rakstnieks, datu zinātnieks vai vienkārši šķirstāt avotus, lai paveiktu darbu. garāku tekstu lasīšana, lai izvilinātu no tiem informācijas druskas, var būt diezgan nogurdinoša. Šādu elementu automatizēšana darba automatizēšana ļauj jums koncentrēties uz radošo pusi.

Teksta apkopošana
Ja vien nav norādīts citādi, visu rakstā iekļauto attēlu autors ir autors.

Teksta apkopošana

Teksta apkopošana ir metode, ar kuras palīdzību no apjomīga teksta tiek izvilkti galvenie informācijas elementi. Rokasgrāmata teksta apkopošana ir sarežģīts un laikietilpīgs uzdevums, tāpēc dabiskās valodas apstrāde un mašīnmācīšanās algoritmi kļuva populāri, lai to automatizētu.

Tirgū ir pieejami gatavi risinājumi - gan bibliotēkas, gan gatavi rīki galalietotājiem.

Šajā rakstā mēs sagatavosim savu pielāgotu risinājumu, kas tajā pašā laikā neprasa padziļinātas zināšanas datu zinātnē.

NLP Cloud

NLP Cloud ir vairāku API nodrošinātājs teksta apstrādei, izmantojot mašīnmācīšanās modeļus. Viens no tiem ir teksta kopsavilkuma meklētājs, kas izskatās daudzsološs vienkāršas ieviešanas ziņā.

NLP Cloud piedāvātais apkopojums ir abstrakts, kas nozīmē, ka var tikt ģenerēti jauni teikumi un daļas ar zemu informācijas un trokšņa attiecību tiek izņemtas.

Aplūkosim piemēru:

Teksta apkopošanas API

Mēs nododam teksta bloku, un modelis atgriež kopsavilkumu. Taču darbs konsoles režīmā nav īpaši ērts. Tāpēc liksim Google Docs apkopot atlasīto teksta fragmentu šādā veidā.

Google dokumentu paplašināšana

Mūsu mērķis ir izveidot ērtu izvēlni, lai teksta kopsavilkuma izveide notiktu automātiski no Google dokumentiem.

Apps Script projekta struktūra

Šāda ir mūsu projekta struktūra. Izmantojot Apps Script, mēs paplašināsim GUI ar pogu, kas iedarbinās funkcijas, kuras sazināsies ar NLP Cloud API un pēc tam ievietos tālāk redzamo rezultātu.

Mēs sāksim ar izvēlnes papildinājuma sagatavošanu.

Izvēlnes izveide

Izmantojot Google Apps skriptus, ir diezgan vienkārši pievienot Google dokumentiem pielāgotas funkcijas. Varat pielāgot lietotāja saskarni ar jaunām izvēlnēm, dialoglodziņiem un sānjoslām. Lai izveidotu skriptu, pēc Google Docs atvēršanas izvēlieties Rīki -> Skriptu redaktors.

Šajā funkcijā jāpievieno visi saskarnes elementi: onOpen. Tā tiek palaista pēc dokumenta atvēršanas un ļauj mums pievienot izvēlni.

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

Pēc skripta saglabāšanas un Dokumentu atsvaidzināšanas jāatrod jauns izvēlnes elements "Teksta apkopotājs".

Google Dokumenti Izvēlne

Mums ir jāsaņem atlasītais teksts un pēc tam jāimplementē šāda funkcija: summarizeSelection.

Iegūt atlasi

Sarežģītākais ir iegūt pašlaik atlasīto tekstu un nodot to funkcijām. Tas ir iespējams, pateicoties šai funkcijai: 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 vienkārši izmanto visu rindkopu un saīsina to līdz izvēlētajam fragmentam. Tā atgriež arī rindkopu indeksu, lai jūs zinātu, kur ievietot kopsavilkumu.

Tagad nosūtīsim tekstu API un analizēsim rezultātu.

Ārējās API

Lai tieši veiktu API pieprasījumus, izmantosim šādu pakalpojumu: UrlFetch. Teksta apkopošanas API pieprasījumam nepieciešama autorizācija, izmantojot token. Lai to saņemtu, reģistrējieties vietnē nlpcloud.com (bezmaksas plāns būs piemērots).

Pieprasītā API atgriež neapstrādātu JSON atbildi uz pieprasījumu.

Atcerieties, ka viss šī skripta apstrādātais teksts tiek nosūtīts uz ārējo 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!');
    }

}

Lai pārbaudītu funkcionalitāti, vienkārši atlasiet teksta fragmentu dokumentos un izvēlnē Dokumenti izvēlnē izvēlieties Dokumentu kopsavilkums -> Apkopojiet atlasi.

Pēc apstrādes brīža parādīsies uznirstošais logs ar rezultātu, kuru varat pat kopēt.

Teksta kopsavilkuma ģenerēšana

Atbildes rakstīšana uz dokumentu

Visbeidzot, mēs varam ievietot API ģenerētu kopsavilkumu tieši dokumentā. Atšķirības atvieglošanai kopsavilkuma tekstu pasvītrosiet. Tāpēc turpmāk minētā funkcija atgriež arī atlasītā teksta rindkopu indeksu: getSelectedText.

Tādējādi mēs precīzi zinām, kurā vietā lietotnei Apps Script jānorāda, lai tā ievieto jauno tekstu.

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

Izmēģināsim galīgo versiju:

Iegūtie ieguvumi

Interesanta alternatīva lielu sistēmu izveidei, lai automatizētu neērtus darba soļus, ir izveidot lietojumprogrammu, kas paplašina Google Docs funkcionalitāti, pamatojoties uz ārējām API. Turklāt atkarībā no vajadzībām un specifiskām prasmēm var aizstāt atsevišķas sastāvdaļas. Piemēram, mūsu risinājumu var paplašināt ar emociju noteikšanu vai teksta klasifikāciju (pieejama arī NLP Cloud). Varat arī sagatavot savu API vai vienkāršas funkcijas tieši Apps Script.

Papīra lidmašīna

Paldies, ka izlasījāt. Es ceru, ka jums patika lasīt tikpat labi, cik man patika to rakstīt jums.