jake1036

larbin源码分析(五) hashDup类对象的实现

larbin源码分析(五) hashDup类对象的实现

 一 类的成员变量及主要功能
      (1) 成员变量 
      ssize_t size; //表示hash 表的大小
      char *table; //表示hash存储区域
      char *file;   //表示存储的文件,内存中的hash表可以保存在外部磁盘中
      (2) 主要功能
         该类和hashTable代码比较相似,但是hashTable处理的是url去重,而hashDup处理的是网页内容的去重,
        不会对完全相同的网页进行爬取,但是不保证相似网页的排重。改进的一个方向
  二 具体的成员函数
       构造函数
       hashDup (ssize_t size, char *init, bool scratch); size表示hash表的大小,单位为bit。
                   init参数表示 hash表存储在磁盘的文件名称。scratch若为true表示重新构建hash表,
                   若为false,则表示需要从磁盘文件中读取hash表。
    ~hashDup()函数  具体操作为 情况table内存。
    下面主要讲解网页内容去重的函数
     bool hashDup::testSet (char *doc) { //doc应该为网页的具体内容 ,依次顺序遍历网页内容,对其中A与z之间的字符进行验证
      unsigned int code = 0;
       char c;
     for (uint i=0; (c=doc[i])!=0; i++) {
          if (c>'A' && c<'z')
          code = (code*23 + c) % size;
      }
        unsigned int pos = code / 8;  //具体的判断函数,若是执行插入返回true,否则返回false
       unsigned int bits = 1 << (code % 8);
        int res = table[pos] & bits;
        table[pos] |= bits;
       return !res;
     }     

    save()函数 
    主要的作用就是,将table区域中的数据,存储在外部磁盘中,进行持久化操作。
     
   三 总结
       该类为网页内容去重hash函数的具体实现。





posted on 2011-06-13 16:16 kahn 阅读(422) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理