AC自动机:如何用多模式串匹配实现敏感词过滤功能

数据结构与算法36丨AC自动机:如何用多模式匹配实现敏感词过滤功能 很多支持用户发表文本内容的网站,比如 BBS,大都会有敏感词过滤功能,用来过滤掉用户输入的一些淫秽、反动、谩骂等内容。你有没有想过,这个功能是怎么实现的呢?实际上,这些功能最基本的原理就是匹配算法,也就是通过维护一个敏感词典,当用户输入一段文内容之后,通过匹配算法,来查找用户输入的这段文,是否包含敏感词。如果有,就用“***”把它替代掉。我们前面讲过好几种匹配算法了,它们都可以处理这个问题。但是,对于访问量巨大的网站来说,比如淘宝,用户每天的评论数有几亿、甚至几十亿。 阅读详情

------ 本文是学习算法的笔记,《数据结构与算法之美》,极客时间的课程 ------

很多支持用户发表文本内容的网站,比如BBS,大都会有敏感词过滤功能,用来过滤掉用户输入的一些反动谩骂等内容。你有没有想过,这个功能是怎么实现的呢?

实际上,这些功能最基本的原理就是字符串匹配算法,也就是通过维护一个敏感词的字典,当用户输入一段文字内容之后,通过字符串匹配算法,来查找用户输入的这段文字,是否包含敏感词。如果有,就用字符给替代掉。

我们前面讲过好几种字符串匹配算法了,它们都可以处理这个问题。但是,对于访问量巨大的网站来说,比如淘宝,每天的评论数有几亿,甚至几十亿。这时,对敏感词过渡系统的性能要求就很高。毕竟,我们也不想,用户输入内容之后,要等几秒才能发送出去吧?我们也不想,为了这个功能耗费过多的机器吧?那如何才能实现一个高性能的敏感词过渡系统呢?这就要用到今天的多模式匹配算法

基于单模式串和Trie树实现的敏感词过滤

我们前面讲了多种字符串匹配算法,有BF算法、RK算法、BM算法、KMP算法,还有 Trie 树。前面四种都是单模式匹配算法,只有 Trie 树是多模式匹配算法。

我说过,单模式串匹配算法,是在一个模式串和一个主串之间进行匹配,也就是说,在一个主串中查找一个模式串。多模式串匹配算法,就是在多个模式串和一个主串之间做匹配,也就是说,在一个主串中查找多个模式串。

尽管,单模式串匹配算法也能完成多模式串的匹配工作。例如开篇的思考题,我们可以针对每个敏感词,通过单模式串匹配算法(比如KMP算法)与用户输入的文字内容进行匹配。但是,这样做的话,每个匹配过程都需要扫描一遍用户输入的内容。整个过程下来要扫描多次用户输入的内容。如果敏感词很多,比如几千个,并且用户输入的内容很长,假如有上千个字符,那我们就需要扫描几千遍这样的内容。很显然,这种处理思路比较低效。

与单模式匹配算法相比,多模式匹配算法在这个问题上处理就很高效了。它只需要扫描一遍主串,就能在主串中一次性查找多个模式串是否存在,从而大大提高匹配效率。我们知道,Trie 树是一种多模式串匹配算法。那如何用 Trie 实现敏感词过滤功能呢?

我们可以对敏感词字典进行预处理,构建成 Trie 树结构。这个预处理的操作只需要做一次,如果敏感词字典动态更新了,比如删除、添加了一个敏感词,那我们只需要动态更新一下 Trie 就可以了。

当用户输入一个文本内容后,我们把用户输入的内容作为主串,从第一个字符(假设是字符C)开始,在 Trie 树中匹配。当匹配到 Trie 的叶子节点,或者途中遇到不匹配字符的时候,我们将主串的开始位置后移一位,也就是从字符C的下一个字符开始,重新在 Trie 树中匹配。

基于 Trie 树的这种处理方法,有点类似单模式串匹配的BF算法。我们知道,单模式串匹配算法,KMP算法对BF算法进行改进,引入next数组,让匹配失败时,尽可能将模式串往后多滑动几位。借鉴单模式串的优化改进方法,能否对多模式串 Trie 树进行改进,进一步提高 Trie 的效率呢?这就要用到AC自动机算法了。

【数据结构与算法-算法-AC自动机-敏感词过滤功能要如何实现 AC 自动机Ⅰ 前言Ⅱ 用 Trie 实现敏感词过滤AC 自动机原理及实现敏感词过滤系统的实现 Ⅰ 前言 很多支持用户发表文本内容的网站或者软件,大都会有敏感词过滤功能,用来过滤掉用户输入的一些淫秽、反动、谩骂等内容,这个功能是怎么实现的呢? 其实,这些功能的最基本的原理就是匹配算法,也就是通过维护一个敏感词的词典,当用户输入的一段文后,通过匹配算法,来查找用户输入的这段文,是否包含敏感词,如果有,就用 * 把它替代掉。 我在之前的文章中,讲过很多种匹配算法,它们都可以处理这 阅读详情

相关推荐

多模式匹配算法AC 自动机原理、复杂度分析及代码实现

多模式匹配 多模式匹配的场景常见于一些平台屏蔽某些用户的发言中的敏感词条。 用匹配算法找出文本中的敏感词条,并用“***”代替。虽然可以使用单模式匹配算法逐个进行查找敏感词条,再进行替换,但是实际场景中,若敏感词的库很大,并且要匹配文本内容很多,则匹配时长过长,很可能导致发一条消息发好久。显然这会导致用户体验下降。 因此,需要一种在多个模式下的高效匹配算法来应对这种场景。 基于Tr...

Alan-zzx的博客 3461

AC 自动机:如何用多模式匹配实现敏感词过滤功能

在当今的网络环境中,敏感词过滤是一项非常重要的任务。它可以帮助我们维护一个健康、和谐的网络空间,避免不良信息的传播。而 AC 自动机Aho-Corasick automaton)是一种高效的多模式匹配算法,可以用于实现敏感词过滤功能

yonggeit的博客 3018

【python学习】AC自动机 高效敏感词过滤与文本匹配:全面掌握pyahocorasick库 (NLP自然语言处理项目实战)

在处理匹配的问题时,AC自动机Aho-Corasick Automaton)是一个非常高效的算法工具。它是在1975年由Alfred V. Aho和Margaret J. Corasick提出的,用于解决多模式匹配问题。所谓多模式匹配,就是在一段文本中同时搜索多个目标(模式),而不是逐一进行搜索。AC自动机的应用场景广泛,如敏感词过滤、病毒扫描、文本分析等

m0_54007171的博客 2023

AC自动机多模式匹配实现敏感词过滤

QQQQQ

约定的博客 1388

匹配算法 -- AC自动机 基于Trie的高效的敏感词过滤算法

基于Trie的高效敏感词过滤算法,interesting! 和单模式KMP算法相似。

天行健,地势坤 2080

算法无用系列】AC自动机敏感词过滤

文章目录前言一、AC自动机1、原理总结 前言 鄙人不才,通过敏感词过滤这个功能,逐步引出了BM算法、BF算法、RK算法,最后发现这些算法只适合单个主和模式匹配,不适合单主多模式匹配。无奈,查阅各种资料,终于命中AC自动机算法,专门用于单主多模式匹配算法,很适合敏感词过滤这个场景。 一、AC自动机 1、原理 由于例举敏感词文章审核会有问题,暂且用别的词替换。 AC自动机是一种特殊的形结构,每一个根节点到叶节点都有一个唯一的路径,这个路径下的各个节点为一个词。假设有敏感词{} 假如

叁滴水 的博客 2337

Leetcode每日一题:116.populating-next-right-pointers-in-each-node(填充每个节点的下一个右侧节点指针

思路:对整个满二叉进行层次遍历,同时把每一层的节点连起来now->next=q.front(),当到达该层最后一个结点时(len-1)时,令其指向NULL; /* // Definition for a Node. class Node { public: int val; Node* left; Node* right; Node* next; Node() : val(0), left(NULL), right(NULL), next(NULL) {.

CodeLuweir 的博客 325

36 | AC自动机:如何用多模式匹配实现敏感词过滤功能

如何寻找。

Balance 818

AC自动机:如何用多模式匹配实现敏感词过滤功能

AC自动机:如何用多模式匹配实现敏感词过滤功能? 用匹配算法,通过维护一个敏感词典,当用户输入一段文内容之后,通过匹配算法,来查找用户输入的这段文,是否包含敏感词,如果有,就用***替代 如何实现一个高性能的敏感词过滤系统?多模式匹配算法 基于单模式Trie实现敏感词过滤 BF 、RK、BM、KMPTrie中,前四个是单模式匹配算法,只有Trie多模式匹...

ywangjiyl的博客 240

36.AC自动机:如何用多模式匹配实现敏感词过滤功能

多模式匹配算法: 那如何才能实现一个高性能的敏感词过滤系统呢?

tobebetter9527的博客 554

数据结构与算法笔记:基础篇 -AC自动机:如何用多模式匹配实现敏感词过滤功能

很多支持用户发表文本内容的网站,比如 BBS,大都会有敏感词过滤功能,用来过滤掉用户输入的一些淫秽、反动、谩骂等内容。你有没有想过,这个功能是怎么实现的呢?实际上,这些功能最基本的原理就是匹配算法,也就是通过维护一个敏感词典,当用户输入一段文内容之后,通过匹配算法,来查找用户输入的这段文,是否包含敏感词。如果有,就用 “***” 把它替换掉。我们讲过讲过好几种匹配算法了,它们都可以处理这个问题。但是,对于访问量巨大的网站来说,比如淘宝,用户每天的评论数有几亿、甚至十几亿。

chenjian723122704的专栏 1081

36|AC自动机:如何用多模式匹配实现敏感词过滤功能?

36|AC自动机:如何用多模式匹配实现敏感词过滤功能? 很多支持用户发表文本内容的网站,比如BBS,大都会有敏感词过滤功能,用来过滤掉用户输入的 一些淫秽、反动、谩骂等内容。你有没有想过,这个功能是怎么实现的呢? 实际上,这些功能最基本的原理就是匹配算法,也就是通过维护一个敏感词典,当用户 输入一段文内容之后,通过匹配算法,来查找用户输入的这段文,是否包含敏感词。如 果有,就...

科技区软件类AI博主 🔍 专注 AI 工具测评 / 前沿产品深度拆解 / 行业趋势预判 🚫 拒绝科技玄学,只讲人话干货 —— 从工具使用到商业落地,搭建可复用的 AI 应用框架 141

数据结构与算法:36 | AC自动机:如何用多模式匹配实现敏感词过滤功能

文章目录基于单模式Trie 实现敏感词过滤经典的多模式匹配算法AC 自动机解答开篇内容小结 很多支持用户发表文本内容的网站,比如 BBS,大都会有敏感词过滤功能,用来过滤掉用户输入的一些淫秽、反动、谩骂等内容。你有没有想过,这个功能是怎么实现的呢? 实际上,这些功能最基本的原理就是匹配算法,也就是通过维护一个敏感词典,当用户输入一段文内容之后,通过匹配算法,来查找用户输入的这段文,是否包含敏感词。如果有,就用“***”把它替代掉。 我们前面讲过好几种匹配算法了,它们都

zj 481

极客时间——数据结构与算法(36):AC自动机:如何用多模式匹配实现敏感词过滤功能

转载地址:https://time.geekbang.org/column/article/72810 很多支持用户发表文本内容的网站,比如 BBS,大都会有敏感词过滤功能,用来过滤掉用户输入的一些淫秽、反动、谩骂等内容。你有没有想过,这个功能是怎么实现的呢? 实际上,这些功能最基本的原理就是匹配算法,也就是通过维护一个敏感词典,当用户输入一段文内容之后,通过匹配算法,来查找...

weixin_40805079的博客 521

数据结构与算法之美学习笔记:36 | AC自动机:如何用多模式匹配实现敏感词过滤功能

本节课程思维导图:很多支持用户发表文本内容的网站,比如 BBS,大都会有敏感词过滤功能,用来过滤掉用户输入的一些淫秽、反动、谩骂等内容。你有没有想过,这个功能是怎么实现的呢?实际上,这些功能最基本的原理就是匹配算法,也就是通过维护一个敏感词典,当用户输入一段文内容之后,通过匹配算法,来查找用户输入的这段文,是否包含敏感词。如果有,就用“***”把它替代掉。那如何才能实现一个高性能的敏感词过滤系统呢?这就要用到今天的多模式匹配算法

weixin_43597208的博客 368

AC自动机多模式匹配的完整推导

AC自动机Aho-Corasick Automaton)是处理多模式匹配的神器。在文本中同时查找多个模式KMP需要匹配多次,而AC自动机一次扫描就能找到所有匹配。我并没有能力让你成为算法专家,我只是想让你彻底理解AC自动机的核心思想、fail指针的构建原理、以及为什么它是TrieKMP的完美结合。每个概念都会详细推导,讲透本质。从"多模式匹配超时"问题出发,剖析AC自动机的核心思想与fail指针构建。

比较是偷走幸福的小偷 4231

Java】如何设计一个敏感词过滤系统?

AC自动机算法AhoCorasick算法)是一种搜索算法,可以同时将目标与所有模式进行匹配算法均摊情况下具有近似于线性的时间复杂度。AC自动机匹配原理有两个核心概念:Trie、Fail指针。下面以模式集合{“she”, “he”, “shers”, “his”, “era”}为例,来介绍这两个概念。AC自动机算法启动时,需要将所有的模式加载到内存中,构建成一个Trie

alen101的博客 3139
上一篇: Trie 树:如何实现搜索引擎的搜索关键词提示功能
下一篇: 贪心算法: 如何用贪心算法实现Huffman压缩编码
every__day
博客等级 码龄9年 234粉丝 177原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值