mecabに独自の辞書の追加する。
最終的には、wikipediaや、hatenaのデータもオリジナル辞書に入れる
ここに、https://mecab.googlecode.com/svn/trunk/mecab/doc/dic.html
書いてあることを基本的にはやったまで。
ただ、文字コード周りや、足らないファイルや、バックアップについて
など、メモしとく
たたいたコマンドの先頭には、#を入れておく
■概要
-------------------------
mecabへオリジナル辞書追加方法には、システム辞書への追加
ユーザー辞書への追加の2種類がある。
辞書更新が頻繁でないときや, 解析速度を落としたくない時は, 直接 システム辞書を変更するのがよいでしょう
とのことなので、システム辞書への追加を行う
■現状の確認
-------------------------
Scientific Linux release 6.0 (Carbon)
mecab-0.996-1.el6.x86_64
mecab-ipadic-2.7.0.20070801-8.el6.1.x86_64
が入っている状態
■やりたいこと
-------------------------
#mecab
綾小路きみまろ
綾小路 名詞,固有名詞,人名,姓,*,*,綾小路,アヤノコウジ,アヤノコージ
きみ 名詞,一般,*,*,*,*,きみ,*,*,wikipedia
まろ 名詞,一般,*,*,*,*,まろ,*,*,wikipedia
EOS
これを、「綾小路きみまろ」という名詞として認識させたい
■バックアップと新たなシステム辞書設置場所の用意
-------------------------
mecabの設定状況はこんな感じ
#cat /etc/mecabrc
;
; Configuration file of MeCab
;
; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $;
;
dicdir = /usr/lib64/mecab/dic/ipadic
; userdic = /home/foo/bar/user.dic
; output-format-type = wakati
; input-buffer-size = 8192
; node-format = %m\n
; bos-format = %S\n
; eos-format = EOS\n
システム辞書は、dicdirを見ているのがわかるので、こいつのバックアップを
とっておく。
#cp /usr/lib64/mecab/dic/ipadic /usr/lib64/mecab/dic/ipadic.org
これからの作業で、おかしくなる可能性があるので、必ずオリジナルのバックアップを
やっておくこと。以降の項目で、dicdirのパスを書き換えるが、うまくいかなくなったら、
dicdirのパスをオリジナルに向けなおせば、元の状態に戻る
新しいシステム辞書を置くディレクトリを掘る
#cp -r /usr/lib64/mecab/dic/ipadic /usr/lib64/mecab/dic/ipadic.update.v1
■準備
-------------------------
1.コスト自動推定の機能を使う準備
https://code.google.com/p/mecab/downloads/detail?name=mecab-ipadic-2.7.0-20070801.model.bz2
ここから、 mecab-ipadicのモデルファイルをダウンロードする
解凍して、utf8にして
/tmpに置いとく
2.ipadicのオリジナルをダウンロードする
http://sourceforge.net/projects/mecab/files/mecab-ipadic/2.7.0-20070801/
↑ここから、ipadicのオリジナルをダウンロードして、解凍する
中に、*.def *.csvが存在するので、それを全て、utf8化して、
/usr/lib64/mecab/dic/ipadic.update.v1/配下に置く
ちゃんとutf8化しておかないと、後で痛い目にあう
3.設定ファイルの変更
#vi /etc/mecabrc
;
; Configuration file of MeCab
;
; $Id: mecabrc.in,v 1.3 2006/05/29 15:36:08 taku-ku Exp $;
;
;dicdir = /usr/lib64/mecab/dic/ipadic
dicdir = /usr/lib64/mecab/dic/ipadic.update.v1
にして、保存
■オリジナル辞書の作成
-------------------------
1.オリジナル辞書の元データの用意
mecabの辞書のフォーマットは、
表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音
となっている。
なんのこっちゃわからんが、とりあえず、
#cat /tmp/test.csv
綾小路きみまろ,,,,名詞,一般,*,*,*,*,綾小路きみまろ,*,*,this_is_test_dic
※最後に、改行は入れない
を用意する
2.オリジナル辞書の作成
左文脈ID,右文脈ID,コストの部分には値が入っていないので、その値を下記の方法でセット
#/usr/libexec/mecab/mecab-dict-index -m /tmp/mecab-ipadic-2.7.0-20070801.model.utf8 -d /usr/lib64/mecab/dic/ipadic.update.v1 -u test2.csv -f utf8 -t utf8 -a test.csv
-m:コスト自動推定の機能を使うデータの場所
-d:システム辞書のディレクトリのパス
-u:オリジナル辞書出力先
-f:-dの文字コード(デフォがutf8)
-t:csvの文字コード
-a:オリジナル辞書を作成する元データ
/tmp/mecab-ipadic-2.7.0-20070801.model is not a binary model. reopen it as text mode...
reading test.csv ...
done!
できた。
#cat test2.csv
綾小路きみまろ,1285,1285,7336,名詞,一般,*,*,*,*,綾小路きみまろ,*,*,testdic
左文脈ID,右文脈ID,コストの部分にデータが入っているのが確認できる
■システム辞書アップデート
-------------------------
test2.csvができたので、/usr/lib64/mecab/dic/ipadic.update.v1にそのファイルを持っていく
#ls /usr/lib64/mecab/dic/ipadic.update.v1
Adj.csv Interjection.csv Noun.name.csv Noun.verbal.csv Symbol.csv dicrc rewrite.def
Adnominal.csv Noun.adjv.csv Noun.number.csv Others.csv Verb.csv feature.def right-id.def
Adverb.csv Noun.adverbal.csv Noun.org.csv Postp-col.csv left-id.def sys.dic
Auxil.csv Noun.csv Noun.others.csv Postp.csv matrix.bin test2.csv
Conjunction.csv Noun.demonst.csv Noun.place.csv Prefix.csv char.bin matrix.def unk.def
Filler.csv Noun.nai.csv Noun.proper.csv Suffix.csv char.def pos-id.def unk.dic
上記のような状態になっているはず。
#cd /usr/lib64/mecab/dic/ipadic.update.v1
#/usr/libexec/mecab/mecab-dict-index -f utf8 -t utf8
reading ./unk.def ... 40
emitting double-array: 100% |###########################################|
./model.def is not found. skipped.
reading ./Noun.name.csv ... 34202
reading ./Noun.number.csv ... 42
reading ./Noun.verbal.csv ... 12146
reading ./Others.csv ... 2
reading ./Symbol.csv ... 208
reading ./test2.csv ... 1
reading ./Prefix.csv ... 221
reading ./Noun.place.csv ... 72999
reading ./Interjection.csv ... 252
reading ./Adnominal.csv ... 135
reading ./Noun.csv ... 60477
reading ./Suffix.csv ... 1393
reading ./Adj.csv ... 27210
reading ./Noun.nai.csv ... 42
reading ./Noun.demonst.csv ... 120
reading ./Noun.adjv.csv ... 3328
reading ./Postp.csv ... 146
reading ./Filler.csv ... 19
reading ./Verb.csv ... 130750
reading ./Noun.org.csv ... 16668
reading ./Auxil.csv ... 199
reading ./Noun.others.csv ... 151
reading ./Postp-col.csv ... 91
reading ./Noun.adverbal.csv ... 795
reading ./Adverb.csv ... 3032
reading ./Noun.proper.csv ... 27327
reading ./Conjunction.csv ... 171
emitting double-array: 100% |###########################################|
reading ./matrix.def ... 1316x1316
emitting matrix : 100% |###########################################|
done!
#mecab
綾小路きみまろ
綾小路きみまろ 名詞,一般,*,*,*,*,綾小路きみまろ,*,*,testdic
EOS
#mecab
すもも
すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
EOS
■出会ったエラーたち
-------------------------
feature_index.cpp(81) [ifs] no such file or directory: /usr/lib64/mecab/dic/ipadic/feature.def
このエラーは、■準備:2でをちゃんとやること
viterbi.cpp(59) [tokenizer_->dictionary_info()->lsize == connector_->left_size() && tokenizer_->dictionary_info()->rsize == connector_->right_size()] Transition table and dictionary are not compatible
このえらーも、■準備:2でをちゃんとやることdefファイルがなかった
context_id.cpp(96) [it != left_.end()] cannot find LEFT-ID for 名詞,一般,*,*,*,*,*
■オリジナル辞書の作成:1のフォーマットでやればいける
■wikipediaを突っ込んでみる
-------------------------
1.データのダウンロード
#wget http://download.wikimedia.org/jawiki/latest/jawiki-latest-all-titles-in-ns0.gz
から持ってくる
2.不要な文字列を削って、オリジナル辞書のフォーマットを作る
下記ファイルを用意
#cat grepptn
^.{1,3}$
page_title
^[0-9-]+$
曖昧さ回避
^日本の
^日本に
^日本と
^日本で
^中国の
^中国に
^中国と
^中国で
^アメリカの
^アメリカに
^アメリカと
^アメリカで
^ヨーロッパの
^ヨーロッパに
^ヨーロッパと
^ヨーロッパで
_\(何か\)$
一覧$
の登場人物$
^[0-9]{4}[年|_]
^[0-9]+月[0-9]+日
で、オリジナル辞書を作るシェルを実行
#for i in $(sed -e "s/,//g" jawiki-latest-all-titles-in-ns0 | pcregrep -vf grepptn )
#do
# echo "$i,,,,名詞,一般,*,*,*,*,$i,*,*,wikipedia" >> newdic.csv
#done
これは、「,」が含まれるとおかしくなるので、それをsedで取り除いて、
pcregrepにて、不要なレコードを除外するシェル。
pcregrepのfオプションで、不要なファイルを除外するパターンファイルを指定している
3.左文脈ID,右文脈ID,コストを生成
#/usr/libexec/mecab/mecab-dict-index -m /tmp/mecab-ipadic-2.7.0-20070801.model.utf8 -d /usr/lib64/mecab/dic/ipadic.update.v1 -u wikidic.csv -f utf8 -t utf8 -a newdic.csv
これで、wikidic.csvにデータが出力されるはず
4.システム辞書に追加
/tmpに生成された、wikidic.csvをusr/lib64/mecab/dic/ipadic.update.v1に持ってきて
#cd /usr/lib64/mecab/dic/ipadic.update.v1
#/usr/libexec/mecab/mecab-dict-index -f utf8 -t utf8
で、出来上がり
■hatenaキーワードを突っ込んでみる
-------------------------
1.データのダウンロード
#wget wget http://d.hatena.ne.jp/images/keyword/keywordlist_furigana.csv
から持ってくる
あとは、一緒
おしまい