信息检索2
江西财经大学信息管理学院
信息检索大作业
论 文 检 索
学 院: 信息管理学院 专 业: 计算机科学与技术 班 级: 07级班 姓 名: 赵银凤 0072328
黄 浩 0072297
任课教师: 刘德喜
2009年12月27日
一、 实验背景
21 世纪是经济信息化、社会信息化的时代。终身教育、开放教育、能力导向学习成为教育理念的重要内涵。为满足知识创新和终身学习的需求,培养适应21 世纪现代化建设需要的新型人才,发达国家和地区纷纷将信息素养或信息能力教育作为21 世纪人才能力的重要内容。科学技术的发现、发明与创造,实质上是一整套的创新过程。科学的发现是科学家的创新思维和实验手段相结合的成果,把科学定理、定律转化为技术的发明也是一种创新,把新的科学技术运用到生产过程,形成现实的生产力,当然离不开创新。
信息检索的作用与意义主要体现在以下三方面:
避免重复研究或走弯路
科学技术的发展具有连续性和继承性,闭门造车只会重复别人的劳动或者走弯路。在研究工作中,任何一个课题从选题、试验直到出成果,每一个环节都离不开信息。研究人员在选题开始就必须进行信息检索,了解别人在该项目上已经做了哪些工作,哪些工作目前正在做,谁在做,进展情况如何等。这样,用户就可以在他人研究的基础上进行再创造,从而避免重复研究,少走或不走弯路。
节省研究人员的时间
科学技术的迅猛发展加速了信息的增长,加重了信息用户搜集信息的负担。许多研究人员在承接某个课题之后,也意识到应该查找资料,但是他们以为整天泡在图书馆“普查”一次信息就是信息检索,结果浪费了许多时间,而有价值的信息没有查到几篇,查全率非常低。信息检索是研究工作的基础和必要环节,成功的信息检索无疑会节省研究人员的大量时间,使其能用更多的时间和精力进行科学研究。
是获取新知识的捷径
在改革开放的今天,传统教育培养的知识型人才已满足不了改革环境下市场经济的需求,新形势要求培养的是能力型和创造型人才,具备这些能力的人才首先需要具备自学能力和独立的研究能力。
综上所述,在经济信息化和社会信息化的21 世纪,无论是素质教育的实施,创新人才的培养,科学研究的开展,信息资源的开发,还是科学决策的进行,都离不开信息检索技术的普及与应用。信息检索的重要作用及意义在未来的社会中
将日益显现。信息检索是信息化时代帮助人们快速获得所需信息的有效途径,但是,由于用户不能够准确构造表达信息需求的检索式,导致检索效率低下甚至失败。例如,用户选择使用的词可能与检索库中出现的词不匹配,如何解决词的不匹配现象已经成为信息检索领域的重要研究方向。查询扩展(query expansion)是解决该问题的有效方法之一。它利用各种统计信息,对原始查询进行有利于检索的扩展,从而使得查询可以包含更多的相关信息,有效解决大部分词的不匹配问题,达到提高信息检索性能的目的。 二、
实验内容
实验要求:
经过一个学期时间的学习,学会使用一种信息检索模型,并使用该模型实现一个检索系统的设计。
1. 能对一个目录的所有文件进行检索; 2. 检索结果返回文件名和相关度。 实验背景:
信息检索模型是指如何对查询和文档进行表示,然后对它们进行相似度计算的框架和方法。它的本质是对文档的相关度进行建模。信息检索模型也是IR中的核心内容之一。它按照所用的数学方法可以分为三类。
A. 基于集合论的IR模型(Set Theoretic models) B. 基于代数论的IR模型(Algebraic models) C. 基于概率统计的IR模型(Probabilistic models)
本文所用的向量空间模型(Vector Space Model, VSM)属于基于代数论的IR模型。向量空间模型(Vector Space Model)指的是自每个文档中选择M个无序特征项ti,可以是词根、词、短语或者其他选自文档的语料;利用这些特征项,就可以将每个文档dj用特征项向量(a1j,a2j,a3j,......,aMj)来表示;然后通过对N个训练文档进行权重计算AM*N(aij),也就是计算各个向量的余弦值。
向量的模(大小) :
22
xxx12x2...xn
向量的(欧式)距离:
dist(x,y)
夹角:
(x1y1)2(x2y2)2...(xnyn)2
cos
xy
xy
向量空间模型是一个应用于信息过滤, 信息撷取,索引以及评估相关性的代数模型。它是康奈尔大学Salton等人于上个世纪70年代提出并倡导的。SMART是首个使用这个模型的信息检索系统。
Term独立性假设:Term在文档中出现是独立、互不影响的。查询词(query)和文档都可以转化成Term及其权重组成的向量表示,都可以看成空间中的点。向量之间通过距离计算得到查询词和每个文档的相似度。
文件(语料)被视为索引词(关键词)形成的多次元向量空间,索引词的集合通常为文件中至少出现过一次的词组。
搜寻时,输入的检索词也被转换成类似于文件的向量,这个模型假设,文件和搜寻词的相关程度,可以经由比较每个文件(向量)和检索词(向量)的夹角偏差程度而得知。事实上,计算夹角向量之间的余弦比直接计算夹角容易:
余弦为零表示检索词向量垂直于文件向量,即没有符合,也就是说该文件不含此检索词。
CtfD(q)
sim(D,Q))
Ddf(q)qQ
VSM的优缺点:
优点:
1. 简洁直观,可以应用到很多其他领域(文本分类、生物信息学); 2. 支持部分匹配和近似匹配,结果可以按照相似度进行排序; 3. 检索效果可以接受。
缺点:
1. 理论不够,它属于直觉的经验性公式
2. 标引项之间的独立性假设与实际不符,实际上,Term的出现之间是
有关系,不完全独立的。
三、 实验步骤
1) 从中国知网下载十篇论文,并且把这些论文转化成TXT文件;
2) 把文件读入内存中,并保存至数组中,程序采用的文件读取方法是将实
事先保存在数组中的文件名通过循环的方式打开并将文件头指针赋给source[i]指针中;
void freadtxt(){ int i; char ch; for(i=0;i
}
3) 对所有文档内容进行二元切词;事先对文件进行处理,使得文档中不存
在除了汉字以外的其他字符,然后通过简单的嵌套循环,每隔四个字节一断就是两个汉字,达到切词的目的。
for(int c=0;c
4) 计算相关数据:文件长度,文件平均长度;利用切词得出的文件内容,
简单循环至数组末端就可以计算出文件长度。
for(i=0;i
// cout
5) 读取检索词,对检索词进行二元切词;过程和文件切词类似。
6) 把每个关键词与文档内容进行匹配,计算关键词在文档中出现的次数;
while(searchTerm[i]!='\0') { keyWord[j][k++]=searchTerm[i++]; if(k%4==0) { keyWord[j][k]='\0'; // cout
7) 通过上一步骤,可求出关键词在几篇文档中出现,计算出其频率; 8) 根据以上求出的数据,利用向量空间模型求出检索词在每篇文档的权重;
for(c=0;c
0.2*wordCount[c]/wordAverage)) *log((NUM+1)*NUM/wordDoc[i]);
}
weight[c]=weight[c]+keyWeight; // cout
通常采用的公式如下:
1ln(1ln(c(w,d)))N1
c(w,q)lnddf(w)wqd
(1s)s
avdl
9) 采用冒泡法对权重及论文进行排序,按从大至小的顺序输出论文的标题。
for(i=1;i
四、 程序流程
五、 实验不足
1. 只对文档内容进行检索,未从标题及作者进行多方面检索
可以试试将作者和标题另外重新作为一个文档内容,实现检索,时间不足,没有实现。
2. 在对文档进行切词后,没有把相同的词进行统计,且未将切记后的
内容保存到文件中,以至于每次进行检索时,所有的数据都需重新计算
3. 文件的读入需先把文件名保存到数组中,当有大量文档时,工作量
大
六、 实验心得
好久没编程序了,都快不知道程序怎么写了。这恐怕是最大的感想了。然后就是对检索的理解,原本看着那个式子挺顺眼的,可以到真实操作却麻烦了。终于搞定,一个字,累! 附:代码
#include
char name[NUM][100]={
论.txt
void freadtxt(){
}
void main()
{
int success=1; while(success){ int i; char ch; for(i=0;i
char searchTerm[50]={0}; cout
} } { } Word[j][k]='\0'; j++; i=i-2; k=0; int jj=j; for(i=0;i
} double keyWeight=0.0; double weight[10]={0.0}; for(c=0;c
} weight[c]=weight[c]+keyWeight; // cout
} } } } } title[k]=name[j][k]; name[j][k]=name[j+1][k]; name[j+1][k]=title[k]; cout