通过比较关键字在网址内的位置来过滤网址的最佳方法是什么? 我有一个关键字列表(一种黑名单),其中包含50000个单词。 搜索方法使用以下步骤:
while(关键字结束) 1.从数据库中获取关键字 2.检查关键字是否在网址中 3.将用户重定向到特定页面。
当我使用此方法时,cpu使用率变为%90左右。有没有一种有效的方法来做到这一点?似乎我不能使用正则表达式,因为关键字总是会改变。
答案 0 :(得分:2)
问题是多模式搜索,可以用Aho-Coracisk算法有效地解决。该算法同时搜索一组字符串。该算法的复杂性在关键词的长度加上URL的长度加上输出匹配的数量是线性的。
答案 1 :(得分:0)
- 检查关键字是否在网址中 [...] 有没有一种有效的方法呢?
醇>
反之亦然:将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)