1、信息检索实验报告 信管11班 吕双武 (01083088) 熊炎波 (01083094) 2004-6-12第一单元 文本处理与倒排文档的建立实验目的:通过用高级语言编程实现倒排文档组织,深刻理解倒排文档的结构和组成,掌握自动抽词标引、建立倒排文档的基本原理和实现方法。实验内容: (一) 系统功能建立文献信息条目的顺排文档;对标题字段、文摘或全文字段进行自动抽词标引;建立倒排文档组织。(二) 处理方法与思想 根据文献中词频、词性与词的区分能力之间的关系,具有好的区分能力的词应是中等词频有实际意义的词,根据这一思想去掉停用词,对文本进行词干化处理。然后根据一定的关键词赋权方法进行自动标引和抽词,
2、生成K-D文件和倒排文档。(三) 算法流程与数据结构1、从磁盘中读入一篇文献 2、对文献文本进行预处理: 词汇分析 删除停用词 词干处理 选择标引词 建立概念等级关系 3、对选出的标引词及其地址和记录号进行输出并存储在磁盘空间中,生成标引词表wordlist.txt文件4、对检索入口词进行规范化处理,通过屏幕输入检索词进行检索,并验证倒排文档的生成(四) 源程序以下采用 c 程序设计语言实现上述算法#include#include#include#include#define MAX_LENGTH 6#define MAX_COUNT 1000 #define STOPLIST_COUNT 2
3、0char xx5080;int maxline=0; /*the Total Line Of The d1.txt*/typedef struct node char word20; char num10; int row; int col; WNODE; WNODE wordListMAX_COUNT;char *stopList=a,an,and,are,as,at,be,by,for,from,in,is,of,on,or,our,the,to,with,we;int SearchWord(char *str) int i=0; for(;iSTOPLIST_COUNT;i+) if(
4、strcmp(stopListi,str)=0) return 1; return 0; int ReadWord(char *document)FILE *fp;int i=0;char *p;if(fp=fopen(document,r )=NULL) return 1;while(fgets(xxi,80,fp)!=NULL)p=strchr(xxi,n);if(p) *p=0;i+;maxline=i;fclose(fp);return 0;void Word(char *docu_num) clrscr(); int i,j,k,m,n,ll,h=0,t=0,r=0,flag; ch
5、ar yy20; for(i=0;imaxline;i+) ll=strlen(xxi); /printf(%dn,ll); /for(j=0;jll;j+) printf(%cn,xxij); k=n=0; for(j=0;jll;j+) /if(isalpha(xxij) k+; if(isalpha(xxij)flag=1;yyn+=xxij; else yyn=0; if(flag) if(!SearchWord(yy) for(t=0;t=n;t+) wordListh.wordt=yyt; /wordListh.word=yy; for(r=0;r=4;r+) wordListh.
6、numr=docu_numr; wordListh.row=i; wordListh.col=j-n; h+; n=0; flag=0; k=0; yyn=0; if(flag) if(!SearchWord(yy) for(t=0;t=n;t+) wordListh.wordt=yyt; for(r=0;r=4;r+) wordListh.numr=docu_numr; wordListh.row=i; wordListh.col=j-n; h+; n=0; flag=0; k=0; void WriteWord()FILE *fp;int i;clrscr();fp=fopen(WordL
7、ist.txt,a);for(i=0;i level( Aj),则立即停止向后搜索,并进行以下操作: NFD(Ai) NFD(Aj)(2)逆向扫描遇见AFD(Ai) 为空时,同样应向回搜索,依次判别各项level(Aj)值。当满足条件level( Ai) level( Aj)或者搜索到提问逻辑式中最后一个检索项目词时,进行以下操作: AFD(Ai) AFD(Aj)3、 分析提问式 Q=A+B*(C+D*(E+F)+G*H Q=01+02*(03+04*(05+06)+07*08 4、检索处理流程从顺排文档中依次读出一篇文献记录,然后与提问文档中所有的提问式进行匹配检索,如满足提问表达式所要求的
8、条件,该文献记录就作为提问式的命中文献输出。系统需要对提问文档中各提问式分批进行处理,先从提问式文档中取N个提问式处理,当这N个提问式与所有数据库中文献记录匹配完毕后,再从提问式文档中取N个提问式重复以上处理过程,一直到提问式文档中数据处理完为止。 (二) 数据结构(1)检索词表结构检索词表是为了描述提问式中出现的提问检索词而设计的。因为在实际提问式处理过程中,提问检索词只是以其在检索词表中检索词号形式出现,而不是检索词本身。(2)展开表结构地址AFDNFD层次值检索词号属性项号比较部位比较条件有效位检索词项地址是指该行所在展开表中地址匹配成功时转向地址AFD,给出一旦在检索词与文献记录中标引
9、词匹配成功时,下步应该处理的提问检索词在提问表中的地址。匹配不成功时转向地址NFD,给出一旦检索词与标引词匹配失败以后应该转向展开表中的地址。层次值给出层次计数器在完成展开表填写时的当前处理值。(3)标引词标识表结构是为了描述文献记录中各标引词特征而设立的,它的设立为提问文档与文献记录的匹配奠定了基础。标引此标识号有效值项目词标引词标识号是系统赋予从文献记录中抽出标引词的类编码,实际上是属性项号。有效位是指标引词在匹配中的有效长度。项目词是指具体的标引词(三) 源程序以下采用 c 程序设计语言实现上述算法# include main()int b20,a204;int i,h,j,k,l,le
10、vel;printf(input query:n);i=0;do scanf(%c,&bi); i+;while(bi!=.);h=i;for(i=0;ih;i+)ai0=i+1;j=0;level=0;for(i=0;i=A)&(bi0;j-)if(aj-13aj3) if(aj-11!=0) aj-12=aj2; if(aj-12!=0) aj-11=aj1; if(aj-13=aj3) if(aj-11!=0) aj-12=aj2; if(aj-12!=0) aj-11=al1; if(aj-13aj3) if(aj-11!=0) for(k=j;k=l;k+) if(ak3=aj-13
11、) aj-12=ak2; if(aj-12!=2) for(k=j;k=l;k+) if(ak3=aj-13) aj-11=ak1; printf(add afd nfd level wordn);for(j=1;jl+1;j+)for(i=0;i=A&ch=a&ch=z)/*aspn=ch;*/ /*生成检索词表,算项保存在数组aspk中*/expt=ch; t+;/*n+;*/elseif(ch=() /*生成算子栈,并判断优先级,符合条件的算子保存在数组stacktop中,判断算子出栈,进入逆波兰输出区*/top+;stacktop=ch;elseif(ch=)while(stackto
12、p!=()expt=stacktop;top-;t+;top-;elseif (ch=+|ch=-)while(top!=0&stacktop!=()expt=stacktop;top-;t+;top+;stacktop=ch;elseif(ch=*)while(stacktop=*)expt=stacktop;top-;t+;top+;stacktop=ch;ch=stri;i+;while(top!=0)expt=stacktop;t+;top-;expt=#;for(j=1;j=t;j+)printf(%c,expj);printf(n) /*从文件中分行读入文献记录*/ /*fp=fo
13、pen(index.dat);j=0for(i=0;i100;i+)while(fp!=#) fscanf(fp,%c,&indexij); j+; ch=indexij; y=1; top=0;for(k=1;k=A&ch=a&ch=z) cc=expk; top+; if(strcmp(ch,cc)=0) /*算项集合与文献记录进行比较*/ /* yardtopy=i+1; y+; elseswitch (expk)case +:yardtop-1=strcat(yardtop-1,yardtop);break; case -:yardtop-1=str (yardtop,yardtop-1);break;case *:yardtop-1=str (yardtop-1,yardtop);break;top-; if(feof(fp)break;fclose(fp); printf(The Retrieval Results are:);printf(n);for(x=1;xy;x+) i=yard1x; printf(%c,indexi); (四) 算法改进该算法一般需要七个工作区,与检索提问式的形式有很大关系,可以通过改变检索式的构造形式,优化检索算项和算子的存储方式,以准波兰式的形式对检索算子与算项进行实时运算来节省空间和时间,进而提高检索效率。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1