信息检索与搜索引擎技术实验向量空间模型.docx
- 文档编号:11613639
- 上传时间:2023-03-28
- 格式:DOCX
- 页数:17
- 大小:242.12KB
信息检索与搜索引擎技术实验向量空间模型.docx
《信息检索与搜索引擎技术实验向量空间模型.docx》由会员分享,可在线阅读,更多相关《信息检索与搜索引擎技术实验向量空间模型.docx(17页珍藏版)》请在冰豆网上搜索。
信息检索与搜索引擎技术实验向量空间模型
昆明理工大学信息工程与自动化学院学生实验报告
(2014—2015学年第1学期)
课程名称:
信息检索与搜索引擎技术开课实验室:
信自楼4452014年12月23日
年级、专业、班
计科111
学号
2
姓名
成绩
实验项目名称
向量空间模型
指导教师
李卫疆
教师评语
该同学是否了解实验原理:
A.了解□B.基本了解□C.不了解□
该同学的实验能力:
A.强□B.中等□C.差□
该同学的实验是否达到要求:
A.达到□B.基本达到□C.未达到□
实验报告是否规范:
A.规范□B.基本规范□C.不规范□
实验过程是否详细记录:
A.详细□B.一般□C.没有□
教师签名:
年月日
一、上机目的及内容:
给定文档语料:
d1:
北京安立文高新技术公司
d2:
新一代的网络访问技术
d3:
北京卫星网络有限公司
d4:
是最先进的总线技术。
。
。
d5:
北京升平卫星技术有限公司的新技术有。
。
。
设计一个针对这些文档的信息检索系统。
具体要求是:
1)给出系统的有效词汇集合(说明取舍原因)。
2)写出d1和d2在VSM中的表示(使用tf*idf,写出各项的数字表达式,具体数值不必实际计算出来)。
3)画出系统的倒排文件示意图。
4)按照向量夹角的余弦计算公式,给出针对查询“技术的公司”的前3个反馈结果。
二、实验原理
给定文档语料:
•d1:
北京安立文高新技术公司
•d2:
新一代的网络访问技术
•d3:
北京卫星网络有限公司
•d4:
是最先进的总线技术。
。
。
•d5:
北京升平卫星技术有限公司的新技术有。
。
。
设计一个针对这些文档的信息检索系统。
具体要求是:
1)给出系统的有效词汇集合(说明取舍原因)。
北京、安、立、文、高新、技术、公司、新、网络、访问、卫星、有限、先进、总线、升、平
的、是、最、有,这些词作为停用词不能加入系统的有效集合
一、代,去除后并不影响原来句子语义的表达也不能算作系统的有效集合。
2)写出d1和d2在VSM中的表示(使用tf*idf,写出各项的数字表达式,具体数值不必实际计算出来)。
得到的矩阵:
Term
d1
d2
d3
d4
d5
Term出现次数
北京
1
0
1
0
1
3
安
1
0
0
0
0
1
立
1
0
0
0
0
1
文
1
0
0
0
0
1
高新
1
0
0
0
0
1
技术
1
1
0
0
1
3
公司
1
0
1
0
1
3
新
0
1
0
0
1
2
网络
0
1
1
0
0
2
访问
0
1
0
0
0
1
卫星
0
0
1
0
1
2
有限
0
0
1
0
1
2
先进
0
0
0
1
0
1
总线
0
0
0
1
0
1
升
0
0
0
0
1
1
平
0
0
0
0
1
1
说明:
TF:
表示词项在该文档或者查询词中出现的频度。
即该词项出现次数除以该文档的长度(所有词的个数)
:
表示词项k在Di中的出现次数。
:
表示该文档的长度(所有词的个数)
IDF:
表示词项在文档集合中的重要程度。
一个词项出现的文档数越多,说明该词项的区分度越差,其在文档集合中的重要性就越低。
N:
表示集合中的文档数;
:
表示出现词项k的文档数。
d1中各词项的数字表达式
“北京”的
“安”的
“立”的
“文”的
“高新”的
“技术”的
“公司”的
d2中各词项的数字表达式:
“新”的
“网络”的
“访问”的
“技术”的
3)画出系统的倒排文件示意图。
4)按照向量夹角的余弦计算公式,给出针对查询“技术的公司”的前3个反馈结果。
该部分由代码实现。
三、实验方法、步骤
1.建立Java项目,
2.建立DocumentStruct.java类文件并编辑
3.建立TextVector.java类文件并编辑,如图4-1,图4-2所示
图4-1
图4-2
4.建立TF.java类文件并编辑,如图图4-7所示
图4-4
5.建立IDF.java类文件并编辑,如图图4-5所示
图4-5
6.建立CaculateSim.java类文件并编辑,如图4-6所示
图4-6
7.建立MainApp.java类文件并编辑,图4-7所示
图4-7
8.完成后的项目文件夹如图4-8所示
图4-8
9.运行结果如图4-9所示
1.DocumentStruct.java代码:
packageacm.model;
publicclassDocumentStruct{
publicDocumentStruct(){
this.documentID=0;
this.documentSimValue=0;
this.documentContent="None";
this.documentName="None";
}
publicDocumentStruct(intID,doublesim,Stringname,Stringcontent){
this.documentID=ID;
this.documentSimValue=sim;
this.documentName=name;
this.documentContent=content;
}
publicStringgetDocumentContent(){
returndocumentContent;
}
publicvoidsetDocumentContent(StringdocumentContent){
this.documentContent=documentContent;
}
publicStringgetDocumentName(){
returndocumentName;
}
publicvoidsetDocumentName(StringdocumentName){
this.documentName=documentName;
}
publicdoublegetDocumentSimValue(){
returndocumentSimValue;
}
publicvoidsetDocumentSimValue(doubledocumentSimValue){
this.documentSimValue=documentSimValue;
}
publicintgetDocumentID(){
returndocumentID;
}
publicvoidsetDocumentID(intdocumentID){
this.documentID=documentID;
}
publicDocumentStruct[]sortDocBySim(DocumentStruct[]docList){
DocumentStructtemp;
for(inti=0;i for(intj=i;j if(docList[i].getDocumentSimValue() temp=docList[i]; docList[i]=docList[j]; docList[j]=temp; } } } returndocList; } privateStringdocumentName; privateStringdocumentContent; privatedoubledocumentSimValue; privateintdocumentID; } 2.TextVector.java代码: packageacm.model; publicclassTextVector{ publicTextVector(intdimension,int[]termCount,intdocumentTermCount,intdocumentCount,int[]documentContainTermCount){ vectorWeight=newdouble[dimension]; for(inti=0;i vectorWeight[i]=caculateWeight(termCount[i],documentTermCount,documentCount,documentContainTermCount[i]); } } publicdoublecaculateWeight(inttermCount,intdocumentTermCount,intdocumentCount,intdocumentContainTermCount){ TFtermTF=newTF(termCount,documentTermCount); IDFtermIDF=newIDF(documentCount,documentContainTermCount); termTF.caculateTF(); termIDF.caculateIDF(); return(termTF.getTf()*termIDF.getIdf()); } publicdouble[]getVectorWeight(){ returnvectorWeight; } publicvoidsetVectorWeight(double[]vectorWeight){ this.vectorWeight=vectorWeight; } privatedouble[]vectorWeight; } } 3.TF.java代码 packageacm.model; publicclassTF{ publicTF(){ tf=0.0; termCount=0; termInDocumentCount=0; } publicTF(inttermCount,intdocumentTermCount){ this.tf=0.0; this.termCount=termCount; this.termInDocumentCount=documentTermCount; } publicvoidcaculateTF(){ if(termInDocumentCount==0){ System.out.println("请先设置文档总数! "); return; } this.tf=(double)termCount/(double)termInDocumentCount; } publicdoublegetTf(){ returntf; } publicintgetTermCount(){ returntermCount; } publicvoidsetTermCount(inttermCount){ this.termCount=termCount; } publicintgetTermInDocumentCount(){ returntermInDocumentCount; } publicvoidsetTermInDocumentCount(inttermInDocumentCount){ this.termInDocumentCount=termInDocumentCount; } privatedoubletf; privateinttermCount; privateinttermInDocumentCount; } 4.IDF.java代码 packageacm.model; publicclassIDF{ publicIDF(){ idf=0.0; documentContainTermCount=0; documentCount=0; } publicIDF(intdocumentCount,intdocumentContainTermCount){ idf=0.0; this.documentCount=documentCount; this.documentContainTermCount=documentContainTermCount; } publicintgetDocumentCount(){ returndocumentCount; } publicvoidsetDocumentCount(intdocumentCount){ this.documentCount=documentCount; } publicintgetDocumentContainTermCount(){ returndocumentContainTermCount; } publicvoidsetDocumentContainTermCount(intdocumentContainTermCount){ this.documentContainTermCount=documentContainTermCount; } publicdoublegetIdf(){ returnidf; } publicvoidcaculateIDF(){ if(documentContainTermCount==0){ System.out.println("请设置文档的长度(所有词的个数)! "); return; } this.idf=Math.log10((double)this.documentCount/(double)this.documentContainTermCount); } privatedoubleidf; privateintdocumentCount; privateintdocumentContainTermCount; } 5.CaculateSim.java代码 packageacm.model; publicclassCaculateSim{ publicCaculateSim(TextVectorvector1,TextVectorvector2){ doublesimDividend=0.0,simDivider=0.0; doubletempVector1=0.0,tempVector2=0.0; for(inti=0;i simDividend+=vector1.getVectorWeight()[i]*vector2.getVectorWeight()[i]; } for(inti=0;i tempVector1+=Math.pow(vector1.getVectorWeight()[i],2.0); tempVector2+=Math.pow(vector2.getVectorWeight()[i],2.0); simDivider=Math.sqrt((tempVector1*tempVector2)); } this.sim=simDividend/simDivider; } publicdoublegetSim(){ returnsim; } privatedoublesim; } 6.MainApp.java代码 packageacm.model; publicclassMainApp{ publicstaticvoidmain(String[]args){ intTermCount[][]={{1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,1,0,1,1,1,0,0,0,0,0,0}, {1,0,0,0,0,0,1,0,1,0,1,1,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0}, {1,0,0,0,0,1,1,1,0,0,1,1,0,0,1,1}, {0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0}}; intdocumentTermCount[]={7,7,5,6,11,3}; intdocumentContainTermCount[]={3,1,1,1,1,4,4,2,2,1,2,2,1,1,1,1}; DocumentStruct[]docList=newDocumentStruct[6]; StringdocumentContent[]={"北京安立文高新技术公司", "新一代的网络访问技术", "北京卫星网络有限公司", "是最先进的总线技术。 。 。 ", "北京升平卫星技术有限公司的新技术有。 。 。 ", "技术的公司"}; TextVectorqueryVector=newTextVector(16,TermCount[5],documentTermCount[5],6,documentContainTermCount); for(inti=0;i<5;i++){ TextVectortempVector=newTextVector(16,TermCount[i],documentTermCount[i],6,documentContainTermCount); CaculateSimtempSim=newCaculateSim(tempVector,queryVector); DocumentStructtempDoc=newDocumentStruct(i+1,tempSim.getSim(),"文档"+(i+1),documentContent[i]); docList[i]=tempDoc; } docList=docList[1].sortDocBySim(docList); System.out.println("以\"技术的公司\"为查询关键字得到的前3个结果为: "); for(inti=0;i<3;i++){ System.out.println((i+1)+"."+docList[i].getDocumentName()+": "+docList[i].getDocumentContent()); } } } 四、实验结果、分析和结论 本次实验我学会了针对文档进行信息检索系统,向量空间模型是信息检索的一个重要方面,向量空间模型的建立能让你对信息有更好的把握,所以向量空间模型对我们以后信息检索至关重要,在编程方面我来遇到了很多的问题,这些都是在老师的帮助下完成的,在这次实验中我学到了很多。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息 检索 搜索引擎 技术 实验 向量 空间 模型