PHPで形態素解析エンジンであるMeCabを使えるようにする為の手順をメモしておく。

MeCab: Yet Another Part-of-Speech and Morphological Analyzer

MeCab - Wikipedia

形態素解析 - Wikipedia


環境

OS:Ubuntu19.10

Apache 2.4.41

PHP 7.3.11-1+ubuntu19.10.1+deb.sury.org+6

※PHP8.3でも動作することは確認済み

Server API FPM/FastCGI

上記以外で重要な値

Loaded Configuration File:/etc/php/7.3/fpm/php.ini

Scan this dir for additional .ini files:/etc/php/7.3/fpm/conf.d


アプリケーションサーバを構築した時の手順

Apache - SOY CMSを使ってみよう


MeCabのインストール

sudo apt install mecab
sudo apt install libmecab-dev
sudo apt install mecab-ipadic-utf8

#インストールの確認
mecab -v

#MeCabを試して、何かの文章を打ち込んでみる
mecab
#次の行で「今日は晴天なり」等を入力してみる。下記のような結果が返ってくる
/***************************************/
今日は晴天なり
今日	名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
晴天	名詞,一般,*,*,*,*,晴天,セイテン,セイテン
なり	助動詞,*,*,*,文語・ナリ,基本形,なり,ナリ,ナリ
/***************************************/

#MeCabで使用する辞書の変更
git clone https://github.com/neologd/mecab-ipadic-neologd.git
cd mecab-ipadic-neologd
sudo bin/install-mecab-ipadic-neologd
sudo nano /etc/mecabrc

#mecabrcを開いたら下記のように変更
dicdir = /usr/lib/x86_64-linux-gnu/mecab/dic/mecab-ipadic-neologd

#MeCabを試して、何かの文章を打ち込んでみる
mecab
#次の行で「今日は晴天なり」等を入力してみる

ubuntu 18.10 に mecab をインストール - Qiitaを参考


php-mecabをインストール

sudo apt-get install php7.3-dev
git clone https://github.com/rsky/php-mecab.git
cd php-mecab/mecab/
phpize
sudo ./configure
sudo make
sudo make test
sudo make install

sudo nano /etc/php/7.3/mods-available/mecab.ini
#エディタを開いたら、下記の値を入力
/***************************************/
extension=mecab.so
/***************************************/

#php-fpmで使用できるようにする
sudo ln -s /etc/php/7.3/mods-available/mecab.ini /etc/php/7.3/fpm/conf.d/20-mecab.ini

#CLIで使用できるようにする
sudo ln -s /etc/php/7.3/mods-available/mecab.ini /etc/php/7.3/cli/conf.d/20-mecab.ini

sudo /etc/init.d/apache2 restart

GitHub - rsky/php-mecab: MeCab binding for PHPを参考


下記のコードでテスト

/ドキュメントルート/index.php

<?php
$str = "今日は晴天なり";
$t = new \MeCab\Tagger();
$m = explode("\n", $t->parse($str));
var_dump($m);

ブラウザで開いて見ると、

array(6) {
  [0]=>
  string(61) "今日	名詞,副詞可能,*,*,*,*,今日,キョウ,キョー"
  [1]=>
  string(40) "は	助詞,係助詞,*,*,*,*,は,ハ,ワ"
  [2]=>
  string(61) "晴天	名詞,一般,*,*,*,*,晴天,セイテン,セイテン"
  [3]=>
  string(69) "なり	助動詞,*,*,*,文語・ナリ,基本形,なり,ナリ,ナリ"
  [4]=>
  string(3) "EOS"
  [5]=>
  string(0) ""
}

端末から実行してみると、

php /var/www/html/index.php
array(6) {
  [0]=>
  string(61) "今日	名詞,副詞可能,*,*,*,*,今日,キョウ,キョー"
  [1]=>
  string(40) "は	助詞,係助詞,*,*,*,*,は,ハ,ワ"
  [2]=>
  string(61) "晴天	名詞,一般,*,*,*,*,晴天,セイテン,セイテン"
  [3]=>
  string(69) "なり	助動詞,*,*,*,文語・ナリ,基本形,なり,ナリ,ナリ"
  [4]=>
  string(3) "EOS"
  [5]=>
  string(0) ""
}