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をプログラミング言語から利用するには、それぞれの言語に合わせたバインディングをインストールする必要があります。手順は簡単なので参考リンクのみ貼ります。
補足メモ
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
参考サイト
ここからは、この記事と直接の関係はないけど面白かった記事一覧。主に顔文字関連。
コストの算出方法についての解説あり
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://creativememomemo.com/iphone_kaomoji/
http://creativememomemo.com/iphone_dictionary_recommendable_words/