倒排索引c语言,什么是c语言倒排文件索引

本文详细介绍了如何使用C语言创建和操作倒排文件索引,通过创建if_t结构、word_t和wf_t子结构,演示了文件插入、搜索和遍历的功能。通过代码实例展示了如何在实际项目中使用这个倒排索引结构来跟踪文档与单词之间的引用关系。
摘要由CSDN通过智能技术生成

C语言实现简单的倒排文件索引

来源:http://blog。csdn。net/lansatiankongxxc/article/details/8314996

inver。h文件#ifndef INVERT_FILE_H #define INVERT_FILE_H #include #include typedef struct _invertfile_ { unsigned int tablelen; void **table; //unsigned int offset; unsigned int nodecount; }if_t; typedef struct _word_{ unsigned int id; unsigned int refered;// void *link; }word_t; typedef struct _word_frequency_{ unsigned int d_id; unsigned int refered;//the num of referenced in the document void *next; }wf_t; if_t* invertfile_create(int length); void invertfile_insert(if_t *h,int w_id,int d_id); wf_t* invertfile_search(if_t *h,int w_id,int d_id); void invertfile_traverse(if_t *h); void invertfile_free(if_t *h); #endif //该代码片段来自于: http://www。

sharejs。com/codes/cpp/5963invert。cpp#include"invert。h" if_t* invertfile_create(int length){ if_t *h; h = (if_t *)calloc(1,sizeof(if_t)); if (NULL == h) return NULL; h->table =(void **)calloc(length,sizeof(void *)); h->tablelen=length; h->nodecount=0; word_t *w; for(int i=0;itable[i]=malloc(sizeof(word_t)); w=(word_t*)h->table[i]; w->id=i; w->refered=0; w->link=NULL; } return h; } //check if document d_id have word w_id wf_t* invertfile_search(if_t *h,int w_id,int d_id){ word_t *w; wf_t *wf; w=(word_t*)h->table[w_id]; if(w->refered>0){ wf=(wf_t*)w->link; while(wf){ if(wf->d_id==d_id)return wf; wf=(wf_t*)wf->next; } } return NULL; } void invertfile_insert(if_t *h,int w_id,int d_id){ word_t * w=(word_t*)h->table[w_id]; wf_t * wf; if((wf=invertfile_search(h,w_id,d_id))!=NULL){ wf->refered ; } else{ wf=(wf_t *)malloc(sizeof(wf_t)); wf->next=w->link; w->link=wf; w->refered ; wf->refered ; wf->d_id=d_id; h->nodecount ; } } void invertfile_free(if_t *h){ word_t *w; wf_t* wf,*cur; for(int i=0;itablelen;i ){ w=(word_t*)h->table[i]; wf=(wf_t*)w->link; while(wf!=NULL){ cur=wf; wf=(wf_t*)wf->next; free(cur); } free(w); } free(h->table); } void invertfile_traverse(if_t *h){ word_t *w; wf_t* wf,*cur; for(int i=0;itablelen;i ){ w=(word_t*)h->table[i]; wf=(wf_t*)w->link; printf("word_id:%d;",w->id); while(wf!=NULL){ cur=wf; wf=(wf_t*)wf->next; printf("d_id:%d,freq:%d;",cur->d_id,cur->refered); } printf("

"); } } //该代码片段来自于: http://www。

sharejs。com/codes/cpp/5963测试文件main。cpp#include"invert。h" int main(){ if_t *f=invertfile_create(10); invertfile_insert(f,1,1); invertfile_insert(f,1,1); invertfile_insert(f,1,3); invertfile_insert(f,2,5); invertfile_traverse(f); invertfile_free(f); } //该代码片段来自于: http://www。

sharejs。

com/codes/cpp/5963实验结果:word_id:0; word_id:1;d_id:3,freq:1;d_id:1,freq:2; word_id:2;d_id:5,freq:1; word_id:3; word_id:4; word_id:5; word_id:6; word_id:7; word_id:8; word_id:9;。

全部

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值