Yoshihiro Oyama
yos-o****@smile*****
2007年 1月 23日 (火) 02:06:47 JST
はじめまして。 sen_queryからクエリ式に含まれる単語の一覧を取得したいです。 こんな感じのAPIがあるといいなと思うんですが いかがでしょうか? -------------------------- senna.h に追加 typedef int(*query_term_callback)(const char*,size_t,void*); void sen_query_term(sen_query *q,query_term_callback func,void* func_arg ); -------------------------- query.c に追加 static int query_term_rec( sen_query* q,cons* c,query_term_callback func,void* func_arg ){ cons *token; if( c->type == cons_token ){ return func(c->u.token.start,c->u.token.len,func_arg); } for( token = c->u.expr.car; token; token = token->cdr ){ if(!query_term_rec(q,token,func,func_arg)){ return 0; /* abort */ } } return 1; /* continue */ } void sen_query_term(sen_query *q,query_term_callback func,void* func_arg ){ query_term_rec( q,q->expr,func,func_arg); } -------------------------- 使用例 int my_query_term_callback(const char* term,size_t len,void* func_arg){ int& n = *(int*)func_arg; printf("term[%d]=%.*s\n",n++,len,term); return 1; /* if return 0,abort enum */ } int n=0; sen_query_term(sq,&my_query_term_callback,&n); -------------------------- Yoshihiro Oyama yos-o****@smile*****