rails 独学して軽くにちゃんまとめつくる

mecab に単語を追加するユーザー辞書を追加する

まずは動作確認をして追加できることを確かめて安心しよう。

コマンドラインでシステム辞書のディレクトリを探すために

find / -name "mecab-dict-index"  と入力し、 mecab-dict-index のある場所を探す ぼくの環境では /usr/lib/mecab/mecab-dict-index だった。

コマンドラインでユーザー辞書のディレクトリを探すために

find / -name "dicrc" として `dicrc がある場所を探す。 ぼくの環境では/var/lib/mecab/dic/ipadic/dicrcとなった。ここからdicrcを外した /usr/share/mecab/dic/ipadic/` を使う。

③ユーザー辞書をつくる。場所はどこでもいいが、①に近い場所がいいですのでこういう場所にするのが理想だと思う。

mkdir /usr/lib/mecab/dic/userdic

でもなぜかできなかったので

mkdir userdic としてフォルダをつくり、その中に user.dic という空のファイルをつくる。

よってあらわすディレクトリは userdic/user.dic となる

csv 形式で辞書をつくる。 foo.csv という名前にしておいて以下の内容をコピペしよう。

フォロワー,0,0,1,名詞,固有名詞,*,*,*,*,ふぉろわー,ふぉろわー,ふぉろわー 保存する場所はここではルートディレクトリにした。

/usr/lib/mecab/mecab-dict-index -d /usr/share/mecab/dic/ipadic/ -u dic/user.dic foo.csv

として追加。構成は (①で得たディレクトリ) -d (②で得たディレクトリ) -u (③のディレクトリ) (④のディレクトリ) とする。

⑤完了。 echo 'フォローよろしく!' | mecab -u userdic/user.dic と入力してたしかめてくれ。

 $ find / -name "mecab-ipadic"

find: `/root': Permission denied
find: `/lost+found': Permission denied
find: `/nix/.cache': Permission denied
/usr/share/doc/mecab-ipadic

辞書ファイルを作ろう。サンプルとしてルートディレクトリに foo.csv という名前をつけた。「フォロー」という単語をつけたそう。

フォロワー,0,0,1,名詞,固有名詞,*,*,*,*,ふぉろわー,ふぉろわー,ふぉろわー

これをコピペすればいい。そんで、

$ /usr/lib/mecab/mecab-dict-index -d /usr/share/doc/mecab-ipadic -u foo.csv -f utf-8 -t utf-8 foo.csv

dictionary_compiler.cpp(82) [param.load(DCONF(DICRC))] no such file or directory: /usr/share/doc/mecab-ipadic/dicrc

サイトに書かれていた通りするとこんなエラーがでた。よくわからんが、 dicrc がないといわれたので $ find / -name "dicrc" とすると

$ find / -name "dicrc"

/var/lib/mecab/dic/ipadic-utf8/dicrc
/var/lib/mecab/dic/ipadic/dicrc
/usr/share/mecab/dic/ipadic/dicrc

とかいてあった。複数あるがどうやら /var/lib/mecab/dic/ipadic/dicrc というのが正しいかんじ。で次に -d だけをいれてみると

$ /usr/lib/mecab/mecab-dict-index -d /usr/share/mecab/dic/ipadic/dicrc 
dictionary_compiler.cpp(82) [param.load(DCONF(DICRC))] no such file or directory: /usr/share/mecab/dic/ipadic/dicrc/dicrc

ありゃりゃ。 dicrc というのは不要だったようだ。ということで dicrc をはずしてもう一度実行すると

$ /usr/lib/mecab/mecab-dict-index -d /usr/share/mecab
/dic/ipadic/

reading /usr/share/mecab/dic/ipadic/unk.def ... 40
emitting double-array: 100% |###########################################| 
/usr/share/mecab/dic/ipadic/model.def is not found. skipped.
reading /usr/share/mecab/dic/ipadic/Others.csv ... 2
reading /usr/share/mecab/dic/ipadic/Interjection.csv ... 252
reading /usr/share/mecab/dic/ipadic/Symbol.csv ... 208
reading /usr/share/mecab/dic/ipadic/Adverb.csv ... 3032
reading /usr/share/mecab/dic/ipadic/Noun.name.csv ... 34202
(中略)

reading /usr/share/mecab/dic/ipadic/Adnominal.csv ... 135
reading /usr/share/mecab/dic/ipadic/Filler.csv ... 19
reading /usr/share/mecab/dic/ipadic/Noun.number.csv ... 42
reading /usr/share/mecab/dic/ipadic/Noun.adjv.csv ... 3328
emitting double-array: 100% |###########################################| 
reading /usr/share/mecab/dic/ipadic/matrix.def ... 1316x1316
emitting matrix      : 100% |###########################################| 

done!

ん?なんかダウンロードしてしまった。。。それと同時にルートディレクトリに char.binmatrix.binunk.dicsys.dic というのができた。

次にのこるフラグの -u を追加して実行する。

 $ /usr/lib/mecab/mecab-dict-index -d /usr/share/mecab/dic/ipadic/ -u foo.csv  foo.csv


reading foo.csv ... 1
emitting double-array: 100% |###########################################| 

done!

ふむふむ。どうやら完了したらしい。動作確認をしよう。わざわざ .rb を作成せずともコマンドラインで実行できる。

 $ echo 'フォローよろしくれ!' | mecab


フォロー        名詞,サ変接続,*,*,*,*,フォロー,フォロー,フォロー
よろしく        形容詞,自立,*,*,形容詞・イ段,連用テ接続,よろしい, ヨロシク,ヨロシク
れ      動詞,接尾,*,*,一段,連用形,れる,レ,レ
!       名詞,サ変接続,*,*,*,*,*
EOS

よし。完成した。。。。のか?

たしか活用は「サ変接続」ではなくて 「固有名詞」にしたはずだぞ。ユーザー辞書がうまく機能してないので反映されてないじゃないか。

そうおもって調べてみたら設定をし忘れた。

echo のときにユーザー辞書の指定をしなきゃならないらしい。 気を取り直してやってみる。

$ echo 'フォローよろしく!' | mecab -u  userdic/user.dic
フォロー        名詞,固有名詞,*,*,*,*,フォロー,フォロー,フォロー
よろしく        副詞,一般,*,*,*,*,よろしく,ヨロシク,ヨロシク
!      記号,一般,*,*,*,*,!,!,!
EOS

よし、できた。

おつかれさま。これで完了です。あとは単語を収集してついかするだけ~~