AC算法实现这几天一直都在看多模式匹配的算法,昨天为了赶着能够在信息检索的课上show一下,就赶工写了一个AC算法的程序。实际上程序大部分代码来自于Snort,我做了一定的修改,将NFA和转化为DFA的函数合并到了一块,并且删除了很多冗余的变量和函数,感觉Snort代码写的有些乱,自我感觉我的代码应该比snort的效率和可读性都要高出一些。
我写的程序能够打印出每一个匹配到的关键词的位置,并且对关键词出现的次数进行统计。下面是对gpl文件以free、software和copy为关键词进行的搜索。
Search the gpl.txt Match KeyWord COPY at 4 line 1 char Match KeyWord FREE at 4 line 26 char Match KeyWord SOFTWARE at 4 line 31 char Match KeyWord COPY at 6 line 26 char Match KeyWord SOFTWARE at 11 line 24 char Match KeyWord FREE at 12 line 0 char Match KeyWord FREE at 13 line 38 char Match KeyWord FREE at 13 line 66 char Match KeyWord SOFTWARE at 14 line 0 char Match KeyWord SOFTWARE at 14 line 27 char Match KeyWord FREE at 14 line 39 char Match KeyWord FREE at 15 line 46 char Match KeyWord SOFTWARE at 15 line 51 char Match KeyWord SOFTWARE at 16 line 13 char Match KeyWord FREE at 17 line 23 char Match KeyWord SOFTWARE at 17 line 28 char Match KeyWord SOFTWARE at 17 line 48 char Match KeyWord FREE at 21 line 19 char Match KeyWord SOFTWARE at 21 line 24 char Match KeyWord FREE at 21 line 54 char Match KeyWord FREE at 23 line 9 char Match KeyWord FREE at 23 line 41 char Match KeyWord SOFTWARE at 23 line 46 char Match KeyWord SOFTWARE at 25 line 40 char Match KeyWord FREE at 26 line 7 char Match KeyWord SOFTWARE at 31 line 25 char Match KeyWord COPY at 39 line 45 char Match KeyWord SOFTWARE at 39 line 59 char Match KeyWord COPY at 40 line 63 char Match KeyWord SOFTWARE at 41 line 29 char Match KeyWord FREE at 44 line 61 char Match KeyWord SOFTWARE at 45 line 0 char Match KeyWord SOFTWARE at 45 line 18 char Match KeyWord FREE at 50 line 15 char Match KeyWord SOFTWARE at 50 line 56 char Match KeyWord FREE at 51 line 63 char Match KeyWord FREE at 54 line 39 char Match KeyWord COPY at 56 line 39 char Match KeyWord COPY at 60 line 28 char Match KeyWord COPY at 63 line 23 char Match KeyWord COPY at 66 line 54 char Match KeyWord COPY at 72 line 22 char Match KeyWord COPY at 79 line 13 char Match KeyWord COPY at 81 line 48 char Match KeyWord COPY at 82 line 0 char Match KeyWord COPY at 84 line 47 char Match KeyWord COPY at 87 line 60 char Match KeyWord COPY at 90 line 25 char Match KeyWord COPY at 91 line 53 char Match KeyWord COPY at 106 line 42 char Match KeyWord COPY at 109 line 57 char Match KeyWord COPY at 134 line 13 char Match KeyWord SOFTWARE at 140 line 51 char Match KeyWord COPY at 145 line 21 char Match KeyWord SOFTWARE at 147 line 25 char Match KeyWord COPY at 167 line 10 char Match KeyWord COPY at 168 line 10 char Match KeyWord COPY at 170 line 13 char Match KeyWord COPY at 172 line 17 char Match KeyWord COPY at 174 line 13 char Match KeyWord COPY at 186 line 33 char Match KeyWord COPY at 191 line 21 char Match KeyWord FREE at 205 line 33 char Match KeyWord FREE at 218 line 17 char Match KeyWord SOFTWARE at 218 line 22 char Match KeyWord SOFTWARE at 220 line 44 char Match KeyWord SOFTWARE at 223 line 14 char Match KeyWord COPY at 230 line 42 char Match KeyWord COPY at 231 line 9 char Match KeyWord FREE at 237 line 9 char Match KeyWord SOFTWARE at 237 line 14 char Match KeyWord FREE at 245 line 64 char Match KeyWord SOFTWARE at 246 line 0 char Match KeyWord FREE at 247 line 63 char Match KeyWord SOFTWARE at 247 line 68 char Match KeyWord FREE at 250 line 65 char Match KeyWord SOFTWARE at 252 line 28 char Match KeyWord COPY at 252 line 46 char Match KeyWord FREE at 252 line 65 char Match KeyWord SOFTWARE at 253 line 0 char Match KeyWord FREE at 253 line 34 char Match KeyWord SOFTWARE at 253 line 39 char Match KeyWord FREE at 255 line 18 char Match KeyWord FREE at 255 line 56 char Match KeyWord SOFTWARE at 255 line 61 char Match KeyWord SOFTWARE at 256 line 38 char Match KeyWord FREE at 260 line 38 char Match KeyWord COPY at 262 line 32 char Match KeyWord COPY at 271 line 9 char Match KeyWord FREE at 286 line 0 char Match KeyWord SOFTWARE at 286 line 5 char Match KeyWord COPY at 291 line 5 char Match KeyWord COPY at 294 line 4 char Match KeyWord FREE at 296 line 20 char Match KeyWord SOFTWARE at 296 line 25 char Match KeyWord FREE at 298 line 8 char Match KeyWord SOFTWARE at 298 line 13 char Match KeyWord COPY at 306 line 31 char Match KeyWord FREE at 307 line 44 char Match KeyWord SOFTWARE at 307 line 49 char Match KeyWord COPY at 315 line 28 char Match KeyWord FREE at 317 line 12 char Match KeyWord SOFTWARE at 317 line 17 char Match KeyWord COPY at 326 line 27 char Match KeyWord COPY at 329 line 39 char ### Summary ### FREE : 32 SOFTWARE : 35 |