当前位置:文档之家› 信息检索与搜索引擎技术实验向量空间模型

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

昆明理工大学信息工程与自动化学院学生实验报告( 2014—2015学年第1学期)课程名称:信息检索与搜索引擎技术开课实验室:信自楼445 2014年12月23日一、上机目得及内容:给定文档语料:d1: 北京安立文高新技术公司d2: 新一代得网络访问技术d3: 北京卫星网络有限公司d4: 就是最先进得总线技术。

d5: 北京升平卫星技术有限公司得新技术有。

设计一个针对这些文档得信息检索系统。

具体要求就是:1)给出系统得有效词汇集合(说明取舍原因)。

2)写出d1与d2在VSM中得表示(使用tf*idf,写出各项得数字表达式,具体数值不必实际计算出来)、3)画出系统得倒排文件示意图。

4)按照向量夹角得余弦计算公式,给出针对查询“技术得公司”得前3个反馈结果、二、实验原理1)给出系统得有效词汇集合(说明取舍原因)、北京、安、立、文、高新、技术、公司、新、网络、访问、卫星、有限、先进、总线、升、平得、就是、最、有,这些词作为停用词不能加入系统得有效集合一、代,去除后并不影响原来句子语义得表达也不能算作系统得有效集合。

2)写出d1与d2在VSM中得表示(使用tf*idf,写出各项得数字表达式,具体数值不必实际计算出来)、得到得矩阵:说明: TF:表示词项在该文档或者查询词中出现得频度。

即该词项出现次数除以该文档得长度(所有词得个数):表示词项k 在D i 中得出现次数。

:表示该文档得长度(所有词得个数)IDF:表示词项在文档集合中得重要程度。

一个词项出现得文档数越多,说明该词项得区分度越差,其在文档集合中得重要性就越低。

N:表示集合中得文档数; :表示出现词项k 得文档数。

d1中各词项得数字表达式“北京"得“安”得“立”得“文”得北京 10 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 平 00 0 0 1 1“高新”得“技术”得“公司”得d2中各词项得数字表达式:“新"得“网络”得“访问"得“技术"得3)画出系统得倒排文件示意图。

4)按照向量夹角得余弦计算公式,给出针对查询“技术得公司"得前3个反馈结果。

该部分由代码实现。

三、实验方法、步骤1.建立Java项目,2.建立DocumentStruct.java类文件并编辑3.建立TextVector.java类文件并编辑,如图4-1,图4-2所示图4—1图4-24.建立TF、java类文件并编辑,如图图4-7所示图4—45.建立IDF。

java类文件并编辑,如图图4—5所示图4-56.建立CaculateSim。

java类文件并编辑,如图4-6所示图4-67.建立MainApp、java类文件并编辑,图4-7所示图4-78.完成后得项目文件夹如图4-8所示图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, doublesim, Stringname, 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;ﻩ}publicString getDocumentName() {ﻩﻩreturndocumentName;}publicvoid setDocumentName(String documentName){ﻩﻩthis。

documentName= documentName;ﻩ}ﻩpublic double getDocumentSimValue() {ﻩﻩreturndocumentSimValue;ﻩ}ﻩpublic void setDocumentSimValue(double documentSimValue) {ﻩthis、documentSimValue =docume ntSimValue;ﻩ}ﻩpublicintgetDocumentID() {ﻩreturndocumentID;}ﻩpublicvoid setDocumentID(intdocumentID) {ﻩthis。

documentID=documentID;ﻩ}ﻩpublicDocumentStruct[] sortDocBySim(DocumentStruct[]docList){ﻩDocumentStructtemp;for(inti=0; i<docList、length-1;i ++){ﻩfor(int j=i; j〈docList。

length—1; j++){ﻩif(docList[i]、getDocum entSimValue() <docList[j]。

getDocumentSimValue() ){ﻩﻩtemp= docList[i];ﻩﻩﻩdocList[i] = docList[j];ﻩﻩﻩﻩdocList[j]=temp;ﻩ}ﻩﻩ}}ﻩreturndocList;}ﻩprivate String documentName;private StringdocumentContent;ﻩprivate doubledocumentSimValue;ﻩprivateintdocumentID;}2.TextVector。

java代码:packageacm、model;publicclass TextVector {publicTextVector(intdimension, 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(intter mCount,intdocumentTermCount, intdocumentCount, intdocumentContainTermCount){ﻩTF termTF =new TF(termCount,documentTermCount);IDF termIDF= newIDF(documentCount, documentContainTermCount);ﻩﻩtermTF、caculateTF();ﻩtermIDF.caculateIDF();ﻩreturn(termTF。

getTf()*termIDF。

get Idf());ﻩ}public double[] getVectorWeight() {returnvectorWeight;ﻩ}public void setVectorWeight(double[] vectorWeight) {this.vectorWeight=vectorWeight;}private double[]vectorWeight;}}3.TF、java代码packageacm、model;public class TF {publicTF(){ﻩtf =0.0;termCount = 0;ﻩtermInDocumentCount = 0;ﻩ}public TF(inttermCount, intdocu mentTermCount){ﻩthis、tf= 0、0;ﻩthis、termCount = termCount;ﻩthis.termInDocumentCount= documentTermCount;}public voidcaculateTF(){if(termInDocumentCount ==0){ﻩﻩSystem.out。

println(”请先设置文档总数!”);ﻩreturn;ﻩ}ﻩthis。

tf=(double)termCount/(double)termInDocumentCount;ﻩ}ﻩpublic doublegetTf(){returntf;ﻩ}publicintgetTermCount() {returntermCount;}ﻩpublic void setTermCount(inttermCount){ﻩthis。

termCount = termCount;ﻩ}ﻩpublicintgetTermInDocumentCount() {ﻩﻩreturntermInDocumentCount;ﻩ}public voidsetTermInDocumentCount(inttermInDocumentCount) {ﻩﻩthis、termInDocumentCount=termInDocumentCount;ﻩ}ﻩprivate double tf;ﻩprivateinttermCount;privateinttermInDocumentCount;}4.IDF.java代码packageacm、model;publicclass IDF {ﻩpublic IDF(){ﻩidf= 0.0;ﻩdocumentContainTermCount= 0;ﻩdocumentCount =0;ﻩ}ﻩpublicIDF(intdocumentCount, intdocumentContainTermCount){ﻩidf =0、0;ﻩthis.documentCount =documentCount;ﻩﻩthis、documentContainTermCount =documentContainTermCount;ﻩ}ﻩpublicintgetDocumentCount() {ﻩreturndocumentCount;}publicvoidsetDocumentCount(intdocumentCount) {this。

相关主题