libwam quick guide for IR/NL users * コンパイル % cc afo.c -I$GETAROOT/include -L$GETAROOT/lib -lwam -lgetamu * インクルードファイル #include * 初期化 wam_init(NULL); * コーパス(c_name)のWAM(c)を開く. c = wam_open(c_name, 0); * WAM(c)を閉じる. wam_close(c); * 文書名(d_name)と文書id(d_id)を変換する. d_id = wam_name2id(c, WAM_ROW, d_name); d_name = wam_id2name(c, WAM_ROW, d_id); * 単語名(w_name)と単語id(w_id)を変換する. w_id = wam_name2id(c, WAM_COL, w_name); w_name = wam_id2name(c, WAM_COL, w_id) * コーパス(c)内の異なり単語数(Nw)を求める. Nw = wam_size(c, WAM_COL); * コーパス(c)内の文書数(Nd)を求める. Nd = wam_size(c, WAM_ROW); * 各文書内の異なり単語数を全文書に対して総和した数(total_len)を求める. total_len = wam_total_elem_num(c, WAM_ROW); 実際には,文書内の異なり単語数をその文書の文書長と定義した場合に,コー パス内の平均文書長(ave_len)を求める時に使われることが多い. ave_len = (double) wam_total_elem_num(c, WAM_ROW) / Nd; * コーパス内の単語総頻度(total_freq)を求める. total_freq = wam_total_freq_sum(c, WAM_ROW); * ある文書(d_id)内の異なり単語数(len)を求める. len = wam_elem_num(c, WAM_ROW, d_id); * ある文書(d_id)内の単語総頻度(freq_d)を求める. freq_d = wam_freq_sum(c, WAM_ROW, d_id); * ある単語(w_id)が出現する文書数(df_w)を求める.単語のDocument Frequency に相当する. df_w = wam_elem_num(c, WAM_COL, w_id); * ある単語(w_id)のコーパス内での単語総頻度(freq_w)を求める. freq_w = wam_freq_sum(c, WAM_COL, w_id); * ある文書(d_id)内である単語(w_id)が出現する頻度(freq)を求める. 1) 文書(d_id)をキーに線型検索. struct xr_vec *vec; wam_get_vec(c, WAM_ROW, d_id, &vec, XR_PTRTEMP|XR_HOSTORDER); for (i = 0; i < vec->elem_num; i++) { if (vec->elems[i].id == w_id) { freq = vec->elems[i].freq; break; } } 2) 単語(w_id)をキーに線型検索. struct xr_vec *vec; wam_get_vec(c, WAM_COL, w_id, &vec, XR_PTRTEMP|XR_HOSTORDER); for (i = 0; i < vec->elem_num; i++) { if (vec->elems[i].id == d_id) { freq = vec->elems[i].freq; break; } } 注) XR_PTRTEMPで確保した領域(vecで指されている)は次回のwam_get_vecで破 壊される可能性がある.