Article by Rafał Rybnik, Yazılım Geliştirme Müdürü Instytut Badań Pollster
İster bir yazar, ister veri bilimcisi olun, ister sadece bir işi bitirmek için kaynaklara göz gezdiriyor olun, okumak Bilgi kırıntılarını toplamak için daha uzun metinler oldukça yorucu olabilir. Bu tür unsurları otomatikleştirmek İşiniz, işlerin yaratıcı yönüne odaklanmanızı sağlar.

Aksi belirtilmedikçe, makaledeki tüm resimler yazara aittir.
Metin özetleme, hacimli bir metnin temel bilgi unsurlarını çıkarma tekniğidir. El Kitabı Metin özetleme zor ve zaman alıcı bir iştir, bu nedenle Doğal Dil İşleme ve makine öğrenimi algoritmaları otomatikleştirmek için popüler.
Piyasada kütüphaneler veya son kullanıcılar için hazır araçlar şeklinde hazır çözümler bulunmaktadır.
Bu makalede, aynı zamanda ileri veri bilimi bilgisi gerektirmeyen kendi özel çözümümüzü hazırlayacağız.
NLP Cloud, makine öğrenimi modellerini kullanarak metin işleme için birden fazla API sağlayıcısıdır. Bunlardan biri, basit uygulama açısından umut verici görünen metin özetleyicidir.
NLP Cloud tarafından sağlanan özetleyici soyutlayıcıdır, yani yeni cümleler oluşturulabilir ve düşük bilgi-gürültü oranına sahip kısımlar çıkarılır.
Bir örnek görelim:

Bir metin bloğu iletiyoruz ve model bir özet döndürüyor. Ancak bir konsolda çalışmak çok uygun değildir. Bu yüzden, Google Docs'un seçilen metin parçasını bu şekilde özetlemesini sağlayalım.
Amacımız, metin özetlemenin Google Docs içinden otomatik olarak gerçekleşmesi için kullanışlı bir menü oluşturmaktır.

Projemiz bu şekilde yapılandırılmıştır. Apps Script kullanarak, GUI'yi NLP Cloud API ile iletişim kuran işlevleri tetikleyecek ve ardından aşağıdaki sonucu ekleyecek bir düğme ile genişleteceğiz.
Menü için bir eklenti hazırlayarak başlayacağız.
Google Apps Komut Dosyalarını kullanarak Google Dokümanlar'a özel işlevler eklemek oldukça kolaydır. Kullanıcı arayüzünü yeni menüler, iletişim kutuları ve kenar çubuklarıyla özelleştirebilirsiniz. Bir komut dosyası oluşturmak için Google Dokümanlar'ı açtıktan sonra Araçlar -> Komut dosyası düzenleyici'yi seçin.
Tüm arayüz elemanları bu fonksiyona eklenmelidir: onOpen. Belge açıldıktan sonra çalıştırılır ve menüyü eklememizi sağlar.
function onOpen() {
var ui = DocumentApp.getUi();
ui.createMenu('Text Summarizer')
.addItem('Summarize selection', 'summarizeSelection')
.addToUi();
}
function summarizeSelection() {
// summarization function
}
Kodu kaydettikten ve Docs'u yeniledikten sonra, yeni menü öğesi "Metin Özetleyici" bulmalısınız.

Seçilen metni almalı ve ardından aşağıdaki işlevi uygulamalıyız: summarizeSelection.
İşin zor kısmı seçili olan metni almak ve fonksiyonlara aktarmaktır. Bu fonksiyon sayesinde bu mümkün: 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];
}
Fonksiyon basitçe tüm paragrafı alır ve sadece seçilen parçaya indirger. Ayrıca, özeti nereye ekleyeceğinizi bilmeniz için paragrafın dizinini de döndürür.
Şimdi metni API'ye gönderelim ve sonucu ayrıştıralım.
API isteklerini doğrudan yapmak için aşağıdaki hizmeti kullanacağız: UrlFetch. Metin Özetleme API isteği, token aracılığıyla yetkilendirme gerektirir. Bunu elde etmek için nlpcloud.com adresinden kaydolun (ücretsiz plan işinizi görecektir).
Talep edilen API, bir istek için ham bir JSON yanıtı döndürür.
Bu kod tarafından işlenen tüm metinlerin harici API'ye gönderildiğini unutmayın.
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!');
}
}
İşlevselliği test etmek için, Docs'ta bir metin parçası seçin ve Docs menüsünden Metin Özetleme -> Seçimi Özetleme'yi seçin.
Bir süre işlem yaptıktan sonra, sonucu içeren ve hatta kopyalayabileceğiniz bir açılır pencere göreceksiniz.

Son olarak, API tarafından oluşturulan bir özeti doğrudan belgeye ekleyebiliriz. Ayırt etme kolaylığı için özet metnini kalın yazın. Bu nedenle aşağıdaki fonksiyon seçilen metnin paragraf indeksini de döndürür: getSelectedText.
Bu şekilde, Apps Script'e yeni metni nereye eklemesini söyleyeceğimizi tam olarak biliriz.
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!');
}
}
Son sürümü test edelim:
Harici API'lere dayalı olarak Google Docs işlevselliğini genişleten bir uygulama oluşturmak, uygunsuz iş adımlarını otomatikleştirmek için büyük sistemler oluşturmaya ilginç bir alternatiftir. Dahası, ihtiyaçlara ve özel becerilere bağlı olarak münferit bileşenler değiştirilebilir. Örneğin, çözümümüz duygu algılama veya metin sınıflandırma (NLP Cloud'da da mevcuttur) ile genişletilebilir. Ayrıca kendi API'nizi veya basit işlevlerinizi doğrudan Apps Script'te hazırlayabilirsiniz.

Okuduğunuz için teşekkür ederim. Umarım benim sizin için bunları yazarken keyif aldığım kadar siz de okurken keyif almışsınızdır.