コンテンツ

pythonでMeCab+ユーザー辞書を動かすまで一苦労したので解決法を提供。

MeCab64bitをダウンロード

本家は32ビット版しか配布していないので64ビット化されたものをダウンロード

https://github.com/ikegami-yukino/mecab/releases

MeCab 0.996 64bit version Latest
公式ではなくいわゆる野良ビルドの64bit版MeCabです。

インストール方法

文字コードを選ぶ。推奨がSJISになっている。UTF8を選ぶとpythonで使える。ただし、Windows上では文字化けする。気にしなくてよい。Windows上でお試ししたければSJISを選べば動くがpythonで問題が起きると思われる。

 

pythonから使うにはパスを通す

C:\Program Files\MeCab\bin
ユーザー環境変数とシステム環境変数のどちらに入れてよいのか分からず両方入れたけど元気に動いている

IPA辞書をインストールする

MeCab 0.996 64bitを管理者権限でインストールと自動的に一緒にインストールされる。

 

pythonからMeCabを使う準備

pip install mecab-python3

 

DLLエラーが出た場合

ImportError: DLL load failed while importing _MeCab: 指定されたモジュールが見つかりません。
が出たら下記にあるように
https://github.com/SamuraiT/mecab-python3/issues/98
C:\Users\xxxxx\AppData\Roaming\Python\lib\site-packages\MeCab\libmecab.dll を
C:\Users\xxxxx\AppData\Roaming\Python\Python311\site-packages\MeCab 下にコピーする

 

pythonからMeCabを使うコード

import MeCab
m = MeCab.Tagger(“-Owakati”)
print(m.parse(“mecabは使いにくい”))

ユーザー辞書

MeCabのユーザー辞書を作る方法

user.csvはutf8 BOMなしの文字コードで作った
Excelで作ってutf8で保存するとBOMありになるようです。それをVS Codeで文字コード変換すればよい。

MeCabのユーザー辞書をコンパイルする方法

コマンドプロンプトを管理者権限で開く
まずはコマンドプロンプトの文字コードをutf8に変更
set path=%path%;C:\Windows\System32
chcp 65001

フォルダを移動してここから本番
cd C:\Program Files\MeCab\dic\ipadic
コンパイルのコマンドはこれ。user.csvからuser.dicを作る。
mecab-dict-index -f utf8 -t utf8 -u user.dic user.csv

なお、これだと
mecab -u user.dic
でコマンドプロンプトから試しても文字コードの問題でうまく動かない様子だがpythonからだと動く
表示が化けているだけでなく、そもそも入力した文字列を正しく認識していない様子。

>mecab -u user.dic
コアプラス
險伜捷,荳闊ャ,*,*,*,*,*
R 蜷崎ゥ・蝗コ譛牙錐隧・邨・ケ・*,*,*,*
險伜捷,荳闊ャ,*,*,*,*,*
A 蜷崎ゥ・蝗コ譛牙錐隧・邨・ケ・*,*,*,*
險伜捷,荳闊ャ,*,*,*,*,*
v 蜷崎ゥ・蝗コ譛牙錐隧・邨・ケ・*,*,*,*
ラ 險伜捷,荳闊ャ,*,*,*,*,*
X 蜷崎ゥ・蝗コ譛牙錐隧・邨・ケ・*,*,*,*
EOS

コンパイル時のエラー

viterbi.cpp(50) [tokenizer_->open(param)] tokenizer.cpp(130) [sysdic->isCompatible(*d)] incompatible dictionary: user.dic
このようなエラーが出たら文字コードが合っていない。utf8(BOMなし)で作ってutf8を指定してコンパイルしよう。

コンパイル結果をよく見よう

C:\Program Files\MeCab\dic\ipadic>mecab-dict-index -f utf8 -t utf8 -u user.dic user.csv
reading user.csv … 1033
emitting double-array: 100% |###########################################|
dictionary.cpp(499) [bofs] permission denied: user.dic
辞書の作成が完了して一安心みたいな表示だが、書き込みでエラーが出ている。書き込むには管理者権限で実行すべし。

MeCabのユーザー辞書を使うコード

m = MeCab.Tagger(“-Owakati -u user.dic”)
ユーザー辞書へのパス指定がよくわからず.pyファイルと同じ場所にuser.dicを置いた方が早かった
user.dicを指定しているがuser.dicだけではなくシステム辞書も参照して動作する。

 

ユーザー辞書に登録した単語がシステム辞書より優先されることもあれば劣後することもある

原因不明。
池袋信用金庫 1288 1288 1 名詞 固有名詞 一般 * * * 池袋信用金庫 池袋信用金庫
西池袋信用組合 1288 1288 1 名詞 固有名詞 一般 * * * 西池袋信用組合 西池袋信用組合
という書式で入れている。反応する単語もあるのだが、
池袋 信用 金庫 のように切られてしまって、無視されているユーザー辞書の単語もある。

ややこしい。

TOP