LoginSignup
34

More than 5 years have passed since last update.

PHPからMeCabを利用してよみがなを取得する

Posted at

PHPなWEBアプリケーションの開発をしていて、日本語の文字列のよみがなを取得したい ってな場合に、形態素解析エンジンのMeCabを利用する方法です。

Google Codeの閉鎖が予定されているせいかプロジェクトのホスティングサイトやダウンロードURLなどが変わってました。

MeCab
http://taku910.github.io/mecab/

環境

$ cat /etc/redhat-release
CentOS release 6.6 (Final)

$ php -r "echo PHP_VERSION;"
5.6.7

MeCabインストールに必要なものが入っているか確認する

$ which g++
/usr/bin/g++

$ which iconv
/usr/bin/iconv

MeCabインストール

作業ディレクトリ作成

$ mkdir -p ~/src/mecab; cd ~/src/mecab

MeCab本体のインストール

$ curl -L -o mecab-0.996.tar.gz "https://drive.google.com/uc?id=0B4y35FiV1wh7cENtOXlicTFaRUE&export=download"
$ tar zxf mecab-0.996.tar.gz
$ (cd mecab-0.996; ./configure --enable-utf8-only && make && sudo make install)

辞書のインストール

$ curl -L -o mecab-ipadic-2.7.0-20070801.tar.gz "https://drive.google.com/uc?id=0B4y35FiV1wh7MWVlSDBCSXZMTXM&export=download"
$ tar zxf mecab-ipadic-2.7.0-20070801.tar.gz
$ (cd mecab-ipadic-2.7.0-20070801; ./configure --with-charset=utf8 && make && sudo make install)
$ (cd mecab-ipadic-2.7.0-20070801; /usr/local/libexec/mecab/mecab-dict-index -f euc-jp -t utf8 && sudo make install)

動作確認

mecabコマンドの-Oyomiオプションで、よみがなが得られることを確認します。

$ echo '敗北?私はその言葉の意味を存じ上げません。' | mecab -Oyomi
ハイボク?ワタシハソノコトバノイミヲゾンジアゲマセン。

MeCab PHPバインディングのインストール

php-mecab: MeCab binding for PHP
https://github.com/rsky/php-mecab

インストール

$ mkdir -p ~/src/github/; cd ~/src/github/
$ git clone https://github.com/rsky/php-mecab.git; cd php-mecab/mecab
$ phpize && ./configure --with-mecab=/usr/local/bin/mecab-config && make && make test && sudo make install
$ sudo sh -c "echo 'extension=mecab.so' > /etc/php.d/mecab.ini" 

動作確認

mecabコマンドと同様にPHPでも new MeCab_Tagger(array('-O' => 'yomi')) として読みが得られることを確認します。

$ cat <<EOL > /tmp/test-mecab.php
<?php
if (!extension_loaded('mecab')) {
        echo "Not loaded mecab.so". PHP_EOL;
        exit(1);
}

\$str = \$argv[1];
if (\$str) {
        echo "Test str = ". \$str . PHP_EOL;
} else {
        echo "Not found str". PHP_EOL;
        exit(1);
}

\$mecab = new MeCab_Tagger(array('-O' => 'yomi'));
echo \$mecab->parse(\$str) . PHP_EOL;
EOL
$ php /tmp/test-mecab.php "雨を喜び、風を楽しみ。"
Test str = 雨を喜び、風を楽しみ。
アメヲヨロコビ、カゼヲタノシミ。

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
34