信息检索与搜索引擎技术实验向量空间模型Word格式文档下载.docx
- 文档编号:8266821
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:17
- 大小:242.12KB
信息检索与搜索引擎技术实验向量空间模型Word格式文档下载.docx
《信息检索与搜索引擎技术实验向量空间模型Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《信息检索与搜索引擎技术实验向量空间模型Word格式文档下载.docx(17页珍藏版)》请在冰点文库上搜索。
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
安
立
文
高新
技术
公司
新
网络
访问
卫星
有限
先进
总线
升
平
说明:
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=termCount;
this.termInDocumentCount=documentTermCount;
publicvoidcaculateTF(){
if(termInDocumentCount==0){
System.out.println("
请先设置文档总数!
"
);
return;
this.tf=(double)termCount/(double)termInDocumentCount;
publicdoublegetTf(){
returntf;
publicintgetTermCount(){
returntermCount;
publicvoidsetTermCount(inttermCount){
publicintgetTermInDocumentCount(){
returntermInDocumentCount;
publicvoidsetTermInDocumentCount(inttermInDocumentCount){
this.termInDocumentCount=termInDocumentCount;
privatedoubletf;
privateinttermCount;
privateinttermInDocumentCount;
4.IDF.java代码
publicclassIDF{
publicIDF(){
idf=0.0;
documentContainTermCount=0;
documentCount=0;
publicIDF(intdocumentCount,intdocumentContainTermCount){
this.documentCount=documentCount;
this.documentContainTermCount=documentContainTermCount;
publicintgetDocumentCount(){
returndocumentCount;
publicvoidsetDocumentCount(intdocumentCount){
publicintgetDocumentContainTermCount(){
returndocumentContainTermCount;
publicvoidsetDocumentContainTermCount(intdocumentContainTermCount){
publicdoublegetIdf(){
returnidf;
publicvoidcaculateIDF(){
if(documentContainTermCount==0){
请设置文档的长度(所有词的个数)!
this.idf=Math.log10((double)this.documentCount/(double)this.documentContainTermCount);
privatedoubleidf;
privateintdocumentCount;
privateintdocumentContainTermCount;
5.CaculateSim.java代码
publicclassCaculateSim{
publicCaculateSim(TextVectorvector1,TextVectorvector2){
doublesimDividend=0.0,simDivider=0.0;
doubletempVector1=0.0,tempVector2=0.0;
vector1.getVectorWeight().length;
simDividend+=vector1.getVectorWeight()[i]*vector2.getVectorWeight()[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代码
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);
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个结果为:
3;
System.out.println((i+1)+"
."
+docList[i].getDocumentName()+"
+docList[i].getDocumentContent());
四、实验结果、分析和结论
本次实验我学会了针对文档进行信息检索系统,向量空间模型是信息检索的一个重要方面,向量空间模型的建立能让你对信息有更好的把握,所以向量空间模型对我们以后信息检索至关重要,在编程方面我来遇到了很多的问题,这些都是在老师的帮助下完成的,在这次实验中我学到了很多。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息 检索 搜索引擎 技术 实验 向量 空间 模型