新着キーワード検出クラスの作成
php_mecabをインストールしたことでphpからMeCabを利用できるMeCab_Taggerというクラスが使えます。MeCab_Taggerを使うと次のようなコードでMeCabによる形態素解析結果を得られます。
$str = "2011年7月24日までにアナログテレビ放送は終了します。"; $t = new MeCab_Tagger(); $result = $t->parse($str); echo $result;
実行結果は以下のようになります。
2011 名詞,数,*,*,*,*,* 年 名詞,接尾,助数詞,*,*,*,年,ネン,ネン 7 名詞,数,*,*,*,*,* 月 名詞,一般,*,*,*,*,月,ツキ,ツキ 24 名詞,数,*,*,*,*,* 日 名詞,接尾,助数詞,*,*,*,日,ニチ,ニチ まで 助詞,副助詞,*,*,*,*,まで,マデ,マデ に 助詞,格助詞,一般,*,*,*,に,ニ,ニ アナログ 名詞,一般,*,*,*,*,アナログ,アナログ,アナログ テレビ 名詞,一般,*,*,*,*,テレビ,テレビ,テレビ 放送 名詞,サ変接続,*,*,*,*,放送,ホウソウ,ホーソー は 助詞,係助詞,*,*,*,*,は,ハ,ワ 終了 名詞,サ変接続,*,*,*,*,終了,シュウリョウ,シューリョー し 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ ます 助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス 。 記号,句点,*,*,*,*,。,。,。
今回のサンプルではMeCab辞書に登録したとおりに形態素解析結果を返却するというMeCab_Taggerクラスの特性を利用して、文章の中の新着キーワードを検出して配列で返却するクラスを作成します。
MeCabはデフォルトではEUC-JPの文字コードで動作するため、形態素解析対象の文章をEUC-JPに文字コード変換して、結果をUTF-8で受け取れるようにします。
function getKeywords($str)
{
// 返却するキーワードを格納する配列
$_return = array();
// 改行を除く
$str = ereg_replace("\r|\n","",$str);
// EUC-JPへ文字コード変換
$str = mb_convert_encoding ($str, "EUC-JP", auto );
// 形態素解析の実行
$t = new MeCab_Tagger();
// 結果を1行単位に分割
$m = explode("\n", $t->parse($str));
foreach($m as $k=>$v){
// UTF-8に文字コード変換
$line = mb_convert_encoding ( $v, "UTF-8", auto );
// 新着キーワード検出
if(strstr($word, 'はてなキーワード') ){
$keyword = explode("名詞", $word);
$_return[] = trim($keyword[0]);
}
}
return $_return;
}
前項で紹介したように新着キーワードの形態素解析は以下のようになります。
オタク中野要塞 名詞,固有名詞,キーワード,*,*,*,*,オタク中野要塞,オタク中野要塞,はてなキーワード
解析結果に「はてなキーワード」があれば今回MeCabに登録した新着キーワードと判断して「名詞」より左のキーワードを返却します。上記の例のようにMeCab_Taggerクラスを利用するとMeCabに登録した辞書の書式で形態素解析結果からさまざまな処理を行うことができます。
HTML内の文章を形態素解析し、新着キーワードのハイライトを行う
Ajaxを用いてHTML内の特定の箇所内の文章を形態素解析します。そのために必要なプロセスとして次の3つの作業が考えられます。
- HTML内の特定の箇所の文章を抜き出す
- 抜き出した文章をPHPに送信し、PHP内でキーワードの検出を行う
- PHPが出力した結果を受け取って表示処理を行う
本記事ではAjaxライブラリprototype.jsを利用して上記3つの機能を実装します。prototype.jsはAjaxを利用するHTML内で次のように呼び出すだけで、同じHTML内で使用するJavascriptすべてでprototype.jsのメソッドが利用できるという利点があります。
<script type="text/javascript" src="js/prototype.js"></script>
サンプル実行時にはprototype.jp本家サイトよりversion 1.6.1をダウンロードしてサンプルフォルダ内のjsフォルダに配置してください。
prototype.jsの主なメソッドは以下の通りです。
| メソッド名 | 概要 |
|---|---|
| $() | document.getElementById()関数へのショートカット |
| $F() | テキストボックスやドロップダウンリストのような、入力フォームフィールドの値を返却する |
| Ajax.Updater | Ajaxで指定エレメントの内容を書き換える |
| Ajax.Request | Ajaxリクエストを行う |
Ajax.Requestには以下のメソッドがあり、Ajax内でリクエストを行った後の処理も比較的容易に実装できます。
| メソッド名 | 概要 |
|---|---|
| onSuccess | 通信が成功した時の処理 |
| onFilure | 通信が失敗した時の処理 |
| onComplete | 通信が完了した時の処理 |
| onException | 例外が発生した時の処理 |
Ajax.Request内に各メソッドを配置したイメージは以下のようになります。

以下の項よりAjax.Requestを利用して順を追ってAjaxによる形態素解析を説明します。
