字典压缩爬虫索引压缩。
为了快速响应用户查询,词典数据通常被加载到内存中,以加快搜索速度。如果文档收集的数据量很大,会包含很多不同的单词,内存能否放下所有的词典信息就成了问题。为减少词典信息占用的内存,一般可以考虑采用词典压缩技术来达到这个目的。
对某一词典项而言,文档频率信息和倒排列表指针信息各用4个字节表示即可,而单词本身的内容可长可短,长的单词如中华人民共和国,短的单词如我,长度差异很大。为了容纳最长的单词,我们需要为单词内容分配足够的空间。我们假设词典中最长的单词是10个汉字,即每个单词需要分配20个字节。即使是我这样的单词,也会占用20个字节,浪费严重。显然,这里可以采用一些优化的数据结构来节省存储空间。
针对单词内容存储结构的优化措施,在该技术方案中,单词可以连续存储在一定的内存区域,原存储单词内容的部分可以用指向该存储区域对应单词起始位置的指针代替,单词结尾可以用词典中下一个单词指针指向的位置来判断,从而利用原本浪费的存储空间。
在优化词典结构的基础上,可以继续改进。图4-3是进一步改进方案的示意图。其基本思想是将连续词典分块。图中的例子是将每两个单词作为一个分块。在实际开发中,可以动态调整分块的大小,以获得最佳的压缩效果。本来每个词典项都需要保留一个指向连续词典区的指针,但是分块后,相邻的两个词典项可以共享同一个指针,这样每两个词典项就可以节省一个4字节长的指针信息,因为此时连续词典分块包含多个单词。为了标分离位置,需要增加每个单词的单词长度信息,以便在提取单词时正确区分块中的不同单词。