信息检索与搜索引擎技术_实验3 倒排索引、正排索引

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

课程名称:信息检索与搜索引擎技术

一、上机目的及内容

1.上机目的

熟悉索引的作用和重要性;

熟悉正排索引和倒排索引及其建立;

2.上机内容

对 Doc1:清华/大学/清华/主页 Doc2:世纪/清华 Doc3:北京/大学

建立正排索引和倒排索引

二、实验环境

Windows操作系统 PC机一台,MyEclipse

三、实验原理

将词项集合建立成为倒排索引的过程分为两个步骤:首先要将文本词项集合处理成正排索引,在建立正排索引的时候把词项列表的结构建立起来;然后再有正排索引建立成倒排索引.

正排索引的建立方法:

1.顺序扫描集合中的词项.

2.当遇到在文档中第一次出现的词项时,要更新词项表,如果词项列表中已近含有这个

词,则把改词的DF加1,否则添加这个词项,置DF为1.

3.然后处理词项,生成词项的出现记录信息,插入到对应词项的Hit List中。

正排索引建立完成之后,依照索引中的WordID 为单位,将DocID进行填充,然后按照WordID对所有单位进行从小到大的排序,就可以得到基本的倒排索引。要得到由WordID为键值的索引项,只需要再将WordID和DocID的存贮位置互换,并按照WordID进行归并即可。最后再将词项列表中的Pointer指针置为指向对应词项的索引项存储地址。这样得到的索引就可以用来进行检索了。

四、实验记录

package com.liu.suoyin;

import java.util.*;

public class Suoyin {

public static void main(String[] args) {

Zhengpai zp=suoyin();

daopai(zp);

}

public static Zhengpai suoyin(){

String[][] doc ={{"清华","大学","清华","主页"},{"世纪","清华"},{"北京","大学"}};

List cixiang=new ArrayList();

List jilu=new ArrayList();

for(int i=0;i

for(int j=0;j

if(cixiang.size()==0){

Cixiang ci=new Cixiang();

ci.worldID=0;

ci.term=doc[i][j];

ci.DF=1;

ci.doc=i;

cixiang.add(ci);

Jilu jl=new Jilu();

jl.docID=i;

jl.wordID=0;

jl.NoOfHit=1;

jl.HitLise.add(j);

jilu.add(jl);

}else{

int k;

for(k=0;k

Cixiang ci=(Cixiang)cixiang.get(k);

if(ci.term.equals(doc[i][j])){

if(ci.doc!=i)

ci.DF++;

cixiang.set(k,ci);

int m;

for( m=jilu.size()-1;m>-1;m--){

if(ci.doc==jilu.get(jilu.size()-1).docID && ci.worldID==jilu.get(m).wordID){

Jilu jl=jilu.get(m);

jl.HitLise.add(j);

jl.NoOfHit++;

jilu.set(m,jl);

break;

}

if(m==0){

Jilu jl=new Jilu();

jl.docID=i;

jl.wordID=ci.worldID;

jl.NoOfHit=1;

jl.HitLise.add(j);

jilu.add(jl);

}

}

break;

}

}

if(k==(cixiang.size())){

Cixiang ci=new Cixiang();

ci.worldID=cixiang.size();

ci.term=doc[i][j];

ci.DF=1;

cixiang.add(ci);

Jilu jl=new Jilu();

jl.docID=i;

jl.wordID=ci.worldID;

jl.NoOfHit=1;

jl.HitLise.add(j);

jilu.add(jl);

}

}

System.out.println("worldID Term DF");

for(int l=0;l

System.out.print(((Cixiang)cixiang.get(l)).worldID+"\t");

System.out.print(((Cixiang)cixiang.get(l)).term+"\t");

System.out.println(((Cixiang)cixiang.get(l)).DF);

}

System.out.println();

System.out.println("DocID WorldID No.ofHit Hitlist");

for(int l=0;l

System.out.print("doc"+(1+((Jilu)jilu.get(l)).docID)+"\t");

System.out.print(((Jilu)jilu.get(l)).wordID+"\t");

System.out.print(((Jilu)jilu.get(l)).NoOfHit+"\t ");

for(int m=0;m<((Jilu)jilu.get(l)).HitLise.size();m++)

System.out.print( (int)((Jilu)jilu.get(l)).HitLise.get(m)+" ");

System.out.println();

}

Zhengpai zhengpai=new Zhengpai();

zhengpai.cixiang=cixiang;

zhengpai.jilu=jilu;

return zhengpai;

}

public static void daopai(Zhengpai zp){

List cixiang=new ArrayList();

List jilu=new ArrayList();

for(int i=0;i

Cixiang ci=zp.cixiang.get(i);

for(int j=0;j

if(i==zp.jilu.get(j).wordID){

jilu.add(zp.jilu.get(j));

}

}

cixiang.add(ci);

}

for(int i=0;i

int k=0;

for(int j=0;j

if(i==jilu.get(j).wordID){

if(cixiang.get(i).pointer[0]==-1){

cixiang.get(i).pointer[0]=j;

}

k=j;

}

相关文档
最新文档