Cabocha新インターフェース用のC++サンプルコード
Cabocha 0.6 pre系列はインターフェースが変わったので、取得できるものを全部列挙する感じで組んでみた。
#include <iostream> #include <string> #include <cabocha.h> using namespace std; //How to compile? //g++ -O2 `cabocha-config --cflags` cabochasample.cpp -o cabochasample `cabocha-config --libs` string getBase(const CaboCha::Token* token) { if (token->feature_list_size > 6 && token->feature_list[6] != string("*")) return token->feature_list[6]; return token->surface; } string getType(const CaboCha::Token* token) { return string(token->feature_list[0]) + "-" + token->feature_list[1]; } int main (int argc, char **argv) { try { CaboCha::Parser* parser = CaboCha::createParser(argc, argv); string sentence; while (getline(cin, sentence)) { const CaboCha::Tree *tree = parser->parse(sentence.data()); for (unsigned int i = 0; i < tree->size(); ++i) { const CaboCha::Token *token = tree->token (i); // is this token begnning of chunk ? if (token->chunk) { cout << endl; cerr << "* " << token->chunk->link << ' ' << token->chunk->head_pos << ' ' << token->chunk->func_pos << ' ' << token->chunk->token_size << ' ' << token->chunk->token_pos << ' ' << token->chunk->score << ' '; for (int k = 0; k < token->chunk->feature_list_size; k++) cerr << token->chunk->feature_list[k] << ' '; cerr << endl; } cout << '[' << getBase(token) << '/' << getType(token) << "] "; cerr << token->surface << '\t' << token->normalized_surface << '\t' << token->feature << '\t'; for (int k = 0; k < token->feature_list_size; k++) cerr << token->feature_list[k] << '\t'; cerr << token->ne << endl; } cout << endl; } } catch (exception &e) { cerr << e.what() << endl; return 1; } return 0; }
こんな感じでいかがでしょうか?
標準出力の結果
[かぼちゃ/名詞-一般] [が/助詞-格助詞] [簡単/名詞-形容動詞語幹] [に/助詞-格助詞] [入る/動詞-自立] [て/助詞-接続助詞] [とても/副詞-助詞類接続] [幸せ/名詞-形容動詞語幹]
標準出力+標準エラー出力の結果
* 2 0 1 2 0 0.545432 f_H0:かぼちゃ f_H1:名詞 f_H2:一般 f_F0:が f_F1:助詞 f_F2:格助詞 f_F3:一般 a:が B:名詞-一般 G_CASE:が f_BOS:1 [かぼちゃ/名詞-一般] かぼちゃ かぼちゃ 名詞,一般,*,*,*,*,かぼちゃ,カボチャ,カボチャ 名詞 一般 * * * * かぼちゃ カボチャ カボチャ O [が/助詞-格助詞] が が 助詞,格助詞,一般,*,*,*,が,ガ,ガ 助詞 格助詞 一般 * * * が ガ ガ O * 2 0 1 2 2 1.86243 f_H0:簡単 f_H1:名詞 f_H2:形容動詞語幹 f_F0:に f_F1:助詞 f_F2:格助詞 f_F3:一般 a:に B:名詞-形容動詞語幹 G_CASE:に [簡単/名詞-形容動詞語幹] 簡単 簡単 名詞,形容動詞語幹,*,*,*,*,簡単,カンタン,カンタン 名詞 形容動詞語幹 * * * * 簡単 カンタン カンタン O [に/助詞-格助詞] に に 助詞,格助詞,一般,*,*,*,に,ニ,ニ 助詞 格助詞 一般 * * * に ニ ニ O * 4 0 1 2 4 0 f_H0:入っ f_H1:動詞 f_H2:自立 f_H5:連用タ接続 f_H6:五段・ラ行 f_F0:て f_F1:助詞 f_F2:接続助詞 A:て B:動詞-自立 G_CASE:て [入る/動詞-自立] 入っ 入っ 動詞,自立,*,*,五段・ラ行,連用タ接続,入る,ハイッ,ハイッ 動詞 自立 * * 五段・ラ行 連用タ接続 入る ハイッ ハイッ O [て/助詞-接続助詞] て て 助詞,接続助詞,*,*,*,*,て,テ,テ 助詞 接続助詞 * * * * て テ テ O * 4 0 0 1 6 0 F_H0:とても F_H1:副詞 F_H2:助詞類接続 F_F0:とても F_F1:副詞 F_F2:助詞類接続 A:とても B:副詞-助詞類接続 [とても/副詞-助詞類接続] とても とても 副詞,助詞類接続,*,*,*,*,とても,トテモ,トテモ 副詞 助詞類接続 * * * * とても トテモ トテモ O * -1 0 0 1 7 0 F_H0:幸せ F_H1:名詞 F_H2:形容動詞語幹 F_F0:幸せ F_F1:名詞 F_F2:形容動詞語幹 A:名詞-形容動詞語幹 B:名詞-形容動詞語幹 F_EOS:1 [幸せ/名詞-形容動詞語幹] 幸せ 幸せ 名詞,形容動詞語幹,*,*,*,*,幸せ,シアワセ,シアワセ 名詞 形容動詞語幹 * * * * 幸せ シアワセ シアワセ O