过滤敏感词汇(trie树实现敏感词过滤)
1、字符串匹配
(1)暴力解法:采用两个for循环,每次匹配的时间复杂度O(m*n)
(2)KMP:时间复杂度O(m+n)
n表示字符串的长度,m表示每个灵感词的长度
(3)trie树
字典树/单词查找树,是一种哈希树的变种。
优点:利用字符串的公共前缀来减少查询时间,最大限度地减少无畏的字符串比较,查询效率比哈希树高(共享字符串的公共前缀)
性质:
1.根节点不包含字符,除根节点外每一个节点都只包含一个字符;
2.从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串;
3.每个节点的所有子节点包含的字符都不相同
trie树的应用:
1.搜索时,输入关键字,待选框会列举出很多相关的信息
2.敏感词汇过滤
3.求以关键字为前缀的字符串的个数
trie树过滤敏感词汇的过程
1、时间复杂度:
如果敏感词汇的长度为m,则每个敏感词的查找时间复杂度是O(m)
字符串的长度为n,我们需要遍历n遍
所以敏感词汇查找这个过程的时间复杂度是O(nm)
如果有t个敏感词的话,构建trie树的时间复杂度是O(tm),这个可以忽略,因为这个从一开始就要建立,之后重复使用
2、过程
准备:
1、建议一颗trie树,存放敏感词
2、使用3个指针来遍历
p1指向trie树的root
p2指向字符串的第一个字符
p3指向字符串的第一个字符
查找:-------写的不够详细,之后再更新
1、检测有没有以p2指向节点的字符作为前缀的敏感词(从p2指向的字符开始查找):
1、判断p1的孩子节点中是否存在p2指向节点的字符
1、没有:
1、把p3向右移动一格
2、把p2移到p3的位置
3、p1移到root
4、continue
2、有
1、p1指向那个孩子节点
2、p2向后移到一格
3、p3不动
4、continue
如何构造trie树
过滤敏感词汇(trie树实现敏感词过滤)相关推荐
- trie树之敏感词过滤算法
之前写过一篇关于Trie树的介绍:Trie树--在一个字符串集合中快速查找某个字符串.今天就用Trie树来实现敏感词过滤算法. 首先简单介绍一下Trie树的数据结构: 1.根节点不存储字符. 2.Tr ...
- 敏感词汇检测及返回敏感源词汇
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;/* ...
- 【敏感词汇过滤算法】基于DFA-前缀树的敏感词汇过滤算法(项目实用)
在敏感词汇过滤这块,不同的算法所造成的性能差异是非常大的,选择一个合适的算法非常重要.因为以前做算法的时候做过类似前缀树的字符串匹配之类的算法,所以一开始就打算用前缀树做的,后面了解了一下DFA的相关 ...
- AC自动机:多模式串匹配实现敏感词过滤
文章出处:极客时间<数据结构和算法之美>-作者:王争.该系列文章是本人的学习笔记. 1 敏感词过滤场景 在很多支持用户发表内容的网站,都有敏感词过滤替换的功能.例如将一些淫秽.反动内容过滤 ...
- 敏感词过滤算法 为内容保驾护航 Java/.Net/C++/c/Python等语言是如何进行敏感词打码限制的 高效防范违规内容
有人的地方,就有江湖,有输入框的地方,就有注入风险!有输入框的地方,就有敏感词!敏感词就像一个平台杀手,可能直接导致平台被封锁! 敏感词是一个APP.一个网站.一个内容平台的"杀手" ...
- 敏感词过滤案例(Filter过滤器)
敏感词汇过滤 需求 对UserCRUD_case案例中录入的数据进行敏感词汇的过滤 敏感词汇参考<敏感词汇.txt> 若是敏感词汇,则替换为*** 分析 在进行过滤前后,所获取的reque ...
- Filter - 通过拦截器与动态代理实现敏感词汇过滤
需求:将敏感词汇.txt文件中的词语过滤为 -> "***" 分析: 首先加载文档,将文档中的词汇纳入集合中备用,方便后期比对使用. 使用Proxy动态代理将request对 ...
- 鸿蒙os 2.0玩吃鸡,华为鸿蒙OS2.0[敏感词汇屏蔽]能简测:极致画质下的吃鸡王者更胜EMUI11...
炫舞雷公电母IT之家5月1日消息华为本周已经向部分拥有测试资格的用户推送了H..armonyOS2.0开发者公测版更新,虽然部分功能体验与基于安卓10的EMUI11没有太大差别,但似乎已经给我们带来了 ...
- 数据结构与算法之美笔记——基础篇(下):图、字符串匹配算法(BF 算法和 RK 算法、BM 算法和 KMP 算法 、Trie 树和 AC 自动机)
图 如何存储微博.微信等社交网络中的好友关系?图.实际上,涉及图的算法有很多,也非常复杂,比如图的搜索.最短路径.最小生成树.二分图等等.我们今天聚焦在图存储这一方面,后面会分好几节来依次讲解图相关的 ...
最新文章
- 职场协同办公如何使用硬技能,助推团队协作更流畅?
- matlab 读取txt文件数据
- mysql5.7 部署文档-rpm
- 【Linux】一步一步学Linux——mtools命令(244)
- 谷歌开源3D舞蹈生成模型FACT,舞姿清奇!
- P3435-[POI2006]OKR-Periods of Words【KMP】
- sqlite3_column
- 全面升级 | 阿里云中间件推出3款新品和3项产品新特性,加速企业中台落地
- Windows环境下安装Cassandra1.0.2
- html 伪元素原理,CSS伪类伪元素详解
- UE4添加人物动画之状态机
- 计算机工程师难度排名,【2018一级造价工程师考试各个科目的难度排行榜】- 环球网校...
- 怎么授权接入芝麻小程序客服系统?
- 数学三角形和倒三角形公式表达了什么
- Excel多条件计数——COUNTIFS【获奖情况统计】
- 教程:晶莹剔透的水滴绘制过程
- 自媒体的推广方式有哪些(自媒体推广的10种方法)
- 你们要的线上GC问题案例来啦
- sqrt (2)不使用数学库,求2的开方。
- xxl-job本地部署到容器部署到k8s部署