原贴说到了tokenize each line. 如果这是动态算的,那么比较结束了答案也出来了,没有必要再化成bit再与运算。如果是静态先算好的,那么如果key words很多,很多位的bit运算也是不现实的。
改良的办法是考虑一个26位的bitmap。也可把不常用的字母映射到其他的做成24位。
取各关键词的第N个字母算出一个数。比如home,based,free,jobs. 取h,b,f,j算出第一个数;o,a,r 第二个数(出现多次的字母按一次算)
这个静态的key_file先按上述办法预处理,每行记录映射成N个数, 事先排序。
当得到一个keyword set时,对这个keyword set进行处理得到若干个数,再去和key_file生成的数进行与操作。
为了减少与操作,和利用排序,可以把某些操作等价为比大小: 假如keyword set有某个数是 01101000, 那么比 01000000 大的,比1000小的肯定都不是,可以先过滤掉。在keyword set生成的若干个数中取范围最小的,再去扫描key_file生成的数组。
这个思路是为了尽量减少字符串比较,离最终目的还有距离。
改良的办法是考虑一个26位的bitmap。也可把不常用的字母映射到其他的做成24位。
取各关键词的第N个字母算出一个数。比如home,based,free,jobs. 取h,b,f,j算出第一个数;o,a,r 第二个数(出现多次的字母按一次算)
这个静态的key_file先按上述办法预处理,每行记录映射成N个数, 事先排序。
当得到一个keyword set时,对这个keyword set进行处理得到若干个数,再去和key_file生成的数进行与操作。
为了减少与操作,和利用排序,可以把某些操作等价为比大小: 假如keyword set有某个数是 01101000, 那么比 01000000 大的,比1000小的肯定都不是,可以先过滤掉。在keyword set生成的若干个数中取范围最小的,再去扫描key_file生成的数组。
这个思路是为了尽量减少字符串比较,离最终目的还有距离。