MeCab ユーザ辞書への単語追加

Linux
スポンサーリンク

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

「焼肉定食」が分割されないようになりました。(^^)/

終わりに

次回は、解析速度が高速な「システム辞書」へ単語を追加してみたいと思います。

コメント

  1. ゆみこ より:

    テキストマイニングを始めた初心者です.
    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

      テキストマイニングがうまくいくといいですね。陰ながら応援しています。

タイトルとURLをコピーしました