almalinux9とphp8.3にmecabをインストール

almalinux9にmecab本体をインストール

EPELリポジトリを有効化

sudo dnf install epel-release

インストールできることの確認

sudo dnf list mecab mecab-ipadic

mecabをインストール

sudo dnf install mecab mecab-ipadic

インストールできたことの確認

mecab -v

PHP用のMeCab拡張をインストール

peclをインストール

sudo dnf install php-pear php-devel gcc make

インストールできたことの確認

pecl version

PECL経由でMeCab PHP拡張がインストール可能か確認

pecl search mecab

結果

no packages found that match pattern "mecab", for channel pecl.php.net.

MeCab拡張がPECLで見つからないので、ソースから手動でインストールする

git cloneするためのディレクトリに移動(どこでもいい)

cd ~/projects

cloneする。今の環境になってるものを利用すること!

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

以下は古いのでダメ↓

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

ディレクトリに移動

cd ~/projects/php-mecab/mecab

phpize を実行

phpize

configure スクリプトができたことを確認

できた configure スクリプトを実行

./configure

エラー。mecab-configがない

checking for mecab-config… configure: error: not found

mecab-config は mecab-devel パッケージに含まれているので、mecab-devel をインストールしたい

mecab-develが既にインストールされているかを確認

sudo dnf list installed mecab-devel

リポジトリからインストールが可能かを確認

$ sudo dnf list available mecab-devel
Last metadata expiration check: 0:56:58 ago on Tue 08 Oct 2024 08:41:18 AM JST.
Error: No matching Packages to list

groongaというリポジトリにあるようなので追加

参考サイト

AlmaLinux8でneologdを入れるまで
利用者のみなさん

リポジトリを追加

sudo dnf install https://packages.groonga.org/almalinux/9/groonga-release-latest.noarch.rpm

Groongaのインストール(必要か?)

sudo dnf install groonga

↑エラーが出てうまくインストールできなかった。

sudo dnf install groonga --skip-broken

これならできた。リポジトリリストにはgroongaが追加されていれば、上記コマンドは不要かも

有効なリポジトリの一覧

sudo dnf repolist

mecab-develがインストール可能かどうか

sudo dnf list available mecab-devel

可能になっているはずなのでインストール

sudo dnf install mecab-devel

再度実行

cd ~/projects/php-mecab/mecab
phpize
./configure
make
make test(めちゃスキップされる)
make install

mecab.soがあることの確認

ls /usr/lib64/php/modules/ | grep mecab

php.iniの最終行に以下の一行を追加

extension=mecab.so

変更を反映

sudo systemctl restart php-fpm

mecabの動作テストファイル

<?php

// インスタンスを生成
$mecab = new \MeCab\Tagger();

// 解析
$nodes = $mecab->parseToNode( 'MeCabを試してみました' );

// 解析結果の取得例
foreach ( $nodes as $node ) {

    // BOS/EOSはスキップ
    if ( $node->getStat() >= 2 ) {
        continue;
    }

    // 分解された文字列 (例:試し)
    echo $node->getSurface(), "\n";

    // 品詞ID (例:31)
    echo $node->getPosId(), "\n";

    // 区分(0.通常、1.不明(未知語)、2.BOS(文頭)、3.EOS(文末) ※BOS、EOSはヘッダとフッタ)
    echo $node->getStat(), "\n";

    // 情報をまとめた文字列 (例:動詞,自立,*,*,五段・サ行,連用形,試す,タメシ,タメシ)
    echo $node->getFeature(), "\n";

}

ファイルの元データ

PHP+MeCabで形態素解析 #2 | make is.dev
MeCabを使って形態素解析を試してみる。PHPとMeCabの連携にはphp_mecabを使う。 ソースからビルドしないといけないのでやや面倒だったりハマッたり。環境によってはビルドからのインストール自体が難しかったり。
タイトルとURLをコピーしました