インターネット上にはテキストコンテンツがたくさんあります。ブログはもちろん、ニュースサイトやツイート、Facebookの投稿など様々です。そうしたコンテンツを解析する用途に使えるのがYahoo! デベロッパーネットワークのテキスト解析WebAPIです。

今回のこの中の一つ、キーフレーズ抽出を使ってテキストの中から特徴的な表現(キーフレーズ)を抽出してみます。そのタイトルを特徴付けるキーワードが分かるはずです。

作るアプリ

できあがった形は次のようになります。まず、Wikipediaのページを検索するためのキーワードを入力します。例えばHTML5で検索します。

するとWikipediaの「HTML5」ページ内にある文字の中で特徴的なキーワードがリストアップされます。

iPhoneで検索した場合です。

ソースコード全文はgoofmint/YahooKeyPhrase_Monacaにアップロードしてあります。

必要なもの

今回のアプリで必要なものはYahoo!デベロッパーネットワークのアカウントになります。下記URLより取得してください(無料ですが、Yahoo! Japanアカウントが必要です)。

アプリケーションを登録したら、 js/app.js を書き換えます。

let yahooAppId = 'YOUR_YAHOO_APP_ID';

なお、今回はOnsen UIを使っています。ライブラリとしてイベントハンドリングにjQuery、HTML文字のタグ除去にpathable/truncateを使っています。

画面について

今回は一画面です。検索入力と検索を実行するボタン、そして結果を表示するリストという構成になっています。

<body>
  <ons-page>
    <p style="text-align: center; margin-top: 10px;">
      <ons-input id="keyword" modifier="underbar" float></ons-input>
    </p>
    <section style="padding: 8px">
      <ons-button modifier="large" id="load">読み込む</ons-button>
    </section>
    <section style="padding: 8px">
      <ons-list id="results">
      </ons-list>
    </section>
  </ons-page>
</body>

コンテンツの取得

WikipediaのコンテンツはWikipediaが公式に提供するWeb API(MediaWiki 操作 API)を使っています。詳細はAPI:メイン ページ - MediaWikiに載っています。

Web APIを使ってコンテンツを取得後、JSONから本文を抜き出しています。その後、 jQuery.truncate を使ってHTMLタグを除去します。

let wikipediaUrl = 'https://ja.wikipedia.org/w/api.php';

let keyword = $('#keyword').val();
// Wikipediaのコンテンツを取得します
$.ajax({
  url: wikipediaUrl,
  dataType: 'json',
  data: {
    format: 'json',
    // アクション
    action: 'query',
    // rvparseをつけるとMediaWiki記法ではなくHTMLで返ってきます
    rvparse: 1,
    // 本文取得の指定です
    rvprop: 'content',
    // 欲しい情報の指定です
    prop: 'revisions',
    titles: keyword
  }
})
.then(function(results) {
  //本文を抽出します
  let key = Object.keys(results.query.pages)[0];
  let content = results.query.pages[key].revisions[0]['*'];
  content = jQuery.truncate(content, {
    length: 1000,
    stripTags: true
  });
});

キーフレーズ抽出

次に、取得したコンテンツからキーフレーズを抽出します。キーフレーズ抽出APIはGET/POST両方に対応していますが、POSTの場合はユーザエージェントにアプリIDを指定する必要があります。JavaScriptではセキュリティ上、Ajax時にユーザエージェントの書き換えができません。そのため、今回はGETを使っています。POSTの場合は100KBまでのリクエストが可能です。

$.ajax({
  url: yahooUrl,
  type: 'get',
  dataType: 'jsonp',
  data: {
    appid: yahooAppId,
    sentence: content,
    output: 'json'
  }
})

そして結果を受け取ったら <ons-list /> 内に出力します。

// 返ってきた文字をリスト表示します
$('#results').empty();
let html = [];
for (let key in results) {
  html.push(`${key}`);
}
$('#results').html(html.join(''));

テキスト解析は様々な場面で使えます。今回はWikipediaのコンテンツを使いましたが、他にも様々な情報が入力源として使えるはずです。

今回のコードはgoofmint/YahooKeyPhrase_Monacaにアップロードしてあります。実装時の参考にしてください。