RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのエンジニアブログ

WindowsにMeCabを入れてPHPで動かしてみる

はじめに

新卒1年目エンジニアのkasuke18と申します。
先月に開催された社内の技術交流会ビアバッシュの発表の中でMeCabについて触れた発表がありました。
ビアバッシュ...?という方はこちらをご参照ください。

そのMeCabに興味をもちましたので、今回の記事ではMeCabWindowsに導入して使ってみます。以下は私の環境でインストールしたときのものなので、ディレクトリなどを随時読み替えてください。

まずはサンプル

形態素解析とはどのようなものかを確認するサンプルを作成、HEROKUにデプロイして公開しています。まずは触って動かしてみましょう!

MeCabとは

MeCabオープンソースの日本語の形態素解析エンジンです。(公式ページ
OSはUnix系でもWindowsでも使用可能ですが、私用のPCがWindowsのため、今回はWindowsMeCabを導入しました。

MeCabの導入…の前に

WindowsMeCabを導入するといっても、単純にWindowsに入れるというわけではありません。もちろん公式にはWindowsインストーラが用意されているので、単に利用するだけならそれを使用することが一番早いです。
しかしインストーラでインストールされる標準の辞書が古く、新しい単語に弱いので、より適切に形態素解析を行うなら新語に対応した辞書が必須です。その辞書の導入がインストーラからインストールした場合は難しいので、今回は別の手段を用いました。
それがWindows Subsystem for Linuxというものです。

Windows Subsystem for Linuxとは

簡単に言うと、Windows上でLinuxが動かせるよ!といったものです。 対応するLinuxディストリビューションUbuntuOpenSUSE1などです。(公式DOC参照)
今回は使用するディストリビューションとしてUbuntuを選択しました。

Windows Subsystem for Linuxの導入

こちらのQiitaの記事が詳しいので、そちらをご確認ください。

MeCabの導入

さて、前置きが長くなってしまいましたが、いよいよMeCabの導入です。
といっても特段難しい手順ではありません。以下のコマンドを実行すれば導入できると思います。

sudo apt update
sudo apt upgrade
sudo apt install make automake autoconf autotools-dev m4 mecab libmecab-dev mecab-ipadic-utf8

導入したので動作確認を行います。以下のコマンドでMeCabが実行できます。

mecab

正しく実行されると入力モードになりますので、何かを入力し、改行してみましょう。改行で形態素解析が行われ、結果が表示されます。

f:id:kasuke18:20180325214534p:plain
図1. MeCabコマンドを実行

新語対応の辞書(mecab-ipadic-NEologd)を使う

前述のとおり、標準の辞書は古いので新語に対応していません。新語に対応した辞書が必要で、その辞書の一つにmecab-ipadic-NEologdというものがあります。mecab-ipadic-NEologdははてなキーワードのダンプデータなどをもとに毎週月曜日と木曜日に更新されます。はてなキーワードの単語の豊富さを考えると、業界用語などの特化した単語を除き、基本的にはmecab-ipadic-NEologdで事足りるでしょう。

mecab-ipadic-NEologdの導入

GitHubのREADMEに丁寧に手順が記載されています。さらに英語だけでなく、日本語で書かれたREADMEも用意されているので、至れり尽くせりです。 以下にコマンドのみ記載しておきます。

sudo apt install git make curl xz-utils file
sudo sed -i -e 's%/lib/mecab/dic%/share/mecab/dic%' /usr/bin/mecab-config
git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
./bin/install-mecab-ipadic-neologd -n -a

導入したので動作確認を行います。以下のようにMeCabコマンドの-dオプションを使用することでmecab-ipadic-NEologdを辞書とした形態素解析を実行できます。

mecab -d /usr/share/mecab/dic/mecab-ipadic-neologd

正しく実行されると入力モードになりますので、何かを入力し、改行してみましょう。改行で形態素解析が行われ、結果が表示されます。

f:id:kasuke18:20180325215344p:plain
図2. mecab-ipadic-NEologdを使ったMeCabコマンドの実行

MeCabPHPから使用する

上記の手順でMeCabを用いた形態素解析が可能になりましたが、PHPなどの各種スクリプト言語からの使用するには面倒です。そこで各種スクリプト言語向けにバインディングされたものがありますので、それを利用します。今回はPHPを使用しますが、公式には用意されていないので、このphp-mecabを利用します。

php-mecab導入のため、以下のコマンドを実行しましょう。

cd /usr/local/src/
git clone https://github.com/rsky/php-mecab.git
cd php-mecab/mecab
phpize
./configure --with-php-config=/usr/bin/php-config --with-mecab=/usr/bin/mecab-config
make
make test
make install

導入後、PHPで使用するためにextentionファイルを作成します。

echo 'extention=mecab.so' > /etc/php/7.0/cli/php.d/mecab.ini

これでPHPからMeCabを使用するための準備が整いました。サンプルコードを以下に示しますので実際に動かしてみましょう。

<?php
dl('mecab.so');
$option = array('-d', '/usr/share/mecab/dic/mecab-ipadic-neologd');
$t = new \MeCab\Tagger($option);
$str = 'すもももももももものうちにももはいくつあるでしょう';

echo $t->parse($str);

エラーなく実行できると以下のような結果が得られます。

f:id:kasuke18:20180325215402p:plain
図3. mecab-phpを用いたサンプルコードの実行

おわりに

この記事ではWindowsMeCabを入れてPHPで動かすまでの手順を紹介しました。私が試してみたときはphp-mecabを入れるときに詰まりましたが、MeCab本体を入れるところまでは全く詰まらずに進められました。PHPなどで使うことを考えず気軽に形態素解析を行うという点では、MeCabはちょうどいいのかなと感じました。

参考文献


  1. よろしければこちらもご一読ください。 「openSUSE」で始める初めてのLinuxデスクトップ

Copyright © RAKUS Co., Ltd. All rights reserved.