多模匹配算法之Aho-Corasick
除剔除那些含有敏感词的文本,由于有大量的敏感词,所以通过简单的正则表达式和字符串查找的方式效率太低,每次都有遍历一次字符串。而AC算法的核心思想就是避免不必要的回溯使搜索一直沿着向前的方向,最大可能的减小了时间复杂度,时间复杂度O(N),N为所有的字符串的长度,而且关键字的字数和长度无关。
基本思路
该算法核心:字典树的构建及搜索路径的确定
算法动画示例:确实很给力
1. 字典树的构造
就是把你要匹配的敏感词,用树结构来进行表示,树边就是单词中的字符,如下图所示,在单词的最后位置添加连接节点也就是下图中的0。
-
搜索路径的确定
1)当前字符匹配,表示从当前节点沿着树边有一条路径可以到达目标字符,此时只需沿该路径走向下一个节点继续匹配即可,目标字符串指针移向下个字符继续匹配2) 当前字符无匹配,表示当前节点的任何一条边都无法达到要匹配的字符,此时不能沿现有路径前进,只能回溯,回溯到存在的最长的后缀字符串处,如果没有任何后缀字符串匹配则回溯到树根处。然后从当前回溯节点判断是否可以到达目标字符串字符
(未完待续)
作者:Wicub
免责声明:文章、笔记等仅供分享、探讨、参考等学习之用,因此造成的任何后果概不负责。(如有错误、疏忽等问题,欢迎指正、讨论,谢谢)
本文版权归作者和博客园共有,欢迎转载,但请务必在文章页面明显位置给出原文连接,谢谢配合。