MeCabに人名辞書を追加
By Huy Van
生成された辞書(バイナリ)はどこでも使えますので、辞書生成はMac側で行います。
インストール
$ brew install mecab mecab-ipadic
構成
## /usr/local/Cellar/mecab
└── 0.996
├── AUTHORS
├── COPYING
├── ChangeLog
├── INSTALL_RECEIPT.json
├── NEWS
├── README
├── bin
│ ├── mecab
│ └── mecab-config
├── include
│ └── mecab.h
├── lib
│ ├── libmecab.2.dylib
│ ├── libmecab.a
│ └── libmecab.dylib -> libmecab.2.dylib
├── libexec
│ └── mecab
│ ├── mecab-cost-train
│ ├── mecab-dict-gen
│ ├── mecab-dict-index
│ ├── mecab-system-eval
│ └── mecab-test-gen
└── share
└── man
└── man1
└── mecab.1
## /usr/local/Cellar/mecab-ipadic
└── 2.7.0-20070801
├── AUTHORS
├── COPYING
├── ChangeLog
├── INSTALL_RECEIPT.json
├── NEWS
├── README
└── lib
└── mecab
└── dic
└── ipadic
├── char.bin
├── dicrc
├── left-id.def
├── matrix.bin
├── pos-id.def
├── rewrite.def
├── right-id.def
├── sys.dic
└── unk.dic
辞書をダウンロード
辞書リストの中からこの人名辞書と女の子の名前が良さそうなのでダウンロードします。
MeCab用のcsv生成
ダウンロードしたファイルはテキストなのでMeCab用のcsvフォーマットに変換することが必要です。
例えば、
亜衣,,,,名詞,固有名詞,人名,姓,*,*,あい,アイ,jinmei
2から4番目までは左文脈ID、右文脈ID、コストの順番になります。これらの値はMeCabで推定しますので、空のままでよいです。
最後はなんでもいいです。今は人名辞書なのでjinmei
にしました。
Rubyなどのスクリプト言語で適当に変換スクリプトを書いたらOKです。注意するのはもとのファイルはJIS-SHIFT文字コードが多いのでUTF-8に変換が必要です。
コスト推定
コストは小さいほど出現率が高いそうです。適当に小さい値を入れてもいいですが、既存の辞書と相性悪くなるのでちゃんと既存辞書からコスト推定を行います。
まず、学習済みモデルをダウンロードします。
モデルファイル文字コードもEUC_JPのためUTF-8に変換します。
nkfが入っていない方は、$ brew install nkf
してください。
$ nkf --overwrite -Ew mecab-ipadic-2.7.0-20070801.model
モデルファイルのcharsetをutf-8に変更:
-charset: euc-jp
+charset: utf-8
brewからインストールしたipadicはfeature.def
ファイルがないので、途中でエラーがでました。ipadicをダウンロードして、feature.def
をシステムのipadicディレクトリにコピーしたら良いです。
$ cp feature.def /usr/local/lib/mecab/dic/ipadic
コスト推定の実行:
$ /usr/local/Cellar/mecab/0.996/libexec/mecab/mecab-dict-index -m resources/mecab-ipadic-2.7.0-20070801.model -d /usr/local/lib/mecab/dic/ipadic -u output/jinmei.csv -f utf-8 -t utf-8 -a output/jinmei_nocost.csv
-m: モデルファイル -d: ipadic辞書 -a: 入力csv -u: 出力csv(コストが含まれる) -f: 入力csvのcharset(デフォルトEUC-JP) -t: 出力csvのcharset(デフォルトEUC-JP)
結果:
resources/mecab-ipadic-2.7.0-20070801.model is not a binary model. reopen it as text mode… reading output/jinmei_nocost.csv … done!
以上のメッセージが出たら成功です。出力csvを確認します:
亜衣,1290,1290,7569,名詞,固有名詞,人名,姓,*,*,あい,アイ,jinmei
csvからdic(バイナリ)に変換
同じくMeCabのmecab-dict-indexコマンドを使います。
$ /usr/local/Cellar/mecab/0.996/libexec/mecab/mecab-dict-index -d /usr/local/lib/mecab/dic/ipadic -u output/jinmei.dic -f utf-8 -t utf-8 output/jinmei.csv
reading output/jinmei.csv … 11892 emitting double-array: 100% |###########################################| done!
jinmei.dic
が生成されたら成功です。
ユーザー辞書をMeCabに追加
mecabrcファイルに以下の行を追加してください。
userdic = /path/to/jinmei.dic
mecabrcのパスはOSによって違います。
Macの場合: /usr/local/etc/mecabrc
Ubuntuの場合: /etc/mecabrc
お試し
$ mecab
相内信弥
相内 名詞,固有名詞,人名,姓,*,*,あいうち,アイウチ,jinmei
信弥 名詞,固有名詞,人名,名,*,*,しんや,シンヤ,jinmei