Боретеся зі штучним інтелектом або повним циклом розробки? Наші експерти допоможуть вам: індивідуальні консультації, технічна інтеграція та багато іншого. Звертайтеся за адресою [email protected].

Додайте до Документів Google текстовий редактор за допомогою API Text Summarization Cloud's Natural Language Processing Cloud

Article by Rafał Rybnik, Керівник відділу розробки програмного забезпечення в Instytut Badań Pollster

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

Стислий виклад тексту
Якщо не вказано інше, всі фотографії в статті належать автору.

Стислий виклад тексту

Реферування тексту - техніка вилучення ключових інформаційних елементів об'ємного тексту. Ручне реферування тексту є складним і трудомістким завданням, тому для його автоматизації стали популярними алгоритми обробки природної мови і машинного навчання. популярними для її автоматизації.

На ринку є готові рішення, чи то у вигляді бібліотек, чи то у вигляді готових інструментів для кінцевих користувачів.

У цій статті ми підготуємо власне індивідуальне рішення, яке в той же час не потребує поглиблених знань з науки про дані.

NLP Cloud

NLP Cloud є постачальником декількох API для обробки тексту з використанням моделей машинного навчання. Одним з таких є текстовий суматор, який виглядає перспективним з точки зору простоти реалізації.

Підсумовувач, що надається NLP Cloud, є абстрактним, що означає, що можуть генеруватися нові речення та видалятися частини з низьким співвідношенням інформація/шум.

Розглянемо приклад:

API підсумовування тексту

Ми передаємо блок тексту, а модель повертає резюме. Але працювати в консолі не дуже зручно. Отже, змусимо Google Docs узагальнити виділений фрагмент тексту таким чином.

Розширення Google Документів

Наша мета - створити зручне меню, щоб узагальнення тексту відбувалося автоматично з Google Документів.

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

Ось так побудований наш проект. Використовуючи Apps Script, ми розширимо графічний інтерфейс кнопкою, яка буде запускати функції, що взаємодіють з NLP Cloud API, а потім вставимо результат нижче.

Почнемо з підготовки доповнення до меню.

Створення меню

Використовувати скрипти Google Apps для додавання користувацьких функцій до Документів Google досить просто. Ви можете налаштувати інтерфейс користувача за допомогою нових меню, діалогових вікон і бічних панелей. Щоб створити скрипт, після відкриття Документів Google виберіть Інструменти -> Редактор скриптів.

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

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

Після збереження скрипту та оновлення документів, ви повинні знайти новий пункт меню "Підсумовувач тексту".

Меню 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

Ми будемо використовувати наступний сервіс для прямих запитів до API: UrlFetch. Запит до API Text Summarization вимагає авторизації за допомогою токена. Для його отримання необхідно зареєструватися на 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!');
    }

}

Щоб перевірити функціонал, достатньо виділити фрагмент тексту в Документах і вибрати в меню Документів пункт Підсумовування тексту -> Підсумувати виділення.

Після миті обробки ви побачите спливаюче вікно з результатом, який можна навіть скопіювати.

Формування реферату тексту

Написання відповіді на документ

Нарешті, ми можемо вставити резюме, згенероване за допомогою 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 Документів на основі зовнішніх API, є цікавою альтернативою побудові великих систем для автоматизації незручних етапів роботи. Більше того, окремі компоненти можуть бути замінені в залежності від потреб та специфічних навичок. Наприклад, наше рішення можна розширити розпізнаванням емоцій або класифікацією тексту (також доступно в NLP Cloud). Ви також можете підготувати власний API або прості функції безпосередньо в Apps Script.

Паперовий літак

Дякую, що прочитали. Сподіваюся, Вам сподобалося читати так само, як і мені було приємно писати це для Вас.