Имате проблеми с ИИ или разработката на пълен пакет? Нашите експерти са тук, за да ви напътстват: индивидуални съвети, техническа интеграция и др. Свържете се с [email protected].

Добавяне на обобщител на текст в Google Docs с помощта на API за обобщаване на текст на Natural Language Processing Cloud

Article by Rafał Rybnik, Ръководител на отдела за разработка на софтуер в Instytut Badań Pollster

Независимо дали сте писател, специалист по данни или просто преглеждате източници, за да си свършите работата, четенето по-дълги текстове, за да изтръгнете трохи информация, може да бъде доста изтощително. Автоматизирането на такива елементи от работата ви позволява да се съсредоточите върху творческата страна на нещата.

Обобщаване на текст
Освен ако не е посочено друго, всички снимки в статията са на автора.

Обобщаване на текст

Обобщаването на текст е техника за извличане на ключови информационни елементи от обемен текст. Ръчно обобщаването на текстове е трудна и времеемка задача, така че алгоритмите за обработка на естествен език и машинно обучение станаха популярни, за да я автоматизират.

На пазара има готови решения под формата на библиотеки или готови инструменти за крайни потребители.

В тази статия ще подготвим наше собствено решение, което в същото време не изисква напреднали познания в областта на науката за данните.

NLP Cloud

NLP Cloud е доставчик на множество приложни програмни интерфейси (API) за обработка на текст с помощта на модели за машинно обучение. Един от тях е обобщителят на текст, който изглежда обещаващ от гледна точка на простото изпълнение.

Обобщителят, предоставен от NLP Cloud, е абстрактен, което означава, че могат да се генерират нови изречения и да се премахват части с ниско съотношение информация-шум.

Нека видим един пример:

API за обобщаване на текст

Предаваме блок от текст, а моделът връща резюме. Но работата в конзола не е много удобна. Затова нека накараме Google Docs да обобщи избрания фрагмент от текста по този начин.

Разширяване на Google Docs

Нашата цел е да създадем удобно меню, което да позволява автоматичното обобщаване на текст от Google Docs.

Структура на проекта Apps Script

Ето как е структуриран нашият проект. С помощта на Apps Script ще разширим графичния потребителски интерфейс с бутон, който ще задейства функции, комуникиращи с NLP Cloud API, и след това ще вмъкнем резултата по-долу.

Ще започнем с подготовката на добавка към менюто.

Изготвяне на меню

Използването на скриптове на Google Apps за добавяне на персонализирани функционалности към Google Docs е сравнително лесно. Можете да персонализирате потребителския интерфейс с нови менюта, диалогови прозорци и странични ленти. За да създадете скрипт, след като отворите Google Docs, изберете Инструменти -> Редактор на скриптове.

Всички елементи на интерфейса трябва да бъдат добавени в тази функция: onOpen. Тя се стартира след отваряне на документа и ни позволява да добавим менюто.

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

След като запазите скрипта и обновите Docs, трябва да откриете нов елемент от менюто "Text Summarizer".

Меню на Документи в Google

Трябва да получим избрания текст и след това да приложим следната функция: summarizeSelection.

Получаване на селекция

Трудната част е получаването на текущо избрания текст и предаването му на функциите. Това е възможно благодарение на тази функция: 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];
}

Функцията просто взема целия параграф и го съкращава само до избрания фрагмент. Тя връща и индекса на параграфа, за да знаете къде да вмъкнете резюмето.

Сега нека изпратим текста към API и да анализираме резултата.

Външни приложни програмни интерфейси

Ще използваме следната услуга, за да правим директно заявки към API: UrlFetch. Заявката за API за обобщаване на текст изисква оторизация чрез токен. За да го получите, регистрирайте се на nlpcloud.com (безплатният план е напълно достатъчен).

Заявеният API връща необработен JSON отговор за заявката.

Не забравяйте, че всички текстове, обработвани от този скрипт, се изпращат към външен 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!');
    }

}

За да тествате функционалността, просто изберете фрагмент от текст в Docs и изберете Text Summarization -> Summarize selection от менюто Docs.

След известно време на обработка трябва да се появи изскачащ прозорец с резултата, който можете дори да копирате.

Генериране на резюме на текст

Писане на отговор на документ

И накрая, можем да вмъкнем резюме, генерирано от API, директно в документа. За по-лесно разграничаване удебелете текста на резюмето. Ето защо следващата функция връща и индекса на параграфа на избрания текст: getSelectedText.

По този начин ще знаем къде точно да кажем на Apps Script да вмъкне новия текст.

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

Нека тестваме окончателната версия:

Изводи

Изграждането на приложение, което разширява функционалността на Google Docs въз основа на външни API, е интересна алтернатива на изграждането на големи системи за автоматизиране на неудобни работни стъпки. Освен това отделните компоненти могат да бъдат заменени в зависимост от нуждите и специфичните умения. Например нашето решение може да бъде разширено с разпознаване на емоции или класификация на текстове (налично и в NLP Cloud). Можете също така да подготвите свой собствен API или прости функции директно в Apps Script.

Хартиен самолет

Благодарим ви, че четете. Надявам се, че четенето ви е доставило удоволствие, както и писането на този текст за вас.