多模匹配算法之Aho-Corasick

Posted 午时的海

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多模匹配算法之Aho-Corasick相关的知识,希望对你有一定的参考价值。

除剔除那些含有敏感词的文本,由于有大量的敏感词,所以通过简单的正则表达式和字符串查找的方式效率太低,每次都有遍历一次字符串。而AC算法的核心思想就是避免不必要的回溯使搜索一直沿着向前的方向,最大可能的减小了时间复杂度,时间复杂度O(N),N为所有的字符串的长度,而且关键字的字数和长度无关。

基本思路

该算法核心:字典树的构建及搜索路径的确定 
算法动画示例:确实很给力 
1. 字典树的构造 
就是把你要匹配的敏感词,用树结构来进行表示,树边就是单词中的字符,如下图所示,在单词的最后位置添加连接节点也就是下图中的0。 
技术分享

    1. 搜索路径的确定 
      1)当前字符匹配,表示从当前节点沿着树边有一条路径可以到达目标字符,此时只需沿该路径走向下一个节点继续匹配即可,目标字符串指针移向下个字符继续匹配

      2) 当前字符无匹配,表示当前节点的任何一条边都无法达到要匹配的字符,此时不能沿现有路径前进,只能回溯,回溯到存在的最长的后缀字符串处,如果没有任何后缀字符串匹配则回溯到树根处。然后从当前回溯节点判断是否可以到达目标字符串字符 
      (未完待续)







以上是关于多模匹配算法之Aho-Corasick的主要内容,如果未能解决你的问题,请参考以下文章

多模字符串匹配算法之AC自动机—原理与实现

字符串kmp算法详解

用于反恶意软件代码的类似 Aho-Corasick 的算法

AC算法—有限自动机的多模式匹配

std::search 中使用啥算法?

字符串算法之 AC自己主动机