インターネット上にはテキストコンテンツがたくさんあります。ブログはもちろん、ニュースサイトやツイート、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にアップロードしてあります。実装時の参考にしてください。