私は日本語のデータ解析を行なうときに形態素解析器としてMeCabを利用しています.普段はPythonから使っているのですが,MeCab自体はC++で書かれていることと,C言語が大好きなのでC系言語で使ってみたいと前から思っていました.公式でC言語APIを用意してくれているので普通に使うことができることになっていますが,C++ではなくCで試してみた記事が見つからなかったのでまとめました.コンパイルのところで若干苦労しました.
スポンサーリンク
MeCabのインストール
homebrewを使って次のようにインストールした前提とします.
brew install mecab mecab-ipadic
サンプルプログラムの作成
公式サンプルを更に簡単にして以下のように作成しました.ファイル名はsample.c
としました.
#include <stdio.h> #include <mecab.h> int main (int argc, char **argv) { char input[] = "私が今朝食べたお好み焼きはとても美味しかったです."; mecab_t *mecab; const char *result; mecab = mecab_new(argc, argv); result = mecab_sparse_tostr(mecab, input); printf ("INPUT: %s\n", input); printf ("RESULT:\n%s", result); mecab_destroy(mecab); return 0; }
コンパイル
コンパイルは以下のようにします.実行ファイルはa.out
となります.コンパイルとリンクで分けて書きました.ライブラリが見つからない場合は,その実体はlibmecab.a
なので,locate libmecab.a
で調べて下さい.
gcc -c sample.c gcc -L/usr/local/lib/ -lmecab sample.o
まとめて書くと次のようになります.
gcc -L/usr/local/lib -lmecab sample.c
実行結果
実行は次のように,辞書ファイルを指定して行いました.
./a.out -d /usr/local/lib/mecab/dic/ipadic/
実行結果は次のようになります.
INPUT: 私が今朝食べたお好み焼きはとても美味しかったです. RESULT: 私 名詞,代名詞,一般,*,*,*,私,ワタシ,ワタシ が 助詞,格助詞,一般,*,*,*,が,ガ,ガ 今朝 名詞,副詞可能,*,*,*,*,今朝,ケサ,ケサ 食べ 動詞,自立,*,*,一段,連用形,食べる,タベ,タベ た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ お好み焼き 名詞,一般,*,*,*,*,お好み焼き,オコノミヤキ,オコノミヤキ は 助詞,係助詞,*,*,*,*,は,ハ,ワ とても 副詞,助詞類接続,*,*,*,*,とても,トテモ,トテモ 美味しかっ 形容詞,自立,*,*,形容詞・イ段,連用タ接続,美味しい,オイシカッ,オイシカッ た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ です 助動詞,*,*,*,特殊・デス,基本形,です,デス,デス . 記号,句点,*,*,*,*,.,.,. EOS
おわりに
まだ他のAPIを試していないので分かりませんが,C言語からも普通にMeCabが使えて嬉しいです.Pythonの情報がとても多いので凄く使いにくいのかなと危惧していましたが特にそのようなことはありませんでした.