MeCabの辞書に新しい単語を追加してみたいと思います。
追加する単語はWikipediaとはてなのものを使用します。
Wikipediaの準備
$ wget http://dumps.wikimedia.org/jawiki/latest/jawiki-latest-all-titles-in-ns0.gz $ gunzip jawiki-latest-all-titles-in-ns0.gz
はてなの準備
$ wget http://d.hatena.ne.jp/images/keyword/keywordlist_furigana.csv $ nkf -w --overwrite keywordlist_furigana.csv
CSV変換用のスクリプトを作成する
# makedic.rb require 'csv' CSV.open("onomasticon.csv", 'w') do |csv| %w(jawiki-latest-all-titles-in-ns0 keywordlist_furigana.csv).each do |filename| open(filename).each do |title| title.strip! next if title =~ %r(^[+-.$()?*/&%!"'_,]+) next if title =~ /^[-.0-9]+$/ next if title =~ /曖昧さ回避/ next if title =~ /_\(/ next if title =~ /^PJ:/ next if title =~ /の登場人物/ next if title =~ /一覧/ title_length = title.length if title_length > 3 score = [-36000.0, -400 * (title_length ** 1.5)].max.to_i csv << [title, nil, nil, score, '名詞', '一般', '*', '*', '*', '*', title, '*', '*'] end end end end
エントリーのフォーマット
表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音
- 左文脈IDと右文脈IDは空にしておくと自動的にIDを付与してくれる。
- コストは参考サイトにあったものを使ってみた。
辞書のコンパイル
$ ruby makedic.rb $ /usr/local/libexec/mecab/mecab-dict-index -d /usr/local/lib/mecab/dic/ipadic -u onomasticon.dic -f utf-8 -t utf-8 onomasticon.csv reading onomasticon.csv ... 1605477 emitting double-array: 100% |###########################################| done!
オプション
-d システム辞書があるディレクトリ -u 辞書ファイル名 -f CSVの文字コード -t バイナリ辞書の文字コード
ユーザー辞書を指定して実行する
$ mecab 人工無脳 人工 名詞,一般,*,*,*,*,人工,ジンコウ,ジンコー 無 接頭詞,名詞接続,*,*,*,*,無,ム,ム 脳 名詞,一般,*,*,*,*,脳,ノウ,ノー EOS $ mecab -u onomasticon.dic 人工無脳 人工無脳 名詞,固有名詞,*,*,*,*,人工無脳,*,* EOS
認識してくれるようになった!