WordIndex.java
上传用户:cctqzzy
上传日期:2022-03-14
资源大小:12198k
文件大小:3k
源码类别:

搜索引擎

开发平台:

Java

  1. package chapter2;
  2. import java.io.*;
  3. import java.net.*;
  4. import java.util.*;
  5. import java.io.File;
  6. import java.io.FileReader;
  7. import java.io.FileWriter;
  8. import java.util.LinkedList;
  9. import java.util.Vector;
  10. public class WordIndex {
  11. static Hashtable KeywordIdx;  // 关键词哈希表
  12. static String[] FileList = {  // 存放原始文件内容,数组每一个代表一个文件的内容
  13.                   " 北 京 师 范 大 学",
  14.                   " 北 师 大 附 属 实 验 小 学 ",
  15.                   " 北 师 大 第 二 附 属 中 学 " };
  16.  public static void main(String[] args) throws IOException {
  17.  
  18.         try {
  19.      index();
  20.      search("北");
  21.        } catch (Exception e) { 
  22.            System.err.println("下载失败,请检查输入地址是否正确。");  
  23.            System.exit(1);
  24.        }
  25.  }
  26.  
  27. //根据输入的内容进行Hash检索
  28.  public static void search(String keyword)  throws Exception { 
  29.  
  30.  infoItem item;
  31.  System.out.println("search : ------ begin ------");
  32.  if( null ==KeywordIdx )
  33.  {
  34.  return;
  35.  }
  36.  
  37.      try { 
  38.       item = (infoItem )KeywordIdx.get(keyword);   // 根据关键词获取Hash表中的索引项列表
  39.       
  40.       while( item != null )                                // 循环显示索引项内容
  41.       {
  42.       System.out.println("search : File number  :" + item.get_id());            // 显示编号
  43.       System.out.println("search : File offset  :" + item.get_pos());           // 显示偏移
  44.       System.out.println("search : File Content :" + FileList[item.get_pos()]); // 显示内容
  45.       item = item.get_next();                          // 获取下一个索引项
  46.       }
  47.       
  48.      }catch (Exception e) { 
  49.          throw e;
  50.      }
  51.  System.out.println("search : ------  end  ------ ");
  52.  }
  53.  public static void index()  throws Exception { // 根据给定的内容按照汉字建立Hash索引 
  54.  
  55.  infoItem item,item2;
  56.  System.out.println("index : ------ begin ------");
  57.  
  58.  KeywordIdx = new Hashtable();  // 创建关键词Hash表
  59.      try { 
  60.     
  61.       System.out.println("index : Hash Table initial Size: " + KeywordIdx.size() ); // 关键词初始长度
  62.       
  63.       for(int i =0 ;i < 3 ;i++) // 循环计算文本存放位置,添加到关键词Hash表
  64.       {  
  65.       int len = FileList[i].length();
  66.       
  67.       for( int j = 0; j < len; j++ )
  68.       {
  69.       item = new infoItem(i,i); // 生成文件内容存放位置的附属信息 
  70.       String key = FileList[i].substring(j, j+1);
  71.       System.out.print(key );
  72.       if(!KeywordIdx.containsKey(key))
  73.       {
  74.       KeywordIdx.put(key , item); // 添加关键字索引到Hash表
  75.       } else {
  76.       item2 = (infoItem)KeywordIdx.get(key); // 提取原始的存储项
  77.       item.set_next(item2); // 新文件节点添加到链表头
  78.       KeywordIdx.put(key , item); // 添加关键字索引到Hash表
  79.       }
  80.       }
  81.       
  82.       System.out.println("");
  83.       }
  84.       System.out.println("index : Hash Table finish  Size: " + KeywordIdx.size() );
  85.      }catch (Exception e) { 
  86.         throw e;
  87.     }
  88.  System.out.println("index : ------  end  ------ ");
  89.      
  90.  }
  91. }