JKになりたい

何か書きたいことを書きます。主にWeb方面の技術系記事が多いかも。

MAMPのPHPにphp-mecabを導入する

MAMPPHPphp-mecabを導入する方法ってあまり載ってないようなので書いておこうと思います。 mecab自体は入っている事を前提としているので注意。

環境OSX 10.11.6

mecab 0.996 MAMP 4.0.6 PHP 7.0.12

MAMPが4系じゃない場合はアップデートして下さい。

導入

(1)php-mecabをダウンロード

git clone https://github.com/rsky/php-mecab.git

(2)mecabディレクトリに入る cd php-mecab/mecab

(3)phpizeを実行 ここで、MAMPで使っているPHPphpizeを実行する必要がある。 フルパスで指定する。

/Applications/MAMP/bin/php/php7.0.12/bin/phpize

(4)./configureを実行 ここでも、MAMPで使っているPHPphp-configを指定する必要がある。

./configure –with-php-config=/Applications/MAMP/bin/php/php7.0.12/bin/php-config –with-mecab

(5)makeの実行

make
make test
sudo make install

(6)php.iniの修正 php.iniを開いて以下の一行を加える

php.iniを開く

vi /Applications/MAMP/bin/php/php7.0.12/conf/php.ini

以下の行を追加

extension=mecab.so

(7)php-mecabが導入されている事の確認 phpinfoの出力を参照し、mecabで検索してみましょう。 導入が成功していれば、以下のような部分があるはずです。

f:id:deeptoneworks:20161124114037p:plain

php-mecabを使用してみる

PHP7でphp-mecab名前空間を用いられるようになったため、これまで通りmecab_split()等と書いても使えないので注意。

Ex1 形態素に区切る

単純に形態素にだけ区切る場合は[Mecab](http://d.hatena.ne.jp/keyword/Mecab)\split()を使う。

$query = "トマトを5cm大に切る。";
$result = \Mecab\split($query);
print_r($result);

実行結果

Array ( [0] => トマト [1] => を [2] => 5 [3] => cm [4] => 大 [5] => に [6] => 切る [7] => 。 )

Ex2 より詳細な情報を得る

$query = "トマトを5cm大に切る。";
$mecab = new \Mecab\Tagger();
$nodes = $mecab->parseToNode($query);
foreach($nodes as $node){
echo($node->getSurface()."<br/>"); #形態素の表示
echo($node->getFeature()."<br/>"); #解析結果の表示
}

実行結果

BOS/EOS,*,*,*,*,*,*,*,*
トマト
名詞,一般,*,*,*,*,トマト,トマト,トマト
を
助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
5
名詞,数,*,*,*,*,*
cm
名詞,一般,*,*,*,*,*
大
名詞,接尾,一般,*,*,*,大,ダイ,ダイ
に
助詞,格助詞,一般,*,*,*,に,ニ,ニ
切る
動詞,自立,*,*,五段・ラ行,基本形,切る,キル,キル
。
記号,句点,*,*,*,*,。,。,。
BOS/EOS,*,*,*,*,*,*,*,*