Tips

mecab辞書更新手順(辞書はipadic ver.2.7.0使用)

先日、形態素解析ツールmecab(和布蕪)を、centOS(5.8)にインストールしてみました。
mecabは結構使い勝手がよく、分かち書きの精度もなかなかよいです。
しかし、固有名詞などで、分かち書きされたくないな、ということもあります。
たとえば「マカロニグラタン」をmecabで形態素解析すると、こんな感じになります。

マカロニ        名詞,一般,*,*,*,*,マカロニ,マカロニ,マカロニ
グラタン        名詞,一般,*,*,*,*,グラタン,グラタン,グラタン

「マカロニグラタン」で一つの名詞としたいのに、「マカロニ」と「グラタン」に分かち書きされてしまいます。
こんな時は、辞書に「マカロニグラタン」を追加してあげればよいのです。

辞書追加をする2つの方法

辞書追加の方法には2つの方法があります。
1つめは、システム辞書(デフォルト辞書)に追加する方法、
2つめは、ユーザ辞書を作成する方法、
です。

システム辞書の更新を行うと、解析速度を落とさずに解析を行うことができる一方、辞書更新時間がかかります。
ユーザ辞書の作成&更新を行うと、解析速度は落ちますが、辞書更新の時間は早く済みます。

ですので、あまり頻繁に辞書更新が必要でない場合はシステム辞書の更新を、
頻繁に辞書更新が発生する場合にはユーザ辞書の更新を行うというのが望ましいでしょう。
また、システム辞書を更新してしまうと、全mecab処理に追加内容が反映されてしまいますが、
ユーザ別で追加辞書を作っておくと、そのユーザの権限で実行した時のみ追加内容を反映できます。
そこで、今回はユーザ辞書の更新についてまとめていきます。

ユーザ辞書の更新手順

1.辞書CSV作成

コンパイル前のユーザ辞書を作成します。
ユーザのホームディレクトリ(/home/xxx)に移動し、CSVファイルを作成します。
(xxxはユーザ名になります。ユーザ追加が必要な場合はさきにユーザ追加を行っておく必要があります)

# cd /home/xxx
# vi xxx.csv

CSVファイルの中身に次の内容を追加します。1行の内容は次のように指定します。
表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音

結構多くてよくわかりませんね。例として「マカロニグラタン」を追加してみましょう。下記のようになります。

マカロニグラタン,1285,1285,100,名詞,一般,*,*,*,*,マカロニグラタン,マカロニグラタン,マカロニグラタン

・表層形
表示のされ方になります。
活用語の場合、基本形以外はここの記述と「原形」の記述が異なる場合が出てきます。

・左/右文脈ID
その単語を左/右から見たときの内部状態IDを意味します。
状態IDとは何で定義されているかというと、下記ファイルに記載されています。適切な品詞のIDを探してCSVに指定します。
/usr/local/lib/mecab/dic/ipadic/left-id.def
/usr/local/lib/mecab/dic/ipadic/right-id.def

・コスト
その単語の出現しやすさを示します。
小さいほど出現しやすいという意味になります。
うまくその単語が分かつことができない場合、小さくします。

ちなみに、上記のフォーマットの後ろにカンマ区切りで、自分でオプションフィールドを追加することもできます。

2.辞書コンパイル

次のコマンドで拡張子「dic」のコンパイル済辞書ファイルを作成します。

# /usr/local/libexec/mecab/mecab-dict-index -d /usr/local/lib/mecab/dic/ipadic -u /home/xxx/xxx.dic -f utf-8  /home/xxx/xxx.csv

それぞれのオプションの意味は次のとおりです。
-d DIR: システム辞書があるディレクトリ
-u FILE: FILE というユーザ辞書を作成
-f charset: CSVの文字コード
※オプションfは、私はCSVをutf-8で作成したのでutf-8にしています。euc-jpで作成している場合はeuc-jpとしてください。

「done!」と表示されたらコンパイル完了です。Dicファイルが出来上がっているか確認しておきましょう。

3.ユーザ辞書を読み込むように設定

# cp /usr/local/etc/mecabrc ~/.mecabrc
# vi ~/.mecabrc

以下の記述を追加。
「userdic = /home/xxx/xxx.dic」
※コメントアウト「userdic = ~」がコメントアウトされているので、そこのコメントアウトを外してパスを書き換えてもOKです。

なお、複数dicファイルを指定したい場合は、ファイルをカンマ区切りでつなげて記述すればOKです。

4.動作確認

rootユーザで確認。(マカロニ、グラタンと2ワードに分かち書きされているはず。)

# mecab
マカロニグラタン
マカロニ        名詞,一般,*,*,*,*,マカロニ,マカロニ,マカロニ
グラタン        名詞,一般,*,*,*,*,グラタン,グラタン,グラタン

xxxユーザで確認。(マカロニグラタンで1ワードになっていればOK。)

# su xxx
$ mecab
マカロニグラタン
マカロニグラタン        名詞,一般,*,*,*,*,マカロニグラタン,マカロニグラタン,マカロニグラタン

まとめ

いかがだったでしょうか。単語を追加していく作業が面倒ではありますが、
このように形態素解析を自分用にカスタマイズしていくことができると、使い途にも幅がでてくると思いませんか?

AIやビックデータ解析に興味を持った時のはじめの一歩

独学で学ぶ-pythonプログラミング 連載目次

Recent News

Recent Tips

Tag Search