iPhoneからMeCabを呼びたい

iPhoneから形態素解析エンジン、MeCabを呼びたいのです。
MacOSやiPhoneではMeCabを使用しているので、呼べないものだろうか?

ここ数週間、会社の休み時間や帰ってから調べているんだけどわからない!
誰かヒント下さい!

やりたいこと

  • iPhoneで形態素解析をしたい。
  • できればiPhoneに入っているものを使用したい(辞書が結構なサイズなので)。

わかったこと

  • それっぽいライブラリは、libmecab_em.dylibとlibmecabra.dylibがある
  • 辞書は /Developer/Platforms/iPhoneXXX.platform/Developer/SDKs/iPhoneXXX.sdk/usr/lib/dic/ja/im/dicrc がある。
    imの他にもtokというディレクトリがある。jaの他にも sc(セーシェル共和国?) や tc (タークス諸島・カイコス諸島?) などがある。
  • フレームワークの追加から上記dylibを追加、—-dicdirを指定すれば、Cサンプルはビルド、動作できる(一部警告がでるが初歩的な問題なので割愛)。
  • (文字コードのことは考えずに)とりあえず実行してみると何かしら結果が得られるが内容は不明(ファイル出力した物)。
  • mecab_dictionary_info_tを取得して、辞書情報を見ると、文字コードはUTF-16LE、単語数は171884。
  • 入力をUTF-16LEにしてみると、mecab_sparse_tostrで落ちて結果は取得できない。

これからやること

  • gdbを使って、なぜ落ちているのか探る。
  • mecab_sparse_tostr2など他に使用できないか試してみる。 => mecab_sparse_tonode2でも落ちる。mecab_sparse_tostr2でも落ちる。
  • 自前でビルドしたmecab、辞書で試してみる。
  • SWIGを使ってObjective-Cにしてみる。
  • /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.0.sdk/usr/include/mecab.h を見ると、#if 1 /* MECAB_APPLE_ENHANCEMENT */
    でmecab_path_tの定義で宣言されないようになっている変数がある。

備考

  • 僕のCとMac(その他諸々)の知識はお粗末…。

この投稿へのコメント

  1. hide-t said on 2010/09/02 at 16:26

    scもtcも中国語だよ。
    mecab_sparse_tonode2はどう?
    mecab_new2するときの引数は?

  2. kaiba said on 2010/09/02 at 21:38

    >hide-tさん
    ありがとうございます!
    中国はchじゃないんですか?

    mecab_new2は使っていません。
    mecab_newを使っていて、–dicdir=/hoge/hoge/ を渡しています。
    辞書がUTF16-LEということは入力もUTF-16LEですかね…?
    mecab_sparse_tonode2など他の関数も呼んでみます。

  3. hide-t said on 2010/09/03 at 10:41

    traditional chinese, simplified chinese。

    環境がないから分からないけど、
    http://chasen.org/~taku/blog/archives/2008/07/mac_os_x_leropa.html
    みるとUTF16LEにしてからやってるみたいだね。
    im/tokの違いが分からないけど、imはinput methodっぽいんだよね。

    ダメなら形態素解析サーバでも作ったらどうかな?

  4. kaiba said on 2010/09/03 at 23:09

    うおお!! わかち出来てる!!
    僕はiconvでUTF16LEにするのに不安があったので、テキストファイルにUTF16LEの文字列を用意して、それを読み込んでいます。
    このブログのエントリーは、一歩前進できそうです。
    今日はへべれけなうなので、できません…

hide-t にコメントする コメントをキャンセル

メールアドレスが公開されることはありません。

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL