-1-昆明理工大学信息工程与自动化学院学生实验报告(2014—2015学年第1学期)课程名称:信息检索与搜索引擎技术开课实验室:信自楼4452014年12月23日年级、专业、班计科111学号201110405138姓名成绩实验项目名称向量空间模型指导教师李卫疆教师评语该同学是否了解实验原理: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个反馈结果。二、实验原理-2-给定文档语料:•d1:北京安立文高新技术公司•d2:新一代的网络访问技术•d3:北京卫星网络有限公司•d4:是最先进的总线技术。。。•d5:北京升平卫星技术有限公司的新技术有。。。设计一个针对这些文档的信息检索系统。具体要求是:1)给出系统的有效词汇集合(说明取舍原因)。北京、安、立、文、高新、技术、公司、新、网络、访问、卫星、有限、先进、总线、升、平的、是、最、有,这些词作为停用词不能加入系统的有效集合一、代,去除后并不影响原来句子语义的表达也不能算作系统的有效集合。2)写出d1和d2在VSM中的表示(使用tf*idf,写出各项的数字表达式,具体数值不必实际计算出来)。得到的矩阵:Termd1d2d3d4d5Term出现次数北京101013-3-说明:TF:表示词项在该文档或者查询词中出现的频度。即该词项出现次数除以该文档的长度(所有词的个数):表示词项k在Di中的出现次数。:表示该文档的长度(所有词的个数)IDF:表示词项在文档集合中的重要程度。一个词项出现的文档数越多,说明该词项的区分度越差,其在文档集合中的重要性就越低。N:表示集合中的文档数;:表示出现词项k的文档数。d1中各词项的数字表达式“北京”的“安”的“立”的“文”的安100001立100001文100001高新100001技术110013公司101013新010012网络011002访问010001卫星001012有限001012先进000101总线000101升000011平000011-4-“高新”的“技术”的“公司”的d2中各词项的数字表达式:“新”的“网络”的“访问”的“技术”的3)画出系统的倒排文件示意图。-5-4)按照向量夹角的余弦计算公式,给出针对查询“技术的公司”的前3个反馈结果。该部分由代码实现。三、实验方法、步骤1.建立Java项目,2.建立DocumentStruct.java类文件并编辑3.建立TextVector.java类文件并编辑,如图4-1,图4-2所示图4-1图4-24.建立TF.java类文件并编辑,如图图4-7所示-6-图4-45.建立IDF.java类文件并编辑,如图图4-5所示图4-56.建立CaculateSim.java类文件并编辑,如图4-6所示-7-图4-67.建立MainApp.java类文件并编辑,图4-7所示图4-78.完成后的项目文件夹如图4-8所示图4-8-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;}-9-publicDocumentStruct[]sortDocBySim(DocumentStruct[]docList){DocumentStructtemp;for(inti=0;idocList.length-1;i++){for(intj=i;jdocList.length-1;j++){if(docList[i].getDocumentSimValue()docList[j].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;idimension;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;}-10-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;}publicvoidcaculateI