资源描述
昆明理工大学信息工程与自动化学院学生实验报告
( 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());
}
ﻩ}
}
四、 实验结果、分析与结论
本次实验我学会了针对文档进行信息检索系统,向量空间模型就是信息检索得一个重要方面,向量空间模型得建立能让您对信息有更好得把握,所以向量空间模型对我们以后信息检索至关重要,在编程方面我来遇到了很多得问题,这些都就是在老师得帮助下完成得,在这次实验中我学到了很多。
展开阅读全文