MeCabの辞書を鍛える

今日もまたMeCabのお話です。

%mecab -d ~/local/lib/mecab/dic/ipadic-utf8
東京タワーに遊びに行こう
東京 名詞,固有名詞,地域,一般,*,*,東京,トウキョウ,トーキョー
タワー 名詞,一般,*,*,*,*,タワー,タワー,タワー
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
遊び 名詞,一般,*,*,*,*,遊び,アソビ,アソビ
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
行こ 動詞,自立,*,*,五段・カ行促音便,未然ウ接続,行く,イコ,イコ
う 助動詞,*,*,*,不変化型,基本形,う,ウ,ウ
EOS

東京タワーは「東京」「タワー」ではなく
「東京タワー」として認識して欲しいところです。

MeCabの辞書を鍛えてみましょう。

Mecab: 単語の追加方法が参考になります。
http://mecab.sourceforge.net/dic.html

ふむふむ。

今回は"ユーザ辞書への追加"を参考にします。

伏字検索で使用しているはてなキーワードWikipediaのデータ
を転用して辞書登録用のcsvファイルを作りました。

%wc user.csv
1172862 1279472 83256524 user.csv

117万語です。

早速辞書を作ってみましょう。
語数が多いのは大丈夫でしょうか...

%/usr/local/libexec/mecab/mecab-dict-index -d$HOME/local/lib/mecab/dic/ipadic-utf8 -u userdic.dic -f utf8 -t utf8 user.csv

%ls -l userdic.dic
rw-r--r-- 1 onone users 169425205 Jun 5 22:41 userdic.dic

169MByteのデカイ辞書があっさりと出来てしまいました。

.mecabrcでユーザ辞書の設定ができるようです。

cp /usr/local/etc/mecabrc ~/.mecabrc
chmod +w ~/.mecabrc

dicdir = /home/onone/local/lib/mecab/dic/ipadic-utf8
userdic = /home/onone/local/dic/hatena.dic

さて試してみましょう

%mecab
Killed

(T-T)

辞書が大きすぎたのでしょうか。
はてなキーワードのみで辞書を作ってみます。

%wc user.csv
247354 262749 16580648 user.csv

24万語。

%ls -l userdic.dic
rw-r--r-- 1 onone users 32822058 Jun 5 22:50 userdic.dic

32MByte程度に減りました。

もう一度試してみます。

%mecab
東京タワーに遊びに行こう
東京タワー 名詞,固有名詞,人名,名,*,*,*,*,*
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
遊び 名詞,一般,*,*,*,*,遊び,アソビ,アソビ
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
行こ 動詞,自立,*,*,五段・カ行促音便,未然ウ接続,行く,イコ,イコ
う 助動詞,*,*,*,不変化型,基本形,う,ウ,ウ
EOS

おお、ちゃんと「東京タワー」が固有名詞として認識されました。
人名になってしまっているのはuser.csvを作成する際に手を抜いたためです。

今度はRubyスクリプトからです。

#!/usr/bin/ruby -Ku

$: << "/home/onone/local/lib/ruby"

require 'MeCab'

m = MeCab::Tagger.new("-d /home/onone/local/lib/mecab/dic/ipadic-utf8")
print m.parse("すもももももももものうち")

~/.mecabrcの設定が有効になるようです。

userdic を設定しないと場合の結果

%ruby mecab_test.rb
すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ

userdic を設定した場合の結果

%ruby mecab_test.rb
すもももももももものうち 名詞,固有名詞,人名,名,*,*,*,*,*
EOS

すもももももももものうち」がはてなキーワードにあるようです。

注意点

CGIで使用する場合は.mecabrcが読み込まれないので

m = MeCab::Tagger.new("-d システム辞書 -u ユーザ辞書")

とする必要があります。

ではでは。