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