MeCab を使って、文章を単語に分割した時に、複数の単語が含まれる複合語などが、思ったように分割できない事があります。例えば「焼肉定食」は「焼肉」と「定食」の2つの単語に分割されてしまいます。MeCab には「最小単位の単語に分割する」という基本ルールがあるので、この分割は正しいのですが、実際に文章を解析する時は、1つの単語として扱いたくなります。そこで今回は、MeCab の辞書に単語を追加して、思ったように単語を分割する方法をご紹介します。
MeCab 辞書への単語の追加方法
辞書への単語の追加には、2つの方法があるようです。今回は「ユーザ辞書」へ単語を追加してみたいと思います。
システム辞書への追加
辞書更新が頻繁でないときや, 解析速度を落としたくない時は, 直接 システム辞書を変更するのがよいでしょう.ユーザ辞書への追加
システム辞書の更新は時間がかかります. 辞書の更新が頻繁な場合や, システム辞書を変更する権限が無い場合は, ユーザ辞書を作るのがいいでしょう.
MeCab: 単語の追加方法 より引用
下準備
MeCab と IPA辞書をインストールしておきます。
IPA辞書のみの MeCab の動作
冒頭にも書きましたが、IPA辞書のみの状態では「焼肉定食」は「焼肉」と「定食」に分割されます。
$ echo '焼肉定食が食べたい' | mecab 焼肉 名詞,一般,*,*,*,*,焼肉,ヤキニク,ヤキニク 定食 名詞,一般,*,*,*,*,定食,テイショク,テイショク が 助詞,格助詞,一般,*,*,*,が,ガ,ガ 食べ 動詞,自立,*,*,一段,連用形,食べる,タベ,タベ たい 助動詞,*,*,*,特殊・タイ,基本形,たい,タイ,タイ EOS
これを、ユーザ辞書に単語「焼肉定食」を追加して、分割されないようにしたいと思います。
ユーザ辞書の元になるCSVファイルの作成
ユーザ辞書への単語の追加は「辞書の元になるCSVファイルの作成」→「辞書を作成」の流れで行います。
辞書の元になるCSVファイルのフォーマットは、以下のようになります。
表層形,左文脈ID,右文脈ID,コスト,品詞,品詞細分類1,品詞細分類2,品詞細分類3,活用形,活用型,原形,読み,発音
さらに, 自分の好きな情報をCSVが許す範囲で追加してもかまいません.
ユーザ設定,,,10,名詞,一般,*,*,*,*,ユーザ設定,ユーザセッテイ,ユーザセッテイ,追加エントリ
MeCab: 単語の追加方法 より引用
単語に関する情報を、色々と設定できますが、少なくとも「表層形(追加したい単語)」と「コスト」を追加しておけばOKです。コストは「1」を設定した単語が最優先されます。コストを自動推定する方法もありますが、今回は手っ取り早く「1」を設定しました。
上記をふまえて、ユーザ辞書の元になるCSVファイルを作成します。メンテナンス用に、追加エントリへ辞書名(食べものユーザ辞書)も追加しておきました。
vim tabemono.csv
焼肉定食,,,1,名詞,一般,*,*,*,*,焼肉定食,ヤキニクテイショク,ヤキニクテイショク,(食べものユーザ辞書)
※CSVファイルの文字コードは、必ず「UTF-8」で作成してください。
ユーザ辞書の作成
作成したCSVファイルから、ユーザ辞書を作成します。
ユーザ辞書の保存先ディレクトリの作成 ※場所はどこでも構いません。
mkdir /usr/local/lib/mecab/dic/userdic
MeCab に付属の mecab-dict-index コマンドを使って、辞書を作成します。
引数の指定方法は以下の通りです。
mecab-dict-index \ -d <システム辞書が入っているディレクトリ> \ -u <ユーザ辞書の保存先> \ -f <CSVファイルの文字コード> -t <ユーザ辞書の文字コード> <CSVファイル>
上記をふまえて、ユーザ辞書を作成します。
※ mecab-dict-index コマンドは、フルパスで実行しましょう。
/usr/local/libexec/mecab/mecab-dict-index \ -d /usr/local/lib/mecab/dic/ipadic \ -u /usr/local/lib/mecab/dic/userdic/tabemono.dic \ -f utf-8 -t utf-8 tabemono.csv 〜〜〜 以下のような表示が返ってくれば、正しく辞書が作成されています 〜〜〜 reading tabemono.csv ... 1 emitting double-array: 100% |###########################################| done!
MeCab の設定ファイルに、作成したユーザ辞書を追加します。
vim /usr/local/etc/mecabrc
userdic = /usr/local/lib/mecab/dic/userdic/tabemono.dic
ユーザ辞書は複数追加することが可能です。(システム辞書は1つのみ)
ユーザ辞書を追加した MeCab の動作
さてさて、上手く分割されるでしょうか?
echo '焼肉定食が食べたい' | mecab 焼肉定食 名詞,一般,*,*,*,*,焼肉定食,ヤキニクテイショク,ヤキニクテイショク,(食べものユーザ辞書) が 助詞,格助詞,一般,*,*,*,が,ガ,ガ 食べ 動詞,自立,*,*,一段,連用形,食べる,タベ,タベ たい 助動詞,*,*,*,特殊・タイ,基本形,たい,タイ,タイ EOS
「焼肉定食」が分割されないようになりました。(^^)/
終わりに
次回は、解析速度が高速な「システム辞書」へ単語を追加してみたいと思います。
コメント
テキストマイニングを始めた初心者です.
mecabに辞書登録を行いたいのですが,
まったく上手くいきません.
ユーザ辞書の作成の部分で
コマンド
mkdir /usr/local/lib/mecab/dic/userdic
はどこで打ち込めばよいのでしょうか?
コマンドプロンプト あるいは mecabですか?
続いて,
/usr/local/libexec/mecab/mecab-dict-index \
-d /usr/local/lib/mecab/dic/ipadic \
-u /usr/local/lib/mecab/dic/userdic/tabemono.dic \
-f utf-8 -t utf-8 tabemono.csv
はどこに打ち込めばよいのでしょう?
本当に全くの初心者です.
どうかご指導の程よろしくおねがいいたします
>ゆみこさん
はじめまして、ご質問ありがとうございます。
ゆみこさんが、CentOSなどのLinuxに mecab をインストールしていると考えてお答えしますね。
(もしインストールされていないようでしたら、こちらの記事を参考にしてみてください)
>mkdir /usr/local/lib/mecab/dic/userdic
>はどこで打ち込めばよいのでしょうか?
>/usr/local/libexec/mecab/mecab-dict-index \
>-d /usr/local/lib/mecab/dic/ipadic \
>-u /usr/local/lib/mecab/dic/userdic/tabemono.dic \
>-f utf-8 -t utf-8 tabemono.csv
>はどこに打ち込めばよいのでしょう?
どちらのコマンドもコマンドプロンプト(ターミナル)に打ち込んでください。
もし root ユーザ以外でログインしている場合は、先頭に「sudo」を付けて実行する必要があります。
例えば1つめのコマンドは、以下のようになります。
sudo mkdir /usr/local/lib/mecab/dic/userdic
テキストマイニングがうまくいくといいですね。陰ながら応援しています。