コード例 #1
0
ファイル: split.c プロジェクト: aaeviru/getasearch
int main(int argc,char *argv[]){
	if ( argc < 3 ){
		printf("input error:handle splitnum\n");
		return -1;
	}
	FILE *fp;
	wam_init(NULL);
	WAM *w;
	u_int id;
        char *name;
	w = wam_open(argv[1]);
	if(!w){
		printf("wamopen error\n");
		return -1;
	}
	int i,j;


	struct syminfo qq[1000];
	struct syminfo *q = qq;
/*
	q.id = id;
	q.TF_d = 1;
	q.TF = 1;
	q.weight = NaN;
	q.attr = WSH_OR;
*/
	char ** sw = malloc(100 * sizeof( char* ) );;
	int sw_len = sw_init(sw);
	char** filename = malloc(4000 * sizeof(char*) );
	int filenum = trave_dir("/home/ko/topics/",filename);
	char temp[100] , *p, *term[1000];
	ssize_t k = 0;
	int l;
	for(j=0;j<filenum;j++){
		k = 0;
		fp = fopen(filename[j],"r");
		printf("%s\n",filename[j]);
		term[k] = malloc( 100*sizeof(char) );
		while(fscanf(fp,"%s",term[k]) != EOF){ 
			k++;
			term[k] = malloc( 100*sizeof(char) );
		}
		free(term[k]);

		fclose(fp);
		char opfile[50];
		if ( strcmp(argv[2] , "all" ) == 0 ){
                        snprintf(opfile,50,"%s/split/%s",RESULTPATH,filename[j]+strlen(filename[j])-8);
                        fp = fopen(opfile,"w");
                        for(l=0;l<k;l++){
				ssize_t kk = 1;
                                query(q,w,&term[l],&kk,0,sw,sw_len);
				if(kk <= 0){
                                        continue;
                                }

                                ssize_t len = 0;
                                ssize_t num = 1000;

                                struct syminfo *result = wsh(q,kk,w,WAM_COL,WT_SMARTAW,&num,&len);
                                fprintf(fp,"query:%d\nnum:%d\nresult:%d\n",kk,num,len);
                                for(i=0;i<num;i++){
                                        fprintf(fp,"name:%s df_d:%d df:%d tf_d:%d tf:%d weight:%lf\n",wam_id2name(w, WAM_ROW, result[i].id),result[i].DF_d,result[i].DF,result[i].TF_d,result[i].TF,result[i].weight);
                                }
                        }
                        fclose(fp);
		}else{
			int SPLIT = atoi(argv[2]);
			snprintf(opfile,50,"%s/%d/%s",RESULTPATH,SPLIT,filename[j]+strlen(filename[j])-8);
			//printf("file:%s\n",opfile);
			fp = fopen(opfile,"w");
			for(l=0;l<SPLIT;l++){
				ssize_t kkk = k/SPLIT;
				ssize_t kk = kkk;
				if(l == SPLIT-1) kk = k - kkk*l;
				query(q,w,&term[kkk*l],&kk,0,sw,sw_len);
				ssize_t len = 0;
        			ssize_t num = 1000;
        			if(kk <= 0){
                			printf("qlen <= 0\n");
					fprintf(fp,"query:%d\nnum:%d\nresult:%d\n",kk,0,len);
					continue;
        			}
	
        			struct syminfo *result = wsh(q,kk,w,WAM_COL,WT_SMARTAW,&num,&len);
				if(len > 1000) printf("%s over 1000\n",filename[j]);
        			fprintf(fp,"query:%d\nnum:%d\nresult:%d\n",kk,num,len);
        			for(i=0;i<num;i++){
                			fprintf(fp,"name:%s df_d:%d df:%d tf_d:%d tf:%d weight:%lf\n",wam_id2name(w, WAM_ROW, result[i].id),result[i].DF_d,result[i].DF,result[i].TF_d,result[i].TF,result[i].weight);
				}	
			}
			fclose(fp);
		}
	
	}
	return 0;
}
コード例 #2
0
ファイル: tstwam.c プロジェクト: aaeviru/getasearch
int main(int argc,char *argv[]){
	if(argc < 2){
		printf("input:wam query\n");
		return 1;
	}
	FILE *fp;
	wam_init(NULL);
	WAM *w;
	u_int id;
	w = wam_open(argv[1]);
/*
	if (!(id = wam_name2id(w, WAM_COL, name))) {        
                fprintf(stderr, "この 単語 は登録されていません: %s\n", name);
        }
	
	printf("id:%d\n",id);

	if (!(name = wam_id2name(w, WAM_COL, id))) {        
                fprintf(stderr, "この id は登録されていません: %d\n", id);
        }
	printf("name:%s\n",name);
	struct xr_vec *vec;
        u_int elem_num;
        if ((elem_num = wam_get_vec(w, WAM_COL, id, &vec))==-1) {
                err(1, "失敗: get_vec");
        }
*/
/*
        for (i=0; i<elem_num; i++) {
		struct xr_elem *e = &vec->elems[i];
                char *name;
                name = wam_id2name(w, WAM_ROW, e->id);
                printf("id=%d, name=%s, frq=%d\n", e->id, name, e->freq);
        }
*/	
	ssize_t lenth = argc -2;
	int i = 2,j = 0;
	struct syminfo q[100];
	printf("lenth:%lld\n",lenth);
	if(q){
		while(i<argc){
			int type = 0;
			if(argv[i][0] == '-'){
	                	type = argv[i][1] - '0';
				i++;
				lenth--;
        		}
			if (!(id = wam_name2id(w, WAM_COL, argv[i]))) {        /* 列: ID -> name */
		                fprintf(stderr, "この 単語 は登録されていません: %s\n", argv[2+i]);
				return -1;
        		}
			printf("name:%s id:%lld\n",argv[i],id);
			q[j].id = id;
        		q[j].weight = NaN;
			switch(type){
				case 0:
        				q[j].attr = WSH_OR;
					break;
				case 1:
                                        q[j].attr = WSH_AND;
                                        break;
				case 2:
                                        q[j].attr = WSH_NOT;
                                        break;
				default:
					q[j].attr = WSH_OR;
                                        break;
			}
			i++;
			j++;
		}

	}else{
	}
/*
	q.id = id;
	q.TF_d = 1;
	q.TF = 1;
	q.weight = NaN;
	q.attr = WSH_OR;
*/
	ssize_t len = 0;
	ssize_t num = 10;
	struct syminfo *result = wsh(q,lenth,w,WAM_COL,WT_SMART,&num,&len);
	printf("%d\n",len);
	for(i=0;i<num;i++){
		char name[10];
		snprintf(name,9,"%s",wam_id2name(w, WAM_ROW, result[i].id)); 
		printf("name:%s df_d:%d df:%d tf_d:%d tf:%d weight:%lf\n",name,result[i].DF_d,result[i].DF,result[i].TF_d,result[i].TF,result[i].weight);
//	wsh(&q,1,w,WAM_COL,WT_SMART,&num,&len,NULL,compar_syminfo_weight);
	}

	wam_close(w);
	return 0;
}
コード例 #3
0
ファイル: shmem.c プロジェクト: liyu1981/postgresql-r-hack
void
ShmemDynAllocInit(void)
{
	wam_init();
}