2019年8月4日日曜日

MeCabで固有名詞を単語として扱えるようにする

MeCabによる形態素解析で、固有名詞や新語などを単語として処理させたい場合があって、そういうときにはMeCabで使う辞書にその語を登録する。今回は、MeCabのデフォルト辞書にない固有名詞を登録する手順をまとめておく。MeCabの辞書にはシステム辞書とユーザー辞書があるが、ここではユーザー辞書を作成して単語を追加する。


環境


Windows10のWSL(Ubuntu 18.04)。



単語の追加方法


MeCabでの単語の追加方法はMeCab:単語の追加方法に説明がある。追加する単語についての情報を記述したcsvから辞書を作成するが、追加する単語の他に必要になるのが左文脈ID、右文脈ID、コスト。それぞれ上記サイトで次のように説明されている。
左文脈IDは, その単語を左から見たときの内部状態IDです. 通常システム 辞書と同一場所にある left-id.def から該当する ID を選択します. 空にしておくと mecab-dict-index が自動的に ID を付与します.
右文脈IDは, その単語を右から見たときの内部状態IDです. 通常システム 辞書と同一場所にある right-id.def から該当する ID を選択します. 空にしておくと, mecab-dict-index が自動的に ID を付与します.
コストは,その単語がどれだけ出現しやすいかを示しています. 小さいほど, 出現しやすいという意味になります. 似たような単語と 同じスコアを割り振り, その単位で切り出せない場合は, 徐々に小さくしていけばいいと思います.  
このうち左文脈IDと右文脈IDは空でも自動的に付与されるらしいので省略できる。残りのコストについては自動推定する方法があるので、今回はその方法を使う。


追加する単語を記述するcsvフォーマット


追加する単語は、以下のようなフォーマットでcsvに追加する。

表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用型,活用形,原形,読み,発音

品詞、原型などはMeCabで形態素解析した結果として表示される。


ちなみに、左文脈ID、右文脈ID、コストもコマンドで確認できる。



単語登録用のcsv作成


単語登録用のcsvを作成する。登録する語は「ふんわり名人」と「うまい棒」。それぞれMeCabで形態素解析すると以下のように分割されてしまう。


単語登録用csvとして次のようなsnack.csvを作成した。左文脈ID、右文脈ID、コストは自動付与させるのでブランクのまま。登録する単語は名詞なので活用型と活用形は「*」にしておく。



辞書の作成


用意したcsvから辞書を作成する。まずはコストの自動推定に必要なモデルファイルをダウンロードする。MeCab:単語の追加方法の「コストの自動推定機能」にリンクがあるので、mecab-ipadic-2.7.0-20070801.model.bz2をダウンロードする。

ダウンロードしたモデルファイルの文字コードはEUC-JPなので、解凍したら辞書の文字コードに合わせるためにUTF-8に変換してmecab-ipadic-2.7.0-20070801.model.utf8というファイル名で保存しておく。


さらに、モデルファイルの内容を以下のように変更。


csvをコンパイルして辞書を作成するためにmecab-dict-indexを使う。ファイルがあるディレクトリは以下のコマンドで確認できる。


続いてシステム辞書のパスも確認しておく。


以下のコマンドで、snack.csvからsnack.dicというファイル名の辞書(文字コードはUTF-8)を作成する。



作成した辞書でMeCabを使う


作成した辞書をMeCabのユーザー辞書として設定し、登録した単語が形態素解析で認識されているか確認する。

作成した辞書を辞書ディレクトリにコピーする。


MeCab設定ファイル(mecabrc)のあるディレクトリを確認する。


/etc/mecabrcのuserdicに作成した辞書へのパスを設定する。以下のように追記する。


ユーザー辞書は複数使用可能なので、既存のユーザー辞書に追加する場合は以下のようにカンマ区切りで追加する。


追加した単語を形態素解析してみると、「ふんわり名人」「うまい棒」ともに単語として認識されている。


左文脈ID、右文脈ID、コストも確認してみる。ちゃんと自動付与されている。



0 件のコメント:

コメントを投稿