iOSのmecabを試してみた
iOSでもMecabを使って形態素解析ができるということで、試してみたことをメモ。
サンプルプログラムはこちらがわかりやすかったです。
- iOS内蔵版
https://github.com/FLCLjp/iPhone-Mecab
- Cocoa Static Library版
https://github.com/FLCLjp/iPhone-libmecab
さっと試してみた感覚では、CocoaStaticLibrary版は精度が高いけど辞書ファイルの容量が大きく、
iOS内蔵版は内蔵辞書を使うため容量は小さいけど精度が低め・・・といった感じでしょうか。
とりあえず今回はiOS内蔵版で形態素解析を実行してみて、どういった結果になるのかを試してみました。
今回使用したバージョン
Xcode4.4.1
iOS内蔵版のプロジェクトをダウンロードしてXcodeから実行できますが、これだけでは形態素解析が動作しません。
Mecab.mファイルの66行目を修正します。
mecab = mecab_new2("-d /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/usr/lib/dic/ja/im/"); ↓ mecab = mecab_new2("-d /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.1.sdk/usr/lib/dic/ja/im/");
シミュレーターの辞書ファイルの場所を指定しているようですが、Xcode4.2あたり(?)からパスが変わったので
それにあわせた修正みたいですね。
テキストボックスに文章を入力してparseすると、形態素解析が実行されます。
形態素解析の結果はNodeクラスのリストに格納されてきます。
Nodeクラスのメンバーはこうなっています。
NSString *feature; // 形態素の情報(?) NSString *surface; // 形態素の表記 NSNumber *posid; // 品詞ID
とりあえず、いくつかの文章を形態素解析してみた結果を並べてみます。
今日も相変わらず暑いです
surface | feature | posid |
---|---|---|
今日 | 補助 | 6482 |
も | 喪 | 14237 |
相変 | 補助 | 6482 |
わら | わら | 13239 |
ず | 圖 | 16350 |
暑 | 補助 | 6482 |
い | 位 | 11850 |
です | です | 4738 |
私の名前はおかひろです
surface | feature | posid |
---|---|---|
私 | 補助 | 6482 |
の | 幅 | 20000 |
名前 | 補助 | 6482 |
はお | 羽尾 | 16415 |
か | 科 | 17838 |
ひろ | ひろ | 14224 |
です | です | 4738 |
私の名前は、おかひろです。
surface | feature | posid |
---|---|---|
私 | 補助 | 6482 |
の | 幅 | 20000 |
名前 | 補助 | 6482 |
は | 派 | 10482 |
、 | 名詞 | 18052 |
おか | 岡 | 12397 |
ひろ | ひろ | 14224 |
です | です | 9174 |
。 | 名詞 | 18052 |
こんにちは。お元気ですか?
surface | feature | posid |
---|---|---|
こんにちは | こん | 10442 |
。 | 名詞 | 18052 |
お | 尾 | 12247 |
元気 | 補助 | 6482 |
です | デス | 12353 |
か | 下 | 10901 |
? | 名詞 | 18052 |
こんばんわ、お忙しそうですね
surface | feature | posid |
---|---|---|
こんばん | 今晩 | 11907 |
わ | 話 | 11395 |
、 | 名詞 | 18052 |
お | 尾 | 12247 |
忙 | 補助 | 6482 |
しそう | 思想 | 11160 |
です | です | 4738 |
ね | ね | 5893 |
・・・形態素の区切りが微妙な場合があったり、featureが意味不明だったりします。
posIdもよくわかりません。(6482が名詞?)
この辺は実際にいろいろ試しながら理解していこうと思います。