信息检索与搜索引擎技术实验向量空间模型Word格式.doc
《信息检索与搜索引擎技术实验向量空间模型Word格式.doc》由会员分享,可在线阅读,更多相关《信息检索与搜索引擎技术实验向量空间模型Word格式.doc(12页珍藏版)》请在冰豆网上搜索。
![信息检索与搜索引擎技术实验向量空间模型Word格式.doc](https://file1.bdocx.com/fileroot1/2022-10/4/e71b6b6b-3dd0-441a-9591-8cc182b13e55/e71b6b6b-3dd0-441a-9591-8cc182b13e551.gif)
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:
北京、安、立、文、高新、技术、公司、新、网络、访问、卫星、有限、先进、总线、升、平
的、是、最、有,这些词作为停用词不能加入系统的有效集合
一、代,去除后并不影响原来句子语义的表达也不能算作系统的有效集合。
2)写出d1和d2在VSM中的表示(使用tf*idf,写出各项的数字表达式,具体数值不必实际计算出来)。
得到的矩阵:
Term
d1
d2
d3
d4
d5
Term出现次数
北京
1
3
安
立
文
高新
技术
公司
新
2
网络
访问
卫星
有限
先进
总线
升
平
说明:
TF:
表示词项在该文档或者查询词中出现的频度。
即该词项出现次数除以该文档的长度(所有词的个数)
:
表示词项k在Di中的出现次数。
表示该文档的长度(所有词的个数)
IDF:
表示词项在文档集合中的重要程度。
一个词项出现的文档数越多,说明该词项的区分度越差,其在文档集合中的重要性就越低。
N:
表示集合中的文档数;
表示出现词项k的文档数。
d1中各词项的数字表达式
“北京”的
“安”的
“立”的
“文”的
“高新”的
“技术”的
“公司”的
d2中各词项的数字表达式:
“新”的
“网络”的
“访问”的
该部分由代码实现。
三、实验方法、步骤
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="
}
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<
docList.length-1;
i++){
for(intj=i;
j<
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代码:
publicclassTextVector{
publicTextVector(intdimension,int[]termCount,intdocumentTermCount,intdocumentCount,int[]documentContainTermCount){
vectorWeight=newdouble[dimension];
dimension;
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代码
publicclassTF{
publicTF(){
tf=0.0;
termCount=0;
termInDocumentCount=0;
publicTF(inttermCount,intdocumentTermCount){
this.tf=0.0;
this.termCount=termC