マソム自宅サーバ構築の記録

  • MeCabとphp_mecabのインストール
  • 作成日:08/05/30    更新日:09/08/07

前置き

MeCabはSennaでも使われている形態素解析エンジンです。
PHPにはMeCabを使う為の拡張モジュールphp_mecabがあるそうです。
これらをインストールして、MySQLのFULLTEXTインデックスを使った全文検索で使おうと思います。

以下を参考にさせて頂きました。有り難うございます。
Tritonnプロジェクト
MeCab: Yet Another Part-of-Speech and Morphological Analyzer
php_mecab-0.3.0: 某所より引っ越し - 讃容日記
Page2
ウノウラボ PHPとMecabでキーワード自動リンクを実装する
MySQLで全文検索 - FULLTEXTインデックスの基礎知識
Senna 組み込み型全文検索エンジン

MeCabとphp_mecabのインストール

まず、MeCabをインストールします。
Fedora 7 では、yumでインストールできます。
# yum install mecab mecab-ipadic mecab-devel
 ・・・省略・・・
Installed: mecab.i386 0:0.97-1.fc7 mecab-devel.i386 0:0.97-1.fc7 mecab-ipadic.i386 0:2.7.0.20070801-1.fc7
Complete!

次にphp_mecabをダウンロードしインストールします。

$ wget http://www.opendogs.org/pub/php_mecab-0.3.0.tgz
$ tar xzvf php_mecab-0.3.0.tgz
$ cd php_mecab-0.3.0
$ /usr/local/php5/bin/phpize
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
$ ./configure --with-php-config=/usr/local/php5/bin/php-config --with-mecab=/usr/bin/mecab-config
$ make
$ su

# make install

/usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/にインストールされました。
なお、私のようにphp.iniにextension_dirを設定していない場合は、設定が必要です。Apacheの再起動も忘れずに。
# vi /usr/local/php5/lib/php.ini
・・・省略・・・
;;extension_dir = "./"
extension_dir = "/usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/"
# /usr/local/apache2/bin/apachectl restart

MeCabをコマンドラインから使ってみる

分かち書きを試してみます。
# mecab -O wakati
今日は雨が降っていて少し寒い日ですね。
今日 は 雨 が 降っ て い て 少し 寒い 日 です ね 。
凄い、分かれてます。
読みも試してみます。
$ mecab -O wakati | mecab -Oyomi
今日は雨が降っていて少し寒い日ですね。
キョウ ハ アメ ガ フッ テ イ テ スコシ サムイ ヒ デス ネ 。
出来ますね。ちょっと感動しました。

php_mecabを使ってみる

テスト用のプログラムです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>MeCab test</title>
</head>

<body>
<?php

if( !extension_loaded('mecab.so') )
{
dl('mecab.so');

}
$dic = "/usr/lib/mecab/dic/ipadic";
ini_set('mecab.default_dicdir', $dic);

$str = "今日は雨が降っていて少し寒い日ですね。";
print_r(MeCab::split($str));

?>
</body>
</html>

実行すると、ブラウザに以下が表示されました。使えているようです。
Array ( [0] => 今日 [1] => は [2] => 雨 [3] => が [4] => 降っ [5] => て [6] => い [7] => て [8] => 少し [9] => 寒い [10] => 日 [11] => です [12] => ね [13] => 。 )

紆余曲折Tips