MeCabで携帯絵文字変換
ちょっとやりたい事があって最近、MeCabで色々調べたり実験したりしていたのですが、
MeCabを汎用的なテキスト変換ツールとして利用できる様です。
ふと思いついて、この機能を使って携帯絵文字の変換が出来ないか試してみました。
実験の元ネタになる絵文字のデータ、対応表はアシアルさんが公開されているText_Pictogram_Mobile-0.0.2を使わせて頂きました。
変換辞書の作成
今回は各キャリアの絵文字を相互に変換する為以下の6種類の辞書を作成しました。
- docomo => ezweb
- docomo => softbank
- ezweb => docomo
- ezweb => softbank
- softbank => docomo
- softbank => ezweb
Text_Pictogram_Mobileを使用して、辞書の元になるcsvファイルを作成するバッチのスクリプトを作りました。
スクリプトを実行すると、以下の形式で標準出力に出力されます。
[変換元の絵文字],0,0,-1200,[変換後の絵文字]
...
コマンドの使用方法はこんな感じです。
- d2e : docomo => ezweb変換用
- d2s : docomo => softbank変換用
- e2d : ezweb => docomo変換用
- e2s : ezweb => softbank変換用
- s2d : softbank => docomo変換用
- s2e : softbank => ezweb変換用
今回作成した辞書、辞書構築に必要なファイル群はこちら。
上記の様に作成したcsvと連接表(matrix.def), 未知語の文字定義(char.def), 未知語用品詞定義(unk.def), 設定ファイル(dicrc)の5つのファイルを用意します。辞書ディレクトリ上で以下のコマンドを実行すると辞書の出来上がりです。
各定義ファイルの意味や、辞書の詳しい作成方法に関しては、http://mecab.sourceforge.net/dic-detail.htmlを参照してください。
絵文字の変換
実際の変換は以下の様になります。
$ mecab -d [辞書ディレクトリのパス] < 変換データファイル名
これと同じ事をPHPの拡張モジュール、php_mecabを使って実装するとこんな感じ。
$options = array('-d', [辞書ディレクトリのパス] );
$mecab = new MeCab_Tagger($options);
$echo $mecab->parse($str)."\n";
実際に動くものを作る
携帯3キャリア分の絵文字一覧表を作成して、実際にアクセスされた端末を判定し上記変換をするコードを書いてみました。一部絵文字が出ていない所とかもありますが(^^;、とりあえず公開してみます。
まとめ
実際のサイトでは、今回の様に直接他キャリアの絵文字に変換するよりも、独自形式に変換して保存し出力時にユーザのキャリアに合わせて変換する形が良い様に思います。
かなり高速で変換出来るので、近いうちに何処かのサイトで実戦配備してみようと思います。