通过查看关键字列表

时间:2017-05-10 10:43:56

标签: c url filtering blacklist

通过比较关键字在网址内的位置来过滤网址的最佳方法是什么? 我有一个关键字列表(一种黑名单),其中包含50000个单词。 搜索方法使用以下步骤:

while(关键字结束)  1.从数据库中获取关键字  2.检查关键字是否在网址中  3.将用户重定向到特定页面。

当我使用此方法时,cpu使用率变为%90左右。有没有一种有效的方法来做到这一点?似乎我不能使用正则表达式,因为关键字总是会改变。

3 个答案:

答案 0 :(得分:2)

问题是多模式搜索,可以用Aho-Coracisk算法有效地解决。该算法同时搜索一组字符串。该算法的复杂性在关键词的长度加上URL的长度加上输出匹配的数量是线性的。

答案 1 :(得分:0)

  
      
  1. 检查关键字是否在网址中   [...]   有没有一种有效的方法呢?
  2.   

反之亦然:将URL拆分为关键字并在数据库中查找。

要加快数据库查找速度,可以使用多种方法。例如,对数据库进行排序并进行二进制搜索,使用trie结构,哈希表等等。

答案 2 :(得分:0)

Aho-Corasick算法是解决此问题的最佳解决方案。 这是python实现Aho-Corasick

以下是代码示例

import ahocorasick  
A = ahocorasick.Automaton()  
for index, word in enumerate('asim sinan yuksel uksel sel sina sim asi as nan an in ina uks .com .co www. http//'.split()):  
   A.add_word(word, (index, word))
A.make_automaton()  
for item in A.iter('http://wwww.asimsinanyuksel.com'):  
   print(item)