Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 1384
Warning: preg_match_all(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 700
Warning: Invalid argument supplied for foreach() in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 707
Warning: preg_match_all(): Compilation failed: invalid range in character class at offset 4 in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 700
Warning: Invalid argument supplied for foreach() in /home/neginium/www/amimilab/wp/wp-content/plugins/lightbox-plus/classes/shd.class.php on line 707
前回(Mecab導入編)からの続きで、今回はMecabをPHP上から利用できるように、PHP用のエクステンションの導入と、PHPからの使用を説明します。
php_mecabのコンパイル&インストール
以下のコマンドでphp_mecabをダウンロード&コンパイル&インストールします。
インストールの設定は、mecabの情報取得に前回導入したmecabのmecab-configを使用するようにします。
※インストール先がホームディレクトリなので、make installを使用せずに直接モジュールをコピーしています。
mkdir -p ~/local/lib/php/extensions git clone https://github.com/rsky/php-mecab.git cd php-mecab/mecab phpize ./configure --with-mecab=`echo ~`/local/bin/mecab-config make cp modules/mecab.so ~/local/lib/php/extensions/
次に先ほどインストールしたphp_mecabモジュールをphpに読み込ませる設定を、wwwディレクトリ下のphp.iniに書き込みます。
printf "extension=`echo ~`/local/lib/php/extensions/mecab.so\n\n" >> ~/www/php.in
php.iniへのモジュール読み取り設定が完了したら、php_mecab使用の準備は整いました。
PHPからMecabを利用
インスタンス化
phpからmecabを呼び出すには、Mecabクラスをインスタンス化します。
$mecab = new MeCab_Tagger();
上の文では、標準のIPA辞書を使って解析を行います。
Neologd辞書で解析を行いたい場合は、以下のようにオプションで指定します。
※環境に応じて”ホームディレクトリ”の部分は”/home/ユーザ名/”に修正してください。
//Mecabの使用ディレクトリ指定 $options = array( "-d", "ホームディレクトリ/local/lib/mecab/dic/ipadic-neologd" ); $mecab = new MeCab_Tagger($options);
解析
先ほどインスタンス化したMecabクラスを使用して、文の解析を行います。
解析は、以下のようにparseToNodeメソッドに解析文を渡して行います。
//解析対象文 $target_str =<<<EOL μ's(ミューズ)は、メディアミックス作品群『ラブライブ!』に登場する 架空の9人組女性スクールアイドルグループ、および劇中のパフォーマンスを 担当声優が再現する実在の9人組女性声優ユニットの双方の名称である。 現実世界における所属レーベルはランティス。 EOL; $node = $mecab->parseToNode($target_str);
結果表示
最後に、以下のようにWhileループで結果を表示します。
while($node){ echo "・語句: ".$node->getSurface()."\n"; echo "|_要点: ".$node->getFeature()."\n"; //次の語句へ移動 $node = $node->getNext(); }
以上のスクリプトを実行すると、以下のような結果が得られます。
<?php //Mecabの使用ディレクトリ指定 $options = array( "-d", "/home/neginium/local/lib/mecab/dic/ipadic-neologd" ); $mecab = new MeCab_Tagger($options); //解析対象文 $target_str =<<<EOL μ's(ミューズ)は、メディアミックス作品群『ラブライブ!』に登場する 架空の9人組女性スクールアイドルグループ、および劇中のパフォーマンスを 担当声優が再現する実在の9人組女性声優ユニットの双方の名称である。 現実世界における所属レーベルはランティス。 EOL; //文を解析 $node = $mecab->parseToNode($target_str); //語句ごとに処理 while($node){ echo "・語句: ".$node->getSurface()."\n"; echo "|_要点: ".$node->getFeature()."\n"; //次の語句へ移動 $node = $node->getNext(); } ?>
応用編
次は、ただ結果を表示するだけではなく、名詞のみを抜き出し、同時に読みまで表示してみましょう。
以下にソースコードを載せます。
<?php //Mecabの使用ディレクトリ指定 $options = array( "-d", "/home/neginium/local/lib/mecab/dic/ipadic-neologd" ); $mecab = new MeCab_Tagger($options); //解析対象文 $target_str =<<<EOL μ's(ミューズ)は、メディアミックス作品群『ラブライブ!』に登場する 架空の9人組女性スクールアイドルグループ、および劇中のパフォーマンスを 担当声優が再現する実在の9人組女性声優ユニットの双方の名称である。 現実世界における所属レーベルはランティス。 EOL; //文を解析 $node = $mecab->parseToNode($target_str); //語句ごとに処理 while($node){ //始点(BOS)・終点(EOS)以外を処理 if($node->getStat() != 2 && $node->getStat() != 3 ){ //文の要点を分解 $feat_list = explode(",", $node->getFeature()); //名詞のみを表示 if(count($feat_list) > 0 && $feat_list[0] === "名詞"){ if(count($feat_list) >= 8){ //読みがある場合表示 echo $node->getSurface()."(".$feat_list[7].")\n"; }else{ //無い場合読みを省略 echo $node->getSurface()."\n"; } } } //次の語句へ $node = $node->getNext(); } ?>
ソースコードを実行すると、以下のような結果が得られます。
最後に
いかがだったでしょうか?Mecabは応用次第では、Twitterなどのツイートに含まれる語句の頻出語を抜き出したりと、色々と使えそうですね。私も、新しいツールをMecabで作ってみたくなりました。
この投稿が、アイデアの創出に役立てたらなによりです。
それでは、失礼します。