Larbin源代码分析[5]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-10-24 16:02  zhoulinhu  阅读(268)  评论(0编辑  收藏  举报

导航