0
|
1 3.3 使用する構造体
|
|
2
|
|
3 #include"jslib.h" で定義されている構造体は以下の通り。
|
|
4
|
|
5 /* 前端ベクタ(品詞番号)の定義 */
|
|
6 #define WNN_BUN_SENTOU /* 大文節の先頭になれる */
|
|
7 #define WNN_ALL_HINSI /* すべての品詞 */
|
|
8 /* 終端ベクタの定義 */
|
|
9 #define WNN_VECT_KANREN /* 連文節変換の終端ベクター */
|
|
10 #define WNN_VECT_KANTAN /* 単文節変換の終端ベクター */
|
|
11 #define WNN_VECT_KANZEN /* 全候補取出しの終端ベクター */
|
|
12 #define WNN_VECT_BUNSETSU /* 連文節変換時の、各文節の終端ベクター*/
|
|
13 #define WNN_VECT_NO /* 終端ベクタ1 無し */
|
|
14 /* 文節の前端の接続情報 */
|
|
15 #define WNN_CONNECT /* 指定された(品詞、付属語)に接続できた。*/
|
|
16 #define WNN_SENTOU /* 大文節の先頭 */
|
|
17 #define WNN_NOT_CONNECT /* 先頭になれないし、前に接続できない */
|
|
18 #define WNN_GIJI /* 疑似文節を作った。*/
|
|
19
|
|
20 /* 疑似文節の直前に選択した候補 */
|
|
21 #define WNN_HIRAGANA /* ひらがな *//* 読みのまま */
|
|
22 #define WNN_KATAKANA /* カタカナ */
|
|
23 /* 数字 */
|
|
24 #define WNN_NUM_HAN /* 半角数字 *//* 読みのまま */
|
|
25 #define WNN_NUM_ZEN /* 全角数字 *//* 123 */
|
|
26 #define WNN_NUM_KAN /* 漢数字 *//* 一二三 */
|
|
27 #define WNN_NUM_KANSUUJI /* 漢数字 *//* 百二十三 */
|
|
28 #define WNN_NUM_KANOLD /* 漢数字 *//* 壱百弐拾参 */
|
|
29 #define WNN_NUM_HANCAN /* 半角数字 *//* 1,234 */
|
|
30 #define WNN_NUM_ZENCAN /* 全角数字 *//* 1,234 */
|
|
31 /* 英数 */
|
|
32 #define WNN_ALP_HAN /* 半角 *//* 読みのまま */
|
|
33 #define WNN_ALP_ZEN /* 全角 */
|
|
34 /* 記号 */
|
|
35 #define WNN_KIG_HAN /* 半角 *//* 読みのまま */
|
|
36 #define WNN_KIG_JIS /* 全角(JIS) */
|
|
37 #define WNN_KIG_ASC /* 全角(ASC) */
|
|
38
|
|
39 #define WNN_FT_DICT_FILE
|
|
40 #define WNN_FT_HINDO_FILE
|
|
41 #define WNN_FT_FUZOKUGO_FILE
|
|
42
|
|
43 #define WNN_STATIC_DICT /* 固定形式辞書 */
|
|
44 #define WNN_UD_DICT /* 登録可能形式辞書 */
|
|
45
|
|
46 #define WNN_DIC_RDONLY
|
|
47 #define WNN_DIC_RW
|
|
48
|
|
49
|
|
50 /* header file for dic_syurui */
|
|
51 #define WNN_FILE_NOT_EXIST
|
|
52 #define WNN_NOT_A_JISHO
|
|
53 #define WNN_HINDO_FILE
|
|
54 #define WNN_FUZOKUGO_FILE
|
|
55
|
|
56 /* set_hindo operation */
|
|
57 #define WNN_HINDO_NOP
|
|
58 #define WNN_IMA_ON
|
|
59 #define WNN_IMA_OFF
|
|
60 #define WNN_HINDO_INC
|
|
61 #define WNN_HINDO_DECL
|
|
62 #define WNN_ENTRY_NO_USE
|
|
63
|
|
64 /* Wnn constant
|
|
65 */
|
|
66 #define WNN_HOSTLEN
|
|
67 #define WNN_ENVNAME_LEN
|
|
68
|
|
69 /* js_who */
|
|
70 #define WNN_MAX_ENV_OF_A_CLIENT
|
|
71
|
|
72 struct wnn_jwho {
|
|
73 int sd; /* jserver 内のソケットディスクリプタ*/
|
|
74 char user_name[64]; /* ユーザ名 */
|
|
75 char host_name[64]; /* ホスト名 */
|
|
76 int env[WNN_MAX_ENV_OF_A_CLIENT]; /* このクライアントが使用している
|
|
77 環境番号の列。空いているところには、-1 が入る */
|
|
78 };
|
|
79 typedef struct wnn_jwho WNN_JWHO;
|
|
80
|
|
81 /* js_env_list */
|
|
82 #define WNN_MAX_JISHO_OF_AN_ENV 15
|
|
83 #define WNN_MAX_FILE_OF_AN_ENV 30
|
|
84
|
|
85 struct wnn_env_info {
|
|
86 int env_id; /* 環境番号 */
|
|
87 char env_name[WNN_ENVNAME_LEN]; /* 環境名 */
|
|
88 int ref_count; /* 参照数 */
|
|
89 /* struct wnn_param; */
|
|
90 int fzk_fid; /* 付属語のファイル番号 */
|
|
91 int jishomax; /* 使用している辞書の個数 */
|
|
92 int jisho[WNN_MAX_JISHO_OF_AN_ENV]; /* 使用している辞書の辞書番号。
|
|
93 最初のjishomax個だけ意味がある */
|
|
94 int file[WNN_MAX_FILE_OF_AN_ENV]; /* この環境につながっている
|
|
95 ファイル番号(空いているところには、-1 が入る) */
|
|
96 };
|
|
97 typedef struct wnn_env_info WNN_ENV_INFO;
|
|
98
|
|
99 #define WNN_COMMENT_LEN 512 /* 辞書のコメントの長さ */
|
|
100 #define WNN_F_NAMELEN 100
|
|
101 #define WNN_PASSWD_LEN 16 /* パスワードの長さ */
|
|
102
|
|
103
|
|
104 struct wnn_dic_info {
|
|
105 int dic_no; /* 辞書番号 */
|
|
106 int body; /* 辞書本体のファイル番号 */
|
|
107 int hindo; /* 頻度のファイル番号 */
|
|
108 int rw; /* 辞書が登録可能かどうか
|
|
109 (WNN_DIC_RW, WNN_DIC_RDONLY) */
|
|
110 int hindo_rw; /* 頻度が更新可能かどうか
|
|
111 (WNN_DIC_RW, WNN_DIC_RDONLY) */
|
|
112 int enablef; /* 辞書が使用中かどうか
|
|
113 (1 = 使用中, 0 = 使用中断) */
|
|
114 int nice; /* 辞書の変換時の優先度 */
|
|
115 wchar comment[WNN_COMMENT_LEN]; /* 辞書のコメント */
|
|
116 char fname[WNN_F_NAMELEN]; /* 辞書のファイル名 */
|
|
117 char hfname[WNN_F_NAMELEN]; /* 頻度のファイル名 */
|
|
118 char passwd[WNN_PASSWD_LEN]; /* 辞書のパスワード */
|
|
119 char hpasswd[WNN_PASSWD_LEN]; /* 頻度のパスワード */
|
|
120 int type; /* 辞書の種類(WNN_UD_DICT,WNN_STATIC_DICT) */
|
|
121 int gosuu; /* 辞書の語数 */
|
|
122 };
|
|
123
|
|
124 typedef struct wnn_dic_info WNN_DIC_INFO;
|
|
125
|
|
126 struct wnn_file_stat {
|
|
127 int type; /* ファイルの種類
|
|
128 WNN_STATIC_DICT 固定形式辞書
|
|
129 WNN_UD_DICT 登録可能形式辞書
|
|
130 WNN_HINDO_FILE 頻度ファイル
|
|
131 WNN_FUZOKUGO_FILE 付属語ファイル
|
|
132 WNN_NOT_A_JISHO その他 */
|
|
133 wchar comment[WNN_COMMENT_LEN]; /* ファイルのコメント */
|
|
134 };
|
|
135
|
|
136 typedef struct wnn_file_stat WNN_FILE_STAT;
|
|
137
|
|
138 extern int wnn_errorno; /* Wnnのエラーはこの変数に報告される */
|
|
139
|
|
140 #define FILE_ALREADY_READ -2
|
|
141
|
|
142 /* この構造体は、ライブラリ内部で用いられる */
|
|
143 struct wnn_jserver_id {
|
|
144 int sd;
|
|
145 char js_name[40];
|
|
146 int js_dead;
|
|
147 jmp_buf js_dead_env; /* サーバが死んだ時に飛んでいくenv */
|
|
148 int js_dead_env_flg; /* jd_server_dead_envが有効か否か */
|
|
149 };
|
|
150
|
|
151 typedef struct wnn_jserver_id WNN_JSERVER_ID;
|
|
152
|
|
153 /* この構造体は、ライブラリ内部で用いられる */
|
|
154 struct wnn_env {
|
|
155 int env_id;
|
|
156 WNN_JSERVER_ID *js_id;
|
|
157 };
|
|
158
|
|
159 typedef struct wnn_env WNN_ENV;
|
|
160
|
|
161 struct wnn_param {
|
|
162 int n; /* N(大)文節解析のN */
|
|
163 int nsho; /* 大文節中の小文節の最大数 */
|
|
164 int p1; /* 自立語の頻度のパラメータ */
|
|
165 int p2; /* 小文節長のパラメータ */
|
|
166 int p3; /* 自立語長のパラメータ */
|
|
167 int p4; /* 今使ったよビットのパラメータ */
|
|
168 int p5; /* 辞書のパラメータ */
|
|
169 int p6; /* 小文節の評価値のパラメータ */
|
|
170 int p7; /* 大文節長のパラメータ */
|
|
171 int p8; /* 小文節数のパラメータ */
|
|
172 int p9; /* 疑似品詞 数字の頻度のパラメータ */
|
|
173 int p10; /* 疑似品詞 カナの頻度のパラメータ */
|
|
174 int p11; /* 疑似品詞 英数の頻度のパラメータ */
|
|
175 int p12; /* 疑似品詞 記号の頻度のパラメータ */
|
|
176 int p13; /* 疑似品詞 閉括弧の頻度のパラメータ */
|
|
177 int p14; /* 疑似品詞 付属語の頻度のパラメータ */
|
|
178 int p15; /* 疑似品詞 開括弧の頻度のパラメータ */
|
|
179 };
|
|
180
|
|
181
|
|
182 struct wnn_file_info_struct {
|
|
183 int fid; /* ファイル番号 */
|
|
184 char name[WNN_F_NAMELEN]; /* ファイル名 */
|
|
185 int localf; /* サーバ・サイトのファイルかどうか
|
|
186 1: サーバ・サイト
|
|
187 0: クライアント・サイト */
|
|
188 int type; /* ファイルの種類 */
|
|
189 int ref_count; /* (環境からの)参照数 */
|
|
190 };
|
|
191
|
|
192 typedef struct wnn_file_info_struct WNN_FILE_INFO_STRUCT;
|
|
193
|
|
194 #define WNN_VECT_L ((256+8*4-1)/(8*4) + 5) /***** !!!!! ****/
|
|
195
|
|
196 struct wnn_sho_bunsetsu {
|
|
197 int end; /* 候補文節の end char index */
|
|
198 int start; /* 候補文節の top char index */
|
|
199 int jiriend; /* 候補文節の自立語 end char index */
|
|
200 int dic_no; /* 自立語の辞書内のエントリ番号 */
|
|
201 int entry; /* 候補文節の自立語辞書 entry */
|
|
202
|
|
203 int hinsi; /* 自立語品詞 */
|
|
204 int status; /* 大文節の先頭か */
|
|
205 int hindo; /* 候補自立語の頻度 */
|
|
206 int ima; /* 候補自立語の今使ったよビット */
|
|
207 int kangovect; /* 接続ベクトルテーブルへのポインタ */
|
|
208 int hyoka; /* 小文節評価値 */
|
|
209 wchar *kanji; /* 自立語文字列 */
|
|
210 wchar *yomi; /* 自立語の読み文字列 */
|
|
211 wchar *fuzoku; /* 付属語文字列 */
|
|
212 /*
|
|
213 *頻度については、頻度ファイルが指定されている時は、
|
|
214 *hindo = 頻度ファイルの(実)頻度値 + 辞書内の(実)頻度値
|
|
215 *ima = 頻度ファイルの今使ったよビット
|
|
216 *
|
|
217 *頻度ファイルが指定されていない時には、
|
|
218 *hindo = 辞書内の(実)頻度値、ima = 辞書内の今使ったよビット
|
|
219 *である。ここで、実頻度値とは、計算機内で7ビットに圧縮された値である。
|
|
220 *仮想頻度値ではなく実頻度値を返すのは、変換結果のデバッグのためである。
|
|
221 */
|
|
222 };
|
|
223
|
|
224 struct wnn_dai_bunsetsu {
|
|
225 int end; /* 候補文節の end char index */
|
|
226 int start; /* 候補文節の top char index */
|
|
227 struct wnn_sho_bunsetsu *sbn; /* 小文節解析結果へのポインタ */
|
|
228 int hyoka; /* 大文節評価値 */
|
|
229 int sbncnt; /* 小文節数 (次候補の場合は、次候補数)
|
|
230 DSD_SBNは、*sbn から sbncnt だけある */
|
|
231 };
|
|
232
|
|
233 struct wnn_jdata {
|
|
234 int dic_no; /* 辞書番号 */
|
|
235 int serial; /* 辞書内のエントリ番号 */
|
|
236 int hinshi; /* 品詞番号(品詞番号と品詞名の対応は、manual/etc
|
|
237 の下を参照) */
|
|
238 int hindo; /* 頻度 */
|
|
239 int ima; /* 今使ったよビット */
|
|
240 int int_hindo; /* 辞書内頻度 */
|
|
241 int int_ima; /* 辞書内、今使ったよビット */
|
|
242 wchar *yomi; /* 読みの文字列 */
|
|
243 wchar *kanji; /* 漢字文字列 */
|
|
244 wchar *com; /* エントリのコメント文字列 */
|
|
245 /*
|
|
246 *頻度については、頻度ファイルが指定されている時は、
|
|
247 *hindo = 頻度ファイルの(仮想)頻度値、ima = 頻度ファイルの今使ったよビット
|
|
248 *int_hindo = 辞書内の(仮想)頻度値、int_ima = 辞書内の今使ったよビット
|
|
249 *
|
|
250 *頻度ファイルが指定されていない時には、
|
|
251 *hindo = 辞書内の(仮想)頻度値、ima = 辞書内の今使ったよビット
|
|
252 *int_hindo = -1、int_ima = -1
|
|
253 *
|
|
254 *ただし、どちらの場合でも、エントリが使用中止の状態の時には、
|
|
255 *hindo = -1, ima = 0 あるいは、
|
|
256 *int_hindo = -1, int_ima = 0 となる。
|
|
257 *ここで、(仮想)頻度値とは、計算機内で7ビットに圧縮された頻度値から、
|
|
258 *実際の値を想定した値である。
|
|
259 */
|
|
260 };
|
|
261
|
|
262 struct wnn_ret_buf {
|
|
263 int size; /* buf から alloc されている大きさ */
|
|
264 char *buf; /* malloc などでとられた領域 */
|
|
265 };
|
|
266
|
|
267
|
|
268 #define WNN_F_UNIQ_LEN (sizeof(struct wnn_file_uniq))
|
|
269
|
|
270 /* この構造体は、ライブラリ内部で用いられる */
|
|
271 struct wnn_file_head {
|
|
272 struct wnn_file_uniq{
|
|
273 int time;
|
|
274 int dev;
|
|
275 int inode;
|
|
276 char createhost[WNN_HOSTLEN];
|
|
277 } file_uniq;
|
|
278 struct wnn_file_uniq file_uniq_org;
|
|
279 int not_used1;
|
|
280 int not_used2;
|
|
281 int file_type;
|
|
282 char file_passwd[WNN_PASSWD_LEN];
|
|
283 };
|
|
284
|
|
285 struct wnn_fukugou{
|
|
286 unsigned char *name; /* 複合品詞の名前 */
|
|
287 /* fukugou hinsi is held as a string */
|
|
288 unsigned short *component; /* 複合品詞の構成要素となる品詞の番号の配列
|
|
289 (最後は 0xffff で終る)
|
|
290 */
|
|
291 };
|
|
292
|
|
293 struct wnn_hinsi_node{
|
|
294 unsigned char *name; /* 品詞ノードの名前 */
|
|
295 int kosuu; /* 子どもの数 */
|
|
296 unsigned char *son; /* 最初の子どもへのポインタ */
|
|
297 };
|
|
298
|
|
299
|
|
300 #define WNN_FILE_HEADER_LEN (WNN_PASSWD_LEN + 8 + WNN_FILE_STRING_LEN + \
|
|
301 sizeof(struct wnn_file_uniq) * 2 + 4)
|
|
302 /*
|
|
303 8 is for future use
|
|
304 4 is for file_type.
|
|
305 */
|
|
306
|