mecabの辞書に新しい単語を登録する方法

mecabの辞書に新しい単語を登録する方法のメモ。



mecabのインストール


mecabをインストールすると、mecabコマンドが使えるようになります。

wgetするファイルは2013年4月時点で最新です。


yum install -y gcc-c++

cd /usr/local/src
wget https://mecab.googlecode.com/files/mecab-0.996.tar.gz
tar zxfv mecab-0.996.tar.gz
cd mecab-0.996/
./configure
make
make check
make install

mecab -v

mecab -vでmecabのバージョンが表示されたら正しくインストールできています。


次に辞書をインストールすると、mecabを使った形態素解析ができるようになります。



辞書のインストール


cd /usr/local/src
wget https://mecab.googlecode.com/files/mecab-ipadic-2.7.0-20070801.tar.gz
tar zxfv mecab-ipadic-2.7.0-20070801.tar.gz
cd mecab-ipadic-2.7.0-20070801
./configure --with-charset=utf8
make
make install

途中で、「To enable dictionary, rewrite /usr/local/etc/mecabrc as "dicrc = /usr/local/lib/mecab/dic/ipadic" 」と表示されますが、特に何もしなくてOKです。


下記のコマンドが実行できれば、mecabと辞書は正しくインストールできています。


echo '今日は晴れです。' | mecab

# ↓結果

今日    名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
晴れ    名詞,一般,*,*,*,*,晴れ,ハレ,ハレ
です    助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。      記号,句点,*,*,*,*,。,。,。
EOS


(単語追加の前に)辞書の種類解説


辞書には、システム辞書とユーザー辞書があります。下記のような違いがあります。


システム辞書

必ず一つ利用する。高速。


ユーザー辞書

利用しなくてもいいし、複数利用することもできる。低速。


よほど大量の文章を処理するのでなければ、ユーザー辞書でもそれなりに早いです。なので、ユーザー辞書に単語を追加することにします。



ユーザー辞書に単語を追加する


未知語である、「JK3」を辞書に追加します。


まず、「JK3」が本当に未知語か確認します。


echo '私はJK3のツイッタラーです。' | mecab --unk-feature "未知語"
私      名詞,代名詞,一般,*,*,*,私,ワタシ,ワタシ
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
JK      未知語
3       未知語
の      助詞,連体化,*,*,*,*,の,ノ,ノ
ツイッタラー    未知語
です    助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。      記号,句点,*,*,*,*,。,。,。
EOS

上記の通り、未知語ってずばり書いてあるので未知語のようです。


「JK3」を新しい単語として登録するためのCSVファイルを作ります。


cd /usr/local/src/mecab-ipadic-2.7.0-20070801
vi JK.csv

# この行のみをUTF8で保存。空行は入れないこと!
JK3,,,5279,名詞,一般,*,*,*,*,JK,ジェイケイ,ジェイケー

/usr/local/libexec/mecab/mecab-dict-index -d /usr/local/lib/mecab/dic/ipadic -u JK.dic -f utf-8 -t utf-8 JK.csv

上記のフォーマットは、既存のCSVの似ている単語から選びました。公式資料にもそうしろと書いてあります。選んだのは「女子高」という単語です。


既存のCSVは/usr/local/src/mecab-ipadic-2.7.0-20070801にたくさん入っています。


# サンプル
女子高,1285,1285,5279,名詞,一般,*,*,*,*,女子高,ジョシコウ,ジョシコー

# サンプルもう一つ
工藤,1223,1223,6058,名詞,固有名詞,人名,名,*,*,くどう,クドウ,クドウ

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

左文脈ID、右文脈IDは省略しても自動で補完してくれるようなので省略しました。コストはその単語の出現のしやすさです。小さいほどよく出現する単語になります。


mecabにはコストの自動推定や追加のコーパスによる再学習機能もあるのですが、ここでは触れません。


さきほどの手順でJK.dicという新しいユーザー辞書ができています。確認のために、JK.dicを使って形態素解析してみます。


echo '私はJK3のツイッタラーです。' | mecab --unk-feature "未知語" -u /usr/local/src/mecab-ipadic-2.7.0-20070801/JK.dic
私      名詞,代名詞,一般,*,*,*,私,ワタシ,ワタシ
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
JK3     名詞,一般,*,*,*,*,JK,ジェイケイ,ジェイケー
の      助詞,連体化,*,*,*,*,の,ノ,ノ
ツイッタラー    未知語
です    助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。      記号,句点,*,*,*,*,。,。,。
EOS

「JK3」がひとまとまりになっているので成功です。「JK3」が新しい単語として追加されています。



Ruby、Pythonからmecabを使う


mecabをプログラミング言語から利用するには、それぞれの言語に合わせたバインディングをインストールする必要があります。手順は簡単なので参考リンクのみ貼ります。


mecab-rubyのインストール方法


mecab-pythonのインストール方法



補足メモ


Amazon Linuxへのnkfのインストール

wget http://mirror.centos.org/centos/6/os/x86_64/Packages/nkf-2.0.8b-6.2.el6.x86_64.rpm
rpm -ivh nkf-2.0.8b-6.2.el6.x86_64.rpm

euc-jpからutf-8への変換

nkf --overwrite -Ew text.csv

vimによる文字コード変換、文字コードを指定してファイルを開く

:set fileencoding=euc-jp
vi -c ":e ++enc=euc-jp" JK.csv


参考サイト


mecab公式 インストールガイド

mecab公式 辞書への単語追加

mecab辞書のカスタマイズ方法解説


mecab-rubyのインストール方法

mecab-pythonのインストール方法



ここからは、この記事と直接の関係はないけど面白かった記事一覧。主に顔文字関連。


コストの算出方法についての解説あり

http://blog.livedoor.jp/techblog/archives/65828235.html


顔文字形態素解析の紹介ブログ記事

http://d.hatena.ne.jp/haroperi/20120616/1339846485


顔文字形態素解析の詳細

http://www.haroperi.info/emoticon/mecab.html


編集距離に基づいてツイッターから抽出した顔文字一覧

http://www.haroperi.info/emoticon/extraction.html


ツイッターから抽出したっぽい顔文字一覧

http://kaomoji.n-at.me/


個人がおすすめ顔文字を紹介している

http://creativememomemo.com/iphone_kaomoji/

http://creativememomemo.com/iphone_dictionary_recommendable_words/


著者プロフィール
Webサイトをいくつか作っています。
著者プロフィール