本記事は 自然言語処理 #2 Advent Calendar 2019 の18日目の記事です。
はじめに
ブラウザを使って毎日IT系ニュースを読んでいて、記事の全文を読んでいると時間がかかるのでなんとかしたい!と思ったことはありませんか?
私はあります。
というわけで、無料で使えるAIエンジン搭載のAPIサービスを使って文章要約をしてみることにしました。
やってみたこと
COTOHA API のうちの要約API(β)を利用して、Chrome Extension(拡張機能)の作成にチャレンジしてみました。
COTOHA APIは、developer契約することで誰でも利用可能です。
また、要約API(β)については、本文の最後に紹介しますが、元の文章から重要な文を抽出するタイプの要約機能です。
作成した拡張機能アプリ
ここで作成した拡張機能は、Githubからダウンロードできます。
設置の仕方は、READMEに書かれていますので、ここでは省略します。
使い方
使い方についてもREADMEに書かれていますが、ここにも簡単に書いておきます。
設置ができたら、ブラウザに表示されたアイコン右クリック→「オプション」で表示される画面で、COTOHA APIの契約情報を設定しておきます。
COTOHA APIの契約情報を"Client ID"と"Client Secret"に設定します。
また、オリジナルテキストから抽出したい文の数を"抽出文数"に設定します。
これは実際に使ってみると、抽出文数は3~5くらいが丁度良さそうな感じでした。
設定はこれで全部です。
あとは使うだけですが、使い方は次の通りです。
- ブラウザに表示された文章に対して、要約したい箇所をマウスの左クリックで選択状態にする
- 1.の状態のまま、拡張機能のアイコンをクリックする
- 選択した文章とともに抽出箇所をハイライト表示する
この拡張機能を使うことで、ブラウザを使って文章を読む時間を短縮することができました!
アプリの概要
作成したアプリについて、主要な部分を概要レベルで説明したいと思います。
今回作成したChrome Extensionアプリは、HTML、CSS、JSON、javascript等で構成されていますが、簡単に作ることができました。
manifest.json
Extensionはmainfest.jsonファイルで設定します。
{
"name": "__MSG_0001__",
"description": "__MSG_0010__",
"version": "1.0",
"manifest_version": 2,
"options_page": "options.html",
"permissions": ["storage", "activeTab"],
"default_locale": "ja",
"browser_action": {
"default_icon": "cotoha16.png",
"default_title": "__MSG_0001__",
"default_popup": "popup.html"
},
"icons": {
"16": "cotoha16.png",
"48": "cotoha48.png"
}
}
主な設定項目は、以下の3項目です。
- permissions:オプション(設定用)ページで設定した値を保存するために"storage“を、要約したい選択テキストを取得するために"activeTab”の2つを許可しています。
- option_page:設定用のオプションページの設定を、browser_actionでは、Extensionのアイコンをクリックされた際の処理を記述します。
- browser_action:ブラウザに表示されるアイコンの設定を指定します。
オプション設定画面の実装
COTOHA 要約APIを利用するために必要な、いくつかの設定値を保存します。
このオプション設定画面では、下記3つの情報を保存しています。
- Client ID
- Client Secret
- sent_len
実装はoptions.htmlから読みだされるoptions.jsで行っています。
//設定値の読込
chrome.storage.local.get([
'clientId',
'clientSecret',
'sent_len'],
function(value) {
// 省略
}
//設定値の保存
chrome.storage.local.set({
'clientId': clientId ,
'clientSecret':clientSecret ,
'sent_len': sent_len,
}, function(){
// 省略
}
browser_actionの実装
このExtensionの幹の部分です。
popup.htmlから読みだされるpopup.jsで実装します。
閲覧しているページの選択テキストの取得
chrome.tabs.executeScript({
code: "window.getSelection().toString();",
}, function(selection) {
docs = selection[0];
// 省略
});
chrome.tabs.executeScriptを使い、"window.getSelection().toString();"スクリプトを実行することで、選択テキストを取得できます。
応答データは配列となっているため、selection[0]が実際の選択部分になります。
COTOHA APIのトークンの取得
ここからはCOTOHA APIの操作方法に沿った動作の実装になります。
まず最初に、オプション設定したClient IDとClient Secretを利用して、AccessTokenを取得します。
これをやらずに、いきなり要約APIを呼び出すことはできません。
json_data = {
"grantType":"client_credentials",
"clientId": clientId,
"clientSecret":clientSecret
};
// 省略
$.ajax({
type: "post",
url: "https://api.ce-cotoha.com/v1/oauth/accesstokens",
data: JSON.stringify(json_data),
contentType: 'application/json',
dataType: "json",
success: function (data) {
token = data.access_token;
func();
},
COTOHA API要約の実施
さきほどのchrome.tabs.executeScriptで取得した選択テキストと、オプション設定した抽出文数を使って要約します。
要約の表示
最後の仕上げとして、要約文を表示するのですが、ただ表示するだけでは単純なのでもう一手間加えたいと思います。
要約API(β)は抽出型なので、選択したテキストに対して抽出された重要文部分をハイライト表示をします。
まず、取得した要約結果を文ごとに分割します。
句点(“。”)が文からなくなりますが、ハイライト表示時に文の区切りが分かりやすいのでこのままにしています。
ハイライト表示はreplacer()で実施しています。
まとめ
どうでしたか?
COTOHA APIの要約API(β)を利用することで、Webページの選択テキストを要約するChrome Extensionを作成できました。
この先は、海外ページの英語を翻訳・要約して表示したり、要約部分を読み上げたり等、他のAPIと組み合わせてやってみたいと思います。
参考:COTOHA APIについて
COTOHA API は、NTTコミュニケーションズが提供する自然言語処理ライブラリです。
Developer登録することで、自然言語処理系APIが無料で利用できるので、迷うことなく申し込みできます。
(利用回数に上限があるものの、WEBページ閲覧程度の利用であれば気にするほどの制限ではありません。)
そのなかでも要約機能は、テキストデータ(原文)の中から重要な文を抽出する機能です。
来年の3月には、重要な要素を組み合わせて自然な要約文を生成する機能も提供予定です。