はじめに (対象読者・この記事でわかること)

この記事は、MeCabで独自のユーザー辞書を作ろうとして「なんで辞書が生成できないんだ!」と壁にぶち当たった方、あるいはこれからMeCabを使ってカスタム辞書をビルドしたい方を対象にしています。
記事を読むことで、以下のことがわかります。

  • なぜmecab-dict-indexが見つからないのか
  • システム辞書(UTF-8版)とユーザー辞書の違いと、どちらを使うべきか
  • 実際にユーザー辞書をビルドしてMeCabに組み込むまでの具体的な手順
  • ハマりどころとその回避策

私自身、業務で新語を追加した形態素解析環境を作る必要があり、ドキュメント通りに進めても辞書が生成できずに半日溶かしました。その経験を糧に、同じ轍を踏まないための完全メモを残します。

前提知識

  • Linux(Ubuntu/Debian系)でターミナルコマンドを打てる
  • MeCabをaptまたはyumでインストールしたことがある
  • CSVファイルの基本的な編集方法を知っている

ユーザー辞書ビルドで躓くワケ:システム辞書とユーザー辞書の関係

MeCabをインストールした直後、「ユーザー辞書を作るにはCSVを書いてmecab-dict-indexを叩けば良い」とドキュメントには書いてあります。しかし、実際にコマンドを打つと

mecab-dict-index: command not found

あるいは

dictionary charset is UTF-8, but mecab was built with EUC-JP

のようなエラーが出て、先に進めません。これは次の2つの事実を理解していないためです。

  1. パッケージマネージャで入れたMeCabには開発用のビルドツールが含まれていない
  2. システム辞書とユーザー辞書は同じ文字コードでなければならない

つまり、「MeCab本体」と「辞書ビルドツール」は別物であり、さらに「システム辞書がEUC-JP版でインストールされていると、UTF-8のユーザー辞書を後から追加できない」という制約があるのです。

環境を整えてユーザー辞書をビルドするまでの実践手順

以下、Ubuntu 22.04を前提に、ゼロからユーザー辞書を生成してMeCabに組み込むまでのステップを示します。他のディストリビューションでも流れは同じです。

ステップ1:ビルドに必要なソース・辞書を揃える

パッケージマネージャだけで済ませたい気持ちもありますが、ユーザー辞書を生成するにはソースからビルドするのが最短です。まず作業用ディレクトリを作って、必要なソースを取得します。

Bash
sudo apt update sudo apt install -y build-essential git curl # 作業ディレクトリ作成 mkdir -p $HOME/mecab-build && cd $_ # MeCab本体のソース git clone --depth 1 https://github.com/taku910/mecab.git # IPA 辞書(UTF-8版) curl -L -o mecab-ipadic-2.7.0.tar.gz "https://ja.osdn.net/dl/mecab/mecab-ipadic/2.7.0-20070801.tar.gz" tar -xzf mecab-ipadic-2.7.0.tar.gz mv mecab-ipadic-2.7.0-* mecab-ipadic-utf8

ステップ2:MeCab本体をソースからビルド・インストール

mecab-dict-indexを手に入れるには、MeCab本体もソースからビルドする必要があります。

Bash
cd mecab/mecab ./configure --enable-utf8-only # UTF-8統一しておくと後々楽 make -j$(nproc) sudo make install sudo ldconfig # ライブラリパスを更新

これで/usr/local/bin/mecab-dict-indexが利用可能になります。

ステップ3:システム辞書(UTF-8版)をビルド

ユーザー辞書と文字コードを合わせるため、先にシステム辞書をUTF-8版としてビルドしておきます。

Bash
cd $HOME/mecab-build/mecab-ipadic-utf8 # 文字コードを明示 ../mecab/mecab/mecab-dict-index -d . -o . -f utf-8 -t utf-8 sudo mkdir -p /usr/local/lib/mecab/dic/ipadic-utf8 sudo cp -r * /usr/local/lib/mecab/dic/ipadic-utf8

ステップ4:ユーザー辞書用CSVを作成

MeCabのユーザー辞書はCSV形式です。最低限、表層形・左連接ID・右連接ID・コスト・品詞・原形があれば動きます。
例として「メタバース」という新語を追加してみます。

Csv
メタバース,1288,1288,5000,名詞,一般,*,*,*,*,メタバース,メタバース,メタバース

これをuser_dic.csvとして保存。

ステップ5:ユーザー辞書をバイナリ化

先ほどビルドしたmecab-dict-indexを使って、ユーザー辞書をバイナリ化します。

Bash
# 作業ディレクトリに戻る cd $HOME/mecab-build mkdir user-dic && cd $_ cp ../user_dic.csv . # システム辞書のディレクトリを明示してビルド mecab-dict-index -d /usr/local/lib/mecab/dic/ipadic-utf8 \ -f utf-8 -t utf-8 \ user_dic.csv

成功するとuser_dic.dicが生成されます。

ステップ6:MeCab設定ファイルにユーザー辞書を組み込む

/usr/local/etc/mecabrcを編集して、ユーザー辞書を読み込むようにします。

dicdir = /usr/local/lib/mecab/dic/ipadic-utf8
userdic = /home/$USER/mecab-build/user-dic/user_dic.dic

最後に動作確認。

Bash
echo "メタバースで会議した" | mecab # メタバース 名詞,一般,*,*,*,*,メタバース,メタバース,メタバース # で 助詞,格助詞,一般,*,*,*,で,デ,デ # 会議 名詞,サ変接続,*,*,*,*,会議,カイギ,カイギ # した 動詞,自立,*,*,サ変・スル,連用形,する,シタ,シタ

「メタバース」が一単語として認識されれば成功です!

ハマりどころとエラー解決

エラー1:charset mismatch

dictionary charset is UTF-8, but mecab was built with EUC-JP

原因:システム辞書がEUC-JPなのに対して、ユーザー辞書をUTF-8でビルドしようとしている
解決./configure --enable-utf8-onlyとしてMeCab本体をUTF-8統一でビルドし直すか、システム辞書もUTF-8版を用意してmecabrcdicdirを書き換える

エラー2:mecab-dict-index: command not found

原因:パッケージマネージャ版MeCabでは開発ツールが含まれていない
解決:ソースからMeCabをビルドしてインストールし直す

エラー3:Unknown node formatなどのランタイムエラー

原因:ユーザー辞書のCSVに不正な行(カラム不足、タブ混在など)がある
解決:CSVをUTF-8・LF・BOM無しで保存し、カラム数がシステム辞書と合致しているかをmecab-dict-indexのエラーメッセージで確認

解決策まとめ

  1. MeCab本体と辞書ビルドツールはソースからインストールするのが最短
  2. システム辞書とユーザー辞書は文字コードを完全に合わせる(UTF-8推奨)
  3. 辞書ビルド時は-f utf-8 -t utf-8を明示的に指定
  4. mecabrcdicdiruserdic絶対パスで記述し、ファイル権限に注意

まとめ

本記事では、MeCabでユーザー辞書を作ろうとして「mecab-dict-indexが見つからない」「文字コードが合わない」などのエラーに遭遇した際の原因と、実際に辞書をビルドしてMeCabに組み込むまでの手順を解説しました。

  • パッケージマネージャ版MeCabには開発ツールが含まれていない
  • システム辞書とユーザー辞書は同じ文字コードでなければならない
  • ソースからMeCabをビルドし、UTF-8版システム辞書を用意すれば、ユーザー辞書の生成と組み込みがスムーズに行える

この記事を通して、MeCabのカスタム辞書ビルドで躓くことが少なくなり、形態素解析の精度を上げるための第一歩を踏み出せれば幸いです。
今後は、Pythonのmecab-python3からユーザー辞書を参照する方法や、GitHub ActionsでCI上で辞書をビルドするTipsについても記事にする予定です。

参考資料