信息检索与搜索引擎技术实验向量空间模型

上传人:jin****ng 文档编号:220408165 上传时间:2023-06-30 格式:DOCX 页数:15 大小:144.57KB
返回 下载 相关 举报
信息检索与搜索引擎技术实验向量空间模型_第1页
第1页 / 共15页
信息检索与搜索引擎技术实验向量空间模型_第2页
第2页 / 共15页
信息检索与搜索引擎技术实验向量空间模型_第3页
第3页 / 共15页
点击查看更多>>
资源描述
昆明理工大学信息工程与自动化学院学生实验报告( 20142015学年第 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)写出di和d2在VSM中的表示(使用tf*idf,写出各项的数字表达式,具体数值不必实际计算出来)。3)画出系统的倒排文件示意图。4)按照向量夹角的余弦计算公式,给出针对查询“技术的公司”的前 3个反馈结果。二、实验原理给定文档语料: d1:北京安立文高新技术公司d2:新一代的网络访问技术d3:北京卫星网络有限公司 d4:是最先进的总线技术。 d5: Termdld2d3d4d5Term出现 次数卫星技术有限公司的新技术有。设计一个针对这些文档的信息检索系统。具体要求是:1)给出系统的有效词汇集合(说明取舍原因)。北京、安、立、文、高新、技术、公司、新、网络、访问、卫星、有限、先进、总线、 升、平的、是、最、有,这些词作为停用词不能加入系统的有效集合一、代,去除后并不影响原来句子语义的表达也不能算作系统的有效集合。2)写出di和d2在VSM中的表示(使用tf*idf,写出各项的数字表达式,具体数值不必实际 计算出来)。得到的矩阵:北京C:,.1N01013F安丁尸耳 log ?00001立5飞100001文100001咼新100001技术110013公司101013新010012网络011002访问010001卫星001012有限001012先进000101总线000101升000011平000011TF X ID说明:TF:表示词项在该文档或者查询词中出现的频度。即该词项出现次数除以该文档的长度(所有词的个数)-.,:表示词项k在Dj中的出现次数。二二、:表示该文档的长度(所有词的个数)IDF:表示词项在文档集合中的重要程度。一个词项出现的文档数越多,说明该词项的 区分度越差,其在文档集合中的重要性就越低。N:表示集合中的文档数;S:表示出现词项k的文档数。di中各词项的数字表达式“北京”的匚IBF= 2汉工乙FW1“安”的7F : IDF = t x :“立”的7F : IDF = t x :“文”的7F : IDF = t x :北京立斗63网终6问卫昱词项列表a“高新”的匚IDF = TX工訂“技术”的 J沒 IDF = yXrw“公司”的7T : IDF = M 减cz-73d2中各词项的数字表达式:新”的IF : IDF = t x :CZ7“网络”的H x IDF = y x工乙访问”的7F : IDF = yx上訂“技术”的F中斗金3)画出系统的倒排文件示意图。有隈倒排索引41.1I.I.3.I.I.5.1.I.4)按照向量夹角的余弦计算公式,给出针对查询“技术的公司”的前3个反馈结果。该部分由代码实现。三、实验方法、步骤1 建立 Java 项目,2 建立 DocumentStruct.java 类文件并编辑3 建立 TextVector.java 类文件并编辑,如图 4-1,图 4-2 所示图 4-1图 4-24 建立 TF.java 类文件并编辑,如图图 4-7 所示D TEjava M1 package acm.model;23/*4 *计算某个词项在向量空间模型中的TF值5 * author6 *7 */8 public class TF 910 /*11 *构造函数:按默认的值生戚TF对象12 */13public TF()14 tf = 00;15 termCount = 0;16 termlnDocumentCount = 0;17 1819/*20 *构造函数:按指定的值生成TF对象21 * paramtermCount:个词项岀现在一个向量中的初数* param documentTermCount:个向量中所有词项的总数(即一个文档对象的长度)23*/24 public TF(int termCount, int documentTermCthis.tf = 0.0;26this. termCount = termCount;this termlnDocumerirtCo unt = documentTe rmCount;图 4-45 建立 IDF.java 类文件并编辑,如图图4-5 所示IDF.java M1 package acm.model;23/*4 *用于计算向量空间模型中的TDF值5 * author6 */public class IDF *构造圈数:按默认值构造TDF对象*/public IDF() idf = Q.0;documentContainTe rmCount = G; documentCount = 0;黑124.*构造函数;利用提供的值构造IDF对象 param documentcount:向量空间模型中向量的总数,即文档的总数* param documentContainTermCount:向量空间模型中某个词项在整个模型中岀现的次数 */public IDF(int documentCount, int documentContainTerrnCoun idf = e.o; this. documentCouirit = docume ntCount;this .documen tContsinTennCount = documentContainTermCoun t;图 4-56 建立 CaculateSim.java 类文件并编辑,如图 4-6 所示D CaculateSim.java M1 package acm.model;2 3/*4 *计算两个向量的相似度5 * author6 *7 */8 public class CacolateSim 910 /*构造函数:构造两个并计算两个向量的相似度12 * paramvectorl:向量一13 * (paramvector2:向量二14 */15 public CaculateSim(TextVector vectorl, TextVector vector2)16 double simDividend=G0, simDivider=G0;17 double tempVectorl=00, tempVector2=00;19for(int i=0; ivectogetVectorWeight().length; i+)simDividend += vectgetVectorWeigh* vector2.getVctorWeigh2122for(int i=0; ivectorlgetVectoWeight()length; i+)!4tempVectorl += Math.poj*lvectorl.getVectorWeight() i, 2.G);25tempVector2 += Math.p(9Ji4vector2.getVectorWeight() i, 2.0);simDivider = Math $9厂右(七6111卩/8:1:0.*1:6111卩(0匚七02);图 4-67 建立 MainApp.java 类文件并编辑,图 4-7 所示D MainApp.java 腻 *|3031/*32*建立保存每个文档信息的文档结构33*/34DocumentStruct docList = new Documentsuci:6;3536/*37*建立每个文档中的内容(最后一个文档为需要査询的关键词)38*/39String documentcontent=”北京安立文高新技术公司J10“新一代的网络访间技术”,11“北京卫星网络有限公司”,12“是最先进的总线技术。13“北京升平卫星技术有限公司的新技术有。14“技术的公司“;1546/*17*为需要査询语句建立向量模型18*/19TextVector queryVector = inew TextVector(16, TermCount5, documentTermCount5, 6, documentContainTermC5051for(int i=0; i 警 &rc H acm.modelQ CaculateSim.javaD Docu mentStru ct.j avaD IDF.javaD MainApp.javaIf TextVector.javaH TF.java图 4-89 运行结果如图 4-9 所示1. DocumentStruct.java 代码: packageacm.model;public class DocumentStruct publicDocumentStruct() this.documentID = 0; this.documentSimValue = 0; this.documentContent = None; this.documentName = None;publicDocumentStruct(int ID, double sim,String name, String content) this.documentID = ID; this.documentSimValue = sim; this.documentName = name; this.documentContent = content;public String getDocumentContent() returndocumentContent;public void setDocumentContent(String documentContent) this.documentContent = documentContent;public String getDocumentName() returndocumentName;public void setDocumentName(String documentName) this.documentName = documentName;public double getDocumentSimValue() returndocumentSimValue;public void setDocumentSimValue(double documentSimValue) this.documentSimValue = documentSimValue;publicintgetDocumentID() returndocumentID;public void setDocumentID(intdocumentID) this.documentID = documentID;publicDocumentStruct sortDocBySim(DocumentStruct docList)DocumentStruct temp; for(inti=0; idocList.length-1;i+)for(int j=i;jdocList.length-1; j+)if(docListi.getDocumentSimValue() docListj.getDocumentSimValue() )temp = docListi; docListi = docListj;docListj = temp; returndocList;private String documentName;private String documentContent;private double documentSimValue;privateintdocumentID;2. TextVector.java 代码:packageacm.model;public class TextVector publicTextVector(int dimension, int termCount, intdocumentTermCount, intdocumentCount, int documentContainTermCount)vectorWeight = new doubledimension;for(inti=0; idimension; i+) vectorWeighti = caculateWeight(termCounti, documentTermCount, documentCount, documentContainTermCounti);public doublecaculateWeight(inttermCount, intdocumentTermCount, intdocumentCount, intdocumentContainTermCount)TF termTF = new TF(termCount, documentTermCount);IDF termIDF = new IDF(documentCount, documentContainTermCount);termTF.caculateTF(); termIDF.caculateIDF();return(termTF.getTf()*termIDF.getIdf()public double getVectorWeight() returnvectorWeight;public void setVectorWeight(double vectorWeight) this.vectorWeight = vectorWeight;private double vectorWeight;3. TF.java 代码packageacm.model;public class TF public TF()tf = 0.0;termCount = 0; termInDocumentCount = 0;public TF(inttermCount, intdocumentTermCount)this.tf = 0.0;this.termCount = termCount;this.termInDocumentCount =documentTermCount;public void caculateTF() if(termInDocumentCount = 0)System.out.println(请先设置 文档总数!);return;this.tf = (double)termCount / (double)termInDocumentCount;public double getTf() returntf;publicintgetTermCount() returntermCount;public void setTermCount(inttermCount) this.termCount = termCount;publicintgetTermInDocumentCount() returntermInDocumentCount;public void setTermInDocumentCount(inttermInDocumentCou nt) this.termInDocumentCount = termInDocumentCount;private double tf;privateinttermCount;privateinttermInDocumentCount;4. IDF.java 代码 packageacm.model;public class IDF public IDF() idf = 0.0;documentContainTermCount = 0; documentCount = 0;public IDF(intdocumentCount, intdocumentContainTermCount)idf = 0.0;this.documentCount = documentCount;this.documentContainTermCount = documentContainTermCount;publicintgetDocumentCount() returndocumentCount;public void setDocumentCount(intdocumentCount) this.documentCount = documentCount; publicintgetDocumentContainTermCount() returndocumentContainTermCount;public void setDocumentContainTermCount(intdocumentCont ainTermCount) this.documentContainTermCount = documentContainTermCount;public double getIdf() returnidf;public void caculateIDF()if(documentContainTermCount = 0) System.out.println(请设置文 档的长度(所有词的个数)!);return;this.idf =Math.log10(double)this.documentCount / (double)this.documentContainTermCount);private double idf;6. privateintdocumentCount;privateintdocumentContainTermCount; 5. CaculateSim.java 代码 packageacm.model;public class CaculateSim publicCaculateSim(TextVector vector1, TextVector vector2)doublesimDividend=0.0, simDivider=0.0;double tempVector1=0.0, tempVector2=0.0;for(inti=0; ivector1.getVectorWeight().length; i+)simDividend += vector1.getVectorWeight()i * vector2.getVectorWeight()i;for(inti=0; ivector1.getVectorWeight().length; 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;public double getSim() returnsim;private double sim;MainApp.java 代码packageacm.model;public class MainApp public static void main(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 = newDocumentStruct6;String documentContent = 北京安立文高新技术公司,新一代的网络访问技术,北京卫星网络有限公司,是最先进的总线技术。,北京升平卫星技术有限公司的新技术有。,技术的公司;TextVectorqueryVector = newTextVector(16, TermCount5, documentTermCount5,docList =6, documentContainTermCount);for(inti=0; i5; i+) TextVectortempVector = new TextVector(16, TermCounti,documentTermCounti, 6, documentContainTermCount);CaculateSimtempSim = newCaculateSim(tempVector, queryVector);DocumentStructtempDoc = newDocumentStruct(i+1, tempSim.getSim(), 文档 +(i+1), documentContenti);docListi = tempDoc;docList1.sortDocBySim(docList);System.out.println(” 以技术的公司 为查询关键字得到的前3个结果为:);for(inti=0; i3; i+)System.out.println(i+1) + .+docListi.getDocumentName()+: +docListi.getDocumentContent();四、实验结果、分析和结论本次实验我学会了针对文档进行信息检索系统,向量空间模型是信息检索的一 个重要方面,向量空间模型的建立能让你对信息有更好的把握,所以向量空间模型 对我们以后信息检索至关重要,在编程方面我来遇到了很多的问题,这些都是在老 师的帮助下完成的,在这次实验中我学到了很多。
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 毕设全套


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!