1 /** 2 * @file xdict (dictionary) 3 * @author Hightman Mar 4 * @editor set number ; syntax on ; set autoindent ; set tabstop=4 (vim) 5 * $Id$ 6 */ 7 8 #ifndef _SCWS_XDICT_20070528_H_ 9 #define _SCWS_XDICT_20070528_H_ 10 11 #ifdef __cplusplus 12 extern "C" { 13 #endif 14 15 /* constant var define */ 16 #define SCWS_WORD_FULL 0x01 // 多字: 整词 17 #define SCWS_WORD_PART 0x02 // 多字: 前词段 18 #define SCWS_WORD_USED 0x04 // 多字: 已使用 19 #define SCWS_WORD_RULE 0x08 // 多字: 自动识别的 20 #define SCWS_WORD_LONG 0x10 // 多字: 短词组成的长词 21 22 #define SCWS_WORD_MALLOCED 0x80 // xdict_query 结果必须调用 free 23 24 #define SCWS_ZFLAG_PUT 0x02 // 单字: 已使用 25 #define SCWS_ZFLAG_N2 0x04 // 单字: 双字名词头 26 #define SCWS_ZFLAG_NR2 0x08 // 单字: 词头且为双字人名 27 #define SCWS_ZFLAG_WHEAD 0x10 // 单字: 词头 28 #define SCWS_ZFLAG_WPART 0x20 // 单字: 词尾或词中 29 #define SCWS_ZFLAG_ENGLISH 0x40 // 单字: 夹在中间的英文 30 #define SCWS_ZFLAG_SYMBOL 0x80 // 单字: 符号系列 31 #define SCWS_XDICT_PRIME 0x3ffd // 词典结构树数:16381 32 33 /* xdict open mode */ 34 #define SCWS_XDICT_XDB 1 35 #define SCWS_XDICT_MEM 2 36 #define SCWS_XDICT_TXT 4 // ... 37 #define SCWS_XDICT_SET 4096 // set flag. 38 39 /* data structure for word(12bytes) */ 40 typedef struct scws_word 41 { 42 float tf; 43 float idf; 44 unsigned char flag; 45 char attr[3]; 46 } word_st, *word_t; 47 48 typedef struct scws_xdict 49 { 50 void *xdict; 51 int xmode; 52 int ref; // hightman.20130110: refcount (zero to really free/close) 53 struct scws_xdict *next; 54 } xdict_st, *xdict_t; 55 56 /* pub function (api) */ 57 xdict_t xdict_open(const char *fpath, int mode); 58 void xdict_close(xdict_t xd); 59 60 /* fork xdict */ 61 xdict_t xdict_fork(xdict_t xd); 62 63 /* add a new dict file into xd, succ: 0, error: -1, Mblen only used for XDICT_TXT */ 64 xdict_t xdict_add(xdict_t xd, const char *fpath, int mode, unsigned char *ml); 65 66 /* NOW this is ThreadSafe function */ 67 word_t xdict_query(xdict_t xd, const char *key, int len); 68 69 #ifdef __cplusplus 70 } 71 #endif 72 73 #endif 74