LoginSignup
28
7

More than 3 years have passed since last update.

WEBページの文章が長い!~自然言語処理APIを使って要約してみた~

Last updated at Posted at 2019-12-17

本記事は 自然言語処理 #2 Advent Calendar 2019 の18日目の記事です。

はじめに

website_news.png

ブラウザを使って毎日IT系ニュースを読んでいて、記事の全文を読んでいると時間がかかるのでなんとかしたい!と思ったことはありませんか?

私はあります。

というわけで、無料で使えるAIエンジン搭載のAPIサービスを使って文章要約をしてみることにしました。

やってみたこと

COTOHA API のうちの要約API(β)を利用して、Chrome Extension(拡張機能)の作成にチャレンジしてみました。

COTOHA APIは、developer契約することで誰でも利用可能です。

また、要約API(β)については、本文の最後に紹介しますが、元の文章から重要な文を抽出するタイプの要約機能です。

作成した拡張機能アプリ

ここで作成した拡張機能は、Githubからダウンロードできます。

text_summary_chrome_extension

設置の仕方は、READMEに書かれていますので、ここでは省略します。

使い方

使い方についてもREADMEに書かれていますが、ここにも簡単に書いておきます。

設置ができたら、ブラウザに表示されたアイコン右クリック→「オプション」で表示される画面で、COTOHA APIの契約情報を設定しておきます。

設定画面
設定画面.png

COTOHA APIの契約情報を"Client ID"と"Client Secret"に設定します。
また、オリジナルテキストから抽出したい文の数を"抽出文数"に設定します。
これは実際に使ってみると、抽出文数は3~5くらいが丁度良さそうな感じでした。

設定はこれで全部です。
あとは使うだけですが、使い方は次の通りです。

  1. ブラウザに表示された文章に対して、要約したい箇所をマウスの左クリックで選択状態にする
  2. 1.の状態のまま、拡張機能のアイコンをクリックする
  3. 選択した文章とともに抽出箇所をハイライト表示する

使用イメージ
要約例.png

この拡張機能を使うことで、ブラウザを使って文章を読む時間を短縮することができました!

アプリの概要

作成したアプリについて、主要な部分を概要レベルで説明したいと思います。

今回作成したChrome Extensionアプリは、HTML、CSS、JSON、javascript等で構成されていますが、簡単に作ることができました。

manifest.json

Extensionはmainfest.jsonファイルで設定します。

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で行っています。

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で実装します。

閲覧しているページの選択テキストの取得

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を呼び出すことはできません。

popup.js
        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月には、重要な要素を組み合わせて自然な要約文を生成する機能も提供予定です。

自然言語解析を手軽に利用できる「COTOHA API」に「音声合成」など3つのAPIを追加

28
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
7