Δυσκολεύεστε με το AI ή την ανάπτυξη πλήρους πακέτου; Οι ειδικοί μας είναι εδώ για να σας καθοδηγήσουν: εξατομικευμένες συμβουλές, τεχνική ενσωμάτωση και πολλά άλλα. Επικοινωνήστε μαζί μας στο [email protected].

Προσθέστε έναν συνοψιστή κειμένου στα Έγγραφα Google χρησιμοποιώντας το 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.

Δομή έργου Apps Script

Έτσι είναι δομημένο το έργο μας. Χρησιμοποιώντας το Apps Script, θα επεκτείνουμε το GUI με ένα κουμπί που θα ενεργοποιεί συναρτήσεις που επικοινωνούν με το NLP Cloud API και στη συνέχεια θα εισάγουμε το παρακάτω αποτέλεσμα.

Θα ξεκινήσουμε με την προετοιμασία μιας προσθήκης για το μενού.

Δημιουργία μενού

Η χρήση των Google Apps Scripts για την προσθήκη προσαρμοσμένων λειτουργιών στα Έγγραφα Google είναι αρκετά εύκολη. Μπορείτε να προσαρμόσετε τη διεπαφή χρήστη με νέα μενού, πλαίσια διαλόγου και πλευρικές γραμμές. Για να δημιουργήσετε ένα σενάριο, αφού ανοίξετε τα Έγγραφα Google, επιλέξτε Εργαλεία -> Επεξεργαστής σεναρίων.

Όλα τα στοιχεία διασύνδεσης θα πρέπει να προστεθούν σε αυτή τη λειτουργία: onOpen. Εκτελείται μετά το άνοιγμα του εγγράφου και μας επιτρέπει να προσθέσουμε το μενού.

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

Μετά την αποθήκευση του σεναρίου και την ανανέωση των εγγράφων, θα πρέπει να βρείτε το νέο στοιχείο μενού "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 και ας αναλύσουμε το αποτέλεσμα.

Εξωτερικά APIs

Θα χρησιμοποιήσουμε την ακόλουθη υπηρεσία για να κάνουμε απευθείας αιτήσεις 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!');
    }

}

Για να δοκιμάσετε τη λειτουργικότητα, απλώς επιλέξτε ένα τμήμα κειμένου στα Έγγραφα και επιλέξτε Text Summarization -> Summarize selection από το μενού Έγγραφα.

Μετά από λίγη ώρα επεξεργασίας, θα εμφανιστεί ένα αναδυόμενο παράθυρο με το αποτέλεσμα, το οποίο μπορείτε να αντιγράψετε.

Δημιουργία περίληψης κειμένου

Γράφοντας απάντηση στο έγγραφο

Τέλος, μπορούμε να εισάγουμε μια περίληψη που δημιουργείται από το 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.

Χάρτινο αεροπλάνο

Σας ευχαριστώ για την ανάγνωση. Ελπίζω να σας άρεσε να διαβάζετε όσο μου άρεσε να το γράφω αυτό για εσάς.