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

上传人:b****4 文档编号:6933560 上传时间:2023-05-10 格式:DOCX 页数:17 大小:242.12KB
下载 相关 举报
信息检索与搜索引擎技术实验向量空间模型.docx_第1页
第1页 / 共17页
信息检索与搜索引擎技术实验向量空间模型.docx_第2页
第2页 / 共17页
信息检索与搜索引擎技术实验向量空间模型.docx_第3页
第3页 / 共17页
信息检索与搜索引擎技术实验向量空间模型.docx_第4页
第4页 / 共17页
信息检索与搜索引擎技术实验向量空间模型.docx_第5页
第5页 / 共17页
信息检索与搜索引擎技术实验向量空间模型.docx_第6页
第6页 / 共17页
信息检索与搜索引擎技术实验向量空间模型.docx_第7页
第7页 / 共17页
信息检索与搜索引擎技术实验向量空间模型.docx_第8页
第8页 / 共17页
信息检索与搜索引擎技术实验向量空间模型.docx_第9页
第9页 / 共17页
信息检索与搜索引擎技术实验向量空间模型.docx_第10页
第10页 / 共17页
信息检索与搜索引擎技术实验向量空间模型.docx_第11页
第11页 / 共17页
信息检索与搜索引擎技术实验向量空间模型.docx_第12页
第12页 / 共17页
信息检索与搜索引擎技术实验向量空间模型.docx_第13页
第13页 / 共17页
信息检索与搜索引擎技术实验向量空间模型.docx_第14页
第14页 / 共17页
信息检索与搜索引擎技术实验向量空间模型.docx_第15页
第15页 / 共17页
信息检索与搜索引擎技术实验向量空间模型.docx_第16页
第16页 / 共17页
信息检索与搜索引擎技术实验向量空间模型.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

《信息检索与搜索引擎技术实验向量空间模型.docx》由会员分享,可在线阅读,更多相关《信息检索与搜索引擎技术实验向量空间模型.docx(17页珍藏版)》请在冰点文库上搜索。

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

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

昆明理工大学信息工程与自动化学院学生实验报告

(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());

}

}

}

四、实验结果、分析和结论

本次实验我学会了针对文档进行信息检索系统,向量空间模型是信息检索的一个重要方面,向量空间模型的建立能让你对信息有更好的把握,所以向量空间模型对我们以后信息检索至关重要,在编程方面我来遇到了很多的问题,这些都是在老师的帮助下完成的,在这次实验中我学到了很多。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2