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