mecabに新しい単語を学習させる

mac上で実行するために文字コードをUTF-8にしたりして居いる以外は殆ど公式サイトと変わらない。

■インストール

brew install mecab
brew install mecab-ipadic

これによってインストールされるmecab-ipadicには、csvが含まれず最小構成となっているため、別途ダウンロードする。

wget https://mecab.googlecode.com/files/mecab-ipadic-2.7.0-20070801.tar.gz
wget https://mecab.googlecode.com/files/mecab-ipadic-2.7.0-20070801.model.bz2
tar xvzf mecab-ipadic-2.7.0-20070801.tar.gz
bzip2 -d mecab-ipadic-2.7.0-20070801.model.bz2
mv mecab-ipadic-2.7.0-20070801.model mecab-ipadic-2.7.0-20070801/
mv mecab-ipadic-2.7.0-20070801 ~/
cd ~/mecab-ipadic-2.7.0-20070801/ #適当な場所

設定ファイル

vim /usr/local/Cellar/mecab/0.996/etc/mecabrc

以下のようになっている。

dicdir =  /usr/local/Cellar/mecab/0.996/lib/mecab/dic/ipadic

UTF-8化

後述のmecab-cost-trainに文字コードオプションがなさそうで上手くいかないため変換する。

cp -r mecab-ipadic-2.7.0-20070801 mecab-ipadic-2.7.0-20070801.utf8
cd mecab-ipadic-2.7.0-20070801.utf8
nkf -w -Lu --overwrite mecab-ipadic-2.7.0-20070801.model
find `pwd` -type f -exec grep -Il "" {} \; | xargs -I{} nkf -w -Lu --overwrite {}
#find `pwd` -maxdepth 1 -type f -name '*.csv' | xargs -I{} nkf -w -Lu --overwrite {} # CSVだけじゃだめ

grep

UTF-8にファイルを変換していれば問題ないのだが、EUC-JPのままの場合は以下のようにする必要がある。

ggrep `echo "名詞,固有名詞,人名" | nkf -e` -r Noun.* | nkf -w

ターミナルをEUC-JPにしてもいいのだが、これだけのために設定変更するのは面倒。

■新規単語の追加

vim add.csv
小島よしお,1289,1289,7438,名詞,固有名詞,人名,一般,*,*,小島よしお,コジマヨシオ
なう,0,0,0,助詞,終助詞,*,*,*,*,なう,ナウ,ナウ
まーす,0,0,0,助動詞,*,*,*,特殊・マス,基本形,まーす,マース,マース

コストなどの推定

/usr/local/Cellar/mecab/0.996/libexec/mecab/mecab-dict-index -m mecab-ipadic-2.7.0-20070801.model -f utf8 -t utf8 -d ~/mecab-ipadic-2.7.0-20070801/ -u add2.csv -a add.csv 

新規単語の学習

cオプションでUTF-8を指定するのを忘れるとEUC-JPで出力されて、mecabコマンドの出力が文字化けする。

/usr/local/Cellar/mecab/0.996/libexec/mecab/mecab-dict-index -f utf8 -t utf8 -c utf8 -d ./ -o ./

学習データの作成

以下の例を用いる。タブ区切りであることに注意する必要がある。

vim train
京都	名詞,固有名詞,地域,一般,*,*,京都,キョウト,キョート
なう	助詞,終助詞,*,*,*,*,なう,ナウ,ナウ
EOS
ラーメン	名詞,一般,*,*,*,*,ラーメン,ラーメン,ラーメン
なう	助詞,終助詞,*,*,*,*,なう,ナウ,ナウ
EOS
行っ	動詞,自立,*,*,五段・カ行促音便,連用タ接続,行く,イッ,イッ
て	助詞,接続助詞,*,*,*,*,て,テ,テ
き	動詞,非自立,*,*,カ変・クル,連用形,くる,キ,キ
まーす	助動詞,*,*,*,特殊・マス,基本形,まーす,マース,マース
EOS

以下のコマンドで学習させる。new_modelがutf8とeuc-jpが混在で出力される

/usr/local/Cellar/mecab/0.996/libexec/mecab/mecab-cost-train -M mecab-ipadic-2.7.0-20070801.model -d ./ train new_model 
mkdir new_dictionary
/usr/local/Cellar/mecab/0.996/libexec/mecab/mecab-dict-gen -d ./ -o ./new_dictionary -m new_model

以下のコマンドで辞書をコンパイルする。

/usr/local/Cellar/mecab/0.996/libexec/mecab/mecab-dict-index -f utf8 -t utf8 -c utf8 -d ./ -o ./new_dictionary

以下のコマンドで辞書を指定してmecabを起動する。

mecab -d ./new_dictionary

binary以外、dictionaryはgit管理してもいいかもしれない。

■ユーザー辞書

/usr/local/Cellar/mecab/0.996/libexec/mecab/mecab-dict-index -d ./ -u add.dic -f utf8 -t utf8 add.csv
mecab -u add.dic

参考

■UniDic

wget http://sourceforge.jp/frs/redir.php?m=jaist&f=%2Funidic%2F58338%2Funidic-mecab-2.1.2_model.zip
wget http://sourceforge.jp/frs/redir.php?m=jaist&f=%2Funidic%2F58338%2Funidic-mecab-2.1.2_src.zip
unzip unidic-mecab-2.1.2_src.zip
unzip unidic-mecab-2.1.2_model.zip
cd unidic-mecab-2.1.2_src
./configure
make
vim dicrc

以下のようにして出力形式を揃える

;output-format-type = unidic

前述のcsvの形式でも学習はできる。しかしlex.csvを見ると以下の形式となっている。

表層形,左文脈ID,右文脈ID,コスト,品詞大分類,品詞中分類,品詞小分類,品詞細分類,活用型,活用形,語彙素読み,語彙素(語彙素表記+語彙素細分類),書字形出現形,発音形出現形,書字形基本形,発音形基本形,語種,語頭変化型,語頭変化形,語末変化型,語末変化形
/usr/local/Cellar/mecab/0.996/libexec/mecab/mecab-dict-index -d ./ -o ./

参考

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です