* mecab [#s6b4c636] 日本語形態素解析のためのエンジンです。 現状一番広く使われているようです。 ** 入手とインストール [#pe306bfe] 公式(http://taku910.github.io/mecab/)を参考。 -[[ダウンロード:http://taku910.github.io/mecab/#download]] -[[インストール:http://taku910.github.io/mecab/#install]] mecab本体と辞書をインストールする必要があります。 辞書は幾つか種類がありますが、トラブル時の情報の多さから、IPA辞書を入れておくと良いでしょう。 今のご時世(2017年)なら、辞書の文字コードはeucではなくutf-8にしておいた方が便利でしょう。 ./configure --with-charset=utf8 ** ユーザー辞書の追加 [#gc075b5f] csv形式で、追加したい単語を記述します。 宇佐美,,,,名詞,固有名詞,人名,姓,*,*,うさみ,ウサミ,ウサミ いちか,,,,名詞,固有名詞,人名,名,*,*,いちか,イチカ,イチカ 非活用の単語は1行で済みますが、活用する単語は記述が少々面倒です。 詳しくは公式ページを参考ください。 ユーザー辞書に追加したい単語は、基本的に固有名詞かと思うので、活用形を持つ単語を登録する機会はないかと思うのですが。 https://taku910.github.io/mecab/dic.html 続いて、文脈IDやコスト値を学習モデルから自動的に補完します。手動で直接入れることも可能ですが、加減が悩ましいので自動で入れた方が良いです。 まずmecab-ipadicのモデルファイルを[[こちら:https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7bnc5aFZSTE9qNnM]]から入手します。リンクが切れていたら、公式などから辿ってください。文字コードはeucになっているので、IPA辞書がそれ以外になっている場合は、変換が必要になります。巨大なファイルなので、emacsではなくviで開くと良いです。 $ vi mecab-ipadic-2.7.0-20070801.model 先頭付近にあるcharsetをutf-8に変更します。 charset: utf-8 続いてモデルファイル自体の文字コードを変換します。 $ nkf -w --overwrite ./mecab-ipadic-2.7.0-20070801.model これで準備が整ったので、下記のコマンドを実行します。 $ /usr/local/libexec/mecab/mecab-dict-index -m ../mecab/mecab-ipadic-2.7.0-20070801.model\ -d /usr/local/lib/mecab/dic/ipadic -u output_dic.csv \ -f utf-8 -t utf-8 -a input_dic.csv -f utf-8 -t utf-8 -a input_dic.csv csvから辞書をコンパイルします。 $ /usr/local/libexec/mecab/mecab-dict-index -d/usr/local/lib/mecab/dic/ipadic -u usr.dic -f utf-8 -t utf-8 output_dic.csv /usr/local/lib/mecab/dic/ipadic/dicrcを編集して、下記を追加します。これでユーザー辞書が使えるようになります。 userdic = /home/foo/bar/usr.dic *** トラブルシューティング [#s636c01e] ../mecab/mecab-ipadic-2.7.0-20070801.model is not a binary model. reopen it as text mode... 特にエラーメッセージではないです。 feature_index.cpp(81) [ifs] no such file or directory: /usr/local/lib/mecab/dic/ipadic/feature.def なぜかfeature.defがインストールされていなかったので、ダウンロードしたファイルの中にあったものを、コピーして解決です。 reading user_dic.csv ... context_id.cpp(96) [it != left_.end()] cannot find LEFT-ID for 名詞,固有名詞,人名,名.*,*,うさみ,* これは幾つか原因がありそうですが、csvの記載内容が正しくない場合に出力されます。下記などをチェックしましょう。自分はまさかの後者でした。 - 品詞分類がpos-id.defに含まれているものと一致するか - カンマが誤ってドットになっていないか viterbi.cpp(50) [tokenizer_->open(param)] tokenizer.cpp(130) [sysdic->isCompatible(*d)] incompatible dictionary: /home/var/foo/usr.dic 文字コードが異なっているかもしれません。辞書コンパイル時の文字コード指定が適切だったか確認しましょう。 ---- ** 履歴 [#v32a7772] - 2017/07/04 : bokupi 新規作成