#ifndef __TEXT_CABOCHA_H__ #define __TEXT_CABOCHA_H__ #include #include "config-const.h" #ifdef __cplusplus extern "C" { #endif #define PERL_NO_GET_CONTEXT /* we want efficiency */ #include #include #include #include "ppport.h" #ifdef __cplusplus } /* extern "C" */ #endif #define NEED_newCONSTSUB #define NEED_newRV_noinc #define NEED_sv_2pv_nolen #define NEED_sv_2pv_flags #define NEED_newSVpvn_flags #define TEXT_CABOCHA_TOKEN_KLASS "Text::CaboCha::Token" #define TEXT_CABOCHA_CHUNK_KLASS "Text::CaboCha::Chunk" #ifndef TEXT_CABOCHA_DEBUG #define TEXT_CABOCHA_DEBUG 0 #endif #define XS_STATE(type, x) \ INT2PTR(type, SvROK(x) ? SvIV(SvRV(x)) : SvIV(x)) #define XS_STRUCT2OBJ(sv, class, obj) \ if (obj == NULL) { \ sv_setsv(sv, &PL_sv_undef); \ } else { \ sv_setref_pv(sv, class, (void *)obj); \ } typedef struct { CaboCha::Parser *cabocha; char **argv; unsigned int argc; } TextCaboCha; typedef CaboCha::Tree TextCaboCha_Tree; typedef cabocha_token_t TextCaboCha_Token; typedef cabocha_chunk_t TextCaboCha_Chunk; typedef mecab_node_t TextMeCab_Node; #define XS_2CABOCHA(x) x->cabocha /* Text::CaboCha */ void TextCaboCha_bootstrap(); TextCaboCha *TextCaboCha_create(char **argv, unsigned int argc); TextCaboCha *TextCaboCha_create_from_av(AV *av); TextCaboCha_Tree *TextCaboCha_parse(TextCaboCha *cabocha, char *string); TextCaboCha_Tree *TextCaboCha_parse_from_node(TextCaboCha *cabocha, const TextMeCab_Node *node); /* Text::CaboCha::Tree */ size_t TextCaboCha_Tree_size(TextCaboCha_Tree *tree); size_t TextCaboCha_Tree_token_size(TextCaboCha_Tree *tree); SV *TextCaboCha_Tree_tokens(TextCaboCha_Tree *tree); SV *TextCaboCha_Tree_chunks(TextCaboCha_Tree *tree); const TextCaboCha_Token *TextCaboCha_Tree_token(TextCaboCha_Tree *tree, size_t size); size_t TextCaboCha_Tree_chunk_size(TextCaboCha_Tree *tree); const TextCaboCha_Chunk *TextCaboCha_Tree_chunk(TextCaboCha_Tree *tree, size_t size); const char *TextCaboCha_Tree_tostr(TextCaboCha_Tree *tree, unsigned int format); /* Text::CaboCha::Token */ #define CABOCHA_TOKEN_SURFACE(x) x ? x->surface : NULL #define CABOCHA_TOKEN_NORMALIZED_SURFACE(x) x ? x->normalized_surface : NULL #define CABOCHA_TOKEN_FEATURE(x) x ? x->feature : NULL #define CABOCHA_TOKEN_FEATURE_LIST(x) x ? x->feature_list : NULL #define CABOCHA_TOKEN_FEATURE_LIST_SIZE(x) x ? x->feature_list_size : -1 #define CABOCHA_TOKEN_NE(x) x ? x->ne : NULL #define CABOCHA_TOKEN_ADDITIONAL_INFO(x) x ? x->additional_info : NULL #define CABOCHA_TOKEN_CHUNK(x) x ? x->chunk : NULL const char *TextCaboCha_Token_surface(TextCaboCha_Token *token); const char *TextCaboCha_Token_normalized_surface(TextCaboCha_Token *token); const char *TextCaboCha_Token_feature(TextCaboCha_Token *token); SV *TextCaboCha_Token_feature_list(TextCaboCha_Token *token); unsigned short TextCaboCha_Token_feature_list_size(TextCaboCha_Token *token); const char *TextCaboCha_Token_ne(TextCaboCha_Token *token); const char *TextCaboCha_Token_additional_info(TextCaboCha_Token *token); TextCaboCha_Chunk *TextCaboCha_Token_chunk(TextCaboCha_Token *token); /* Text::CaboCha::Chunk */ #define CABOCHA_CHUNK_LINK(x) x ? x->link : -1 #define CABOCHA_CHUNK_HEAD_POS(x) x ? x->head_pos : -1 #define CABOCHA_CHUNK_FUNC_POS(x) x ? x->func_pos : -1 #define CABOCHA_CHUNK_TOKEN_SIZE(x) x ? x->token_size : -1 #define CABOCHA_CHUNK_TOKEN_POS(x) x ? x->token_pos : -1 #define CABOCHA_CHUNK_SCORE(x) x ? x->score : -1 #define CABOCHA_CHUNK_FEATURE_LIST(x) x ? x->feature_list : NULL #define CABOCHA_CHUNK_ADDITIONAL_INFO(x) x ? x->additional_info : NULL #define CABOCHA_CHUNK_FEATURE_LIST_SIZE(x) x ? x->feature_list_size : -1 int TextCaboCha_Chunk_link(TextCaboCha_Chunk *chunk); size_t TextCaboCha_Chunk_head_pos(TextCaboCha_Chunk *chunk); size_t TextCaboCha_Chunk_func_pos(TextCaboCha_Chunk *chunk); size_t TextCaboCha_Chunk_token_size(TextCaboCha_Chunk *chunk); size_t TextCaboCha_Chunk_token_pos(TextCaboCha_Chunk *chunk); float TextCaboCha_Chunk_score(TextCaboCha_Chunk *chunk); SV *TextCaboCha_Chunk_feature_list(TextCaboCha_Chunk *chunk); const char *TextCaboCha_Chunk_additional_info(TextCaboCha_Chunk *chunk); unsigned short int TextCaboCha_Chunk_list_size(TextCaboCha_Chunk *chunk); #endif /* __TEXT_CABOCHA_H__ */