Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 通过查看关键字列表筛选URL的有效方法_C_Url_Filtering_Blacklist - Fatal编程技术网

C 通过查看关键字列表筛选URL的有效方法

C 通过查看关键字列表筛选URL的有效方法,c,url,filtering,blacklist,C,Url,Filtering,Blacklist,通过比较关键字在url中的位置与否来筛选url的最佳方法是什么? 我有一个包含50000个单词的关键词列表(一种黑名单)。 搜索方法使用以下步骤: While(关键字结尾) 1.从数据库中获取关键字 2.检查关键字是否在url中 3.将用户重定向到特定页面 当我使用这种方法时,cpu的使用率大约为%90。有没有一种有效的方法可以做到这一点?似乎我不能使用正则表达式,因为关键字总是变化的 检查关键字是否在url中 [...] 有没有一种有效的方法可以做到这一点 反之亦然,效率更高:将URL拆分为关

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

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

当我使用这种方法时,cpu的使用率大约为%90。有没有一种有效的方法可以做到这一点?似乎我不能使用正则表达式,因为关键字总是变化的

  • 检查关键字是否在url中 [...] 有没有一种有效的方法可以做到这一点
  • 反之亦然,效率更高:将URL拆分为关键字,并在数据库中查找它们


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

    问题是多模式搜索,可以通过Aho Coracisk算法有效解决。该算法同时搜索一组字符串。该算法的复杂度与关键字长度、URL长度和输出匹配数成线性关系。

    Aho-Corasick算法是该问题的最佳解决方案。 下面是python实现

    下面是一个代码示例

    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)  
    

    建立一个平衡的关键字二叉树并搜索它。5000个关键字对于内存中的数据结构来说并不算太多。谢谢Paul。它是50000,并且会随着时间的推移而增加。这将是一个类似于反向搜索的过程。假设我的url是www.selldruges.com。我有一个包含药物的关键词列表。我必须一个接一个地获取关键字,然后调用doesurlcontainskyword()方法。如果关键字是第50000个关键字,那么它就是一个问题。对于64位机器上的内存数据结构,50000个关键字仍然不应该是一个问题。谢谢Andrey。如果一个url包含2000个字符,我必须创建包含2000个字符的关键字组合。这不会花费很多吗?当然,您需要关键字分隔符来高效地分割URL。在我看来,这对于过滤是有意义的,因为性别和中性可能有完全不同的含义。但当然,这取决于你,这只是我的2美分…谢谢你,马辛。这正是我要找的。