收藏 分销(赏)

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

上传人:天**** 文档编号:4374046 上传时间:2024-09-14 格式:DOC 页数:11 大小:597KB 下载积分:8 金币
下载 相关 举报
信息检索与搜索引擎技术实验向量空间模型.doc_第1页
第1页 / 共11页
信息检索与搜索引擎技术实验向量空间模型.doc_第2页
第2页 / 共11页


点击查看更多>>
资源描述
昆明理工大学信息工程与自动化学院学生实验报告 ( 2014—2015学年第 1学期) 课程名称:信息检索与搜索引擎技术  开课实验室:信自楼445   2014 年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; 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; i<docList、length-1; i++){ ﻩ for(int j=i; j〈docList。length—1; j++){ ﻩif(docList[i]、getDocumentSimValue() <docList[j]。getDocumentSimValue() ){ ﻩ ﻩ temp = docList[i]; ﻩﻩﻩdocList[i] = docList[j]; ﻩﻩﻩﻩdocList[j] = 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 double[dimension]; for(inti=0; i<dimension; i++){ ﻩﻩ vectorWeight[i] = caculateWeight(termCount[i], documentTermCount, documentCount, documentContainTermCount[i]); ﻩ} ﻩ} public double caculateWeight(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(inttermInDocumentCount) { ﻩﻩ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(intdocumentContainTermCount) { ﻩﻩ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; 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; i<vector1。getVectorWeight()、length; i++){ ﻩ simDividend += vector1.getVectorWeight()[i] * vector2.getVectorWeight()[i]; ﻩﻩ} for(inti=0; i<vector1、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; } 6. 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 = new DocumentStruct[6]; ﻩString documentContent[] = {”北京安立文高新技术公司", ﻩﻩﻩﻩ ﻩ”新一代得网络访问技术", ﻩﻩ ﻩﻩﻩﻩ"北京卫星网络有限公司”, ﻩﻩ ﻩ ﻩ”就是最先进得总线技术、。、", ﻩﻩﻩ ﻩ ﻩ"北京升平卫星技术有限公司得新技术有。。、", ﻩﻩﻩ ﻩ ﻩ ﻩ”技术得公司"}; ﻩﻩTextVectorqueryVector = new TextVector(16, TermCount[5], documentTermCount[5], 6, documentContainTermCount); for(inti=0; i<5; i++) { ﻩﻩTextVectortempVector = new TextVector(16, TermCount[i],documentTermCount[i], 6, documentContainTermCount); ﻩ ﻩCaculateSimtempSim = new CaculateSim(tempVector, queryVector); ﻩﻩDocumentStructtempDoc = new DocumentStruct(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()); } ﻩ} } 四、 实验结果、分析与结论 本次实验我学会了针对文档进行信息检索系统,向量空间模型就是信息检索得一个重要方面,向量空间模型得建立能让您对信息有更好得把握,所以向量空间模型对我们以后信息检索至关重要,在编程方面我来遇到了很多得问题,这些都就是在老师得帮助下完成得,在这次实验中我学到了很多。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服