: DFA确定有限自动机匹配屏蔽,我们将敏感词构造成DFA形式,如敏感词集合 。 需要将敏感词集合构建成Trie树,如AC自动机多模字符串匹配算法。匹配句子时,遍历Trie树,从敏感词集合中找出可匹配的敏感词。 AC自动机多模式 上述敏感词屏蔽算法只能精确屏蔽,如果新增敏感词规则,就需要人工维护敏感词集合,这种迭代更新完全依赖人力,无法自动挖掘敏感词的匹配规则。 同时面对复杂的语言环境,当前匹配算法会丧失匹配精度,出现误伤情况。例如:“中华”一词多义,如果指香烟,可能算烟草违规的敏感词,但如果指牙膏,那就不算敏感词了。 如果出现主题漂移的情况,上述敏感词屏蔽算法也会出现跨越分词边界匹配,例如:“吃肯德基吧”。这段句子再正常不过了,如果“基吧”在敏感词集合中,就会被屏蔽,最后显示出来就是“吃肯德**”。
不管是电商、社交还是内容平台,一套高效、稳定、可扩展的敏感词过滤模块,都是后端工程师必须掌握的实用技能。 同时这也是面试高频考点:敏感词过滤为什么不用暴力匹配? 敏感词库从 DB/Redis 加载 支持白名单豁免 三、面试必问:为什么敏感词过滤不用暴力匹配? 什么是暴力匹配 暴力匹配就是: 遍历所有敏感词 对每一个敏感词,遍历全文做 String.contains() / indexOf 命中即判定违规 伪代码类似: for (String word : sensitiveList 比如敏感词:赌博、赌球、赌钱暴力匹配会重复匹配前缀“赌”三次。 暴力匹配在 QPS 上涨后,接口耗时会从几毫秒涨到几百毫秒,直接导致服务雪崩。 (5)扩展能力差 新增敏感词、删除敏感词、热更新时,暴力匹配没有缓存优势,每次都要全量遍历。
PHP实现的敏感词过滤方法,有好的编码和好的实现方法,可以发出来一起交流一下。以下是一份过滤敏感词的编码
? 一.敏感词过滤方案一
/**
* @todo 敏感词过滤,返回结果
* @param array $list 定义敏感词一维数组
* @param string $string 要过滤的内容 string, $replaceArray); //结果替换
}
$log = "原句为 [ {$string} ]
";
if($count==0){
$log .= "暂未匹配到敏感词 ;
}else{
$log .= "匹配到 [ {$count} ]个敏感词:[ {$sensitiveWord} ]
". 那么我们可以先把敏感词中有相同前缀的词组合成一个树形结构,不同前缀的词分属不同树形分支,在Java中,我们可以用HashMap来存储上述的树形结构,还是以上述敏感词为例,我们把每个敏感词字符串拆散成字符
前言 如果可以用第三方的话,那么你是幸运的,因为现在这种敏感词过滤,敏感图片,敏感语音过滤的第三方服务还是挺多的 敏感词过滤 核心代码 利用PHP内置的三个函数 array_combine() | array_fill ,count($item),'*')); $content = strtr($content,$replace); array_combine array_fill strtr 完整代码 //过滤敏感词所有匹配的敏感词用一个
最近有一个需求就是需要给一串文字做敏感词校验 需求 根据上传的一串字符里通过校验可以返回里面的敏感词 不同的用户有一个敏感词库 用户可以随时修改需要校验的敏感词库(不会经常修改) 解决方案 存储敏感词库 由于我们用的数据库是MYSQL 我们就将这个敏感词存在数据库,那就是怎么存text一下全部存储还是每个敏感词都分开,最后根据娇艳的规则方式将其存储为一个或一段敏感词存储在一行。
》(* 本文)3、敏感词匹配算法选型敏感词匹配功能依托于模式匹配算法。 4、vivo的谛听系统谛听系统基于AC自动机算法构建了一套敏感词匹配服务,将敏感词作为模式串,文本内容作为目标串,可以实现常用的中、英文敏感词匹配。 5、技术实践1:组合敏感词常规的敏感词匹配算法通常匹配单个词或者短句,但某些词单独出现时并不违规,只有在与几个特定的词同时出现时,才能判定为违规。组合敏感词的匹配算法依然基于AC自动机算法。 7、写在最后谛听系统基于AC自动机实现了普通敏感词、组合敏感词、拼音敏感词的匹配,其中组合敏感词和拼音敏感词还可以结合成为拼音组合敏感词,覆盖了大部分的文本审核场景,减轻了机审、人审的压力。 8、相关资料[1] 零基础IM开发入门(一):什么是IM聊天系统?
简述: 关于敏感词过滤可以看成是一种文本反垃圾算法,例如 题目:敏感词文本文件 filtered_words.txt,当用户输入敏感词语,则用 星号 * 替换,例如当用户输入「北京是个好城市」, ,提示用户输入评论内容,如果用户输入的内容中包含特殊的字符: 敏感词列表 li = ["苍老师","东京热",”武藤兰”,”波多野结衣”] 则将用户输入的内容中的敏感词汇替换成***,并添加到一个列表中 实战案例: 一道bat面试题:快速替换10亿条标题中的5万个敏感词,有哪些解决思路? 有十亿个标题,存在一个文件中,一行一个标题。有5万个敏感词,存在另一个文件。 写一个程序过滤掉所有标题中的所有敏感词,保存到另一个文件中。 1、DFA过滤敏感词算法 在实现文字过滤的算法中,DFA是比较好的实现算法。 算法核心是建立了以敏感词为基础的许多敏感词树。
当检测到“傻”字时,发现敏感词库中有相应的子树,我们把他记为tree-1,接着再搜索下一个字符“逼”是不是子树tree-1的子节点,发现恰好是,接下来再判断“逼”这个字符是不是叶子节点,如果是,则说明匹配到了一个敏感词了 接下来是敏感词的扫描: public enum MatchType { MIN_MATCH("最小匹配规则"),MAX_MATCH("最大匹配规则"); String desc; endFlag){ wordLength=0; } return wordLength; } 其中,MatchType表示匹配规则,有时候我们只需要找到一个敏感词就可以了 ,有时候则需要知道待检测文本中到底包含多少个敏感词,前者对应的是最小匹配原则,后者则是最大匹配原则。 getSensitiveWordLength方法的作用是根据给定的待检测文本及起始下标,还有匹配规则,计算出待检测文本中的敏感词长度,如果不存在,则返回0,存在则返回匹配到的敏感词长度。
一、什么是敏感词过滤? 敏感词过滤是一种处理网络内容的技术,可以检测和过滤出网络中的敏感/违禁词汇。它通过给定的关键字或字符串,判断网络内容是否包含某些敏感信息,从而防止违反法律法规的信息流通。 通常,可以使用两种方法来过滤敏感词: 黑名单过滤:即定义一个黑名单,将所有敏感词择记录在其中,然后对输入的文本进行对比,如果发现有敏感词,就将其过滤掉。 ToolGood.Words是一款高性能非法词(敏感词)检测组件,附带繁体简体互换,支持全角半角互换,获取拼音首字母,获取拼音字母,拼音模糊搜索等功能。 resultStr == "1") { resCode = 240; resultStr = ""; resMsg = "敏感内容匹配时发生错误 resultStr = resultStr }); } catch (Exception ex) { return Json(new { code = 220, msg = "敏感内容匹配时发生错误
ke.qq.com/webcourse/index.html#course_id=152997&term_id=100174752&taid=801037170660773&vid=y1412sc0r8c document.getElementById("txt2"); 6 var re = /[我|车|一]+/g; 7 oBtn.onclick = function(){ 8
①处理乱码问题 通过request的setCharcatierEncoding()方法设定字符集为utf-8,解决乱码问题。 二、敏感词汇获取 既然是要屏蔽敏感词汇,肯定需要先确定哪些词算是敏感词,再以这些词汇作为标准作为屏蔽。 ? split[0]表示的也就是敏感词内容,将其存入对应集合即可。 三、过滤代码编写 上述是对过滤器中init()方法里的代码编写,用于获取敏感词一共有哪些。 ②遍历敏感词汇并与用户数据匹配 敏感词汇一共有三个级别,可以分别对应不同的处理方式,比如永久封号、封号7天,禁言…… 现在毕竟学习阶段,只遍历等级为1的集合,正则匹配涉及到一个工具类Pattern: compile (str):以遍历的敏感词为标准。
序 本文简单介绍下敏感词或者脏词检测算法。 经典AC算法 经典的AC算法由三部分构成,goto表,fail表和output表,共包含四种具体的算法,分别是计算三张查找表的算法以及AC算法本身。 (goto表就是一棵trie树) failure表作用是在goto表中匹配失败后状态跳转的依据,这点与KMP中next表的作用相似。 树的kmp算法,AC算法需要三个函数来进行字符串匹配,而且这三个函数的求解都和一个确定的DFA(有限状态自动机)有关。 普通DFA算法 确定性有穷自动机,用于正则表达式的匹配,最长左子式匹配 使用hashmap public void createKeyWord(String keyWord) { Map :AC算法 Java实现DFA算法对敏感词、广告词过滤功能 敏感词过滤的算法原理之 Aho-Corasick 算法 敏感词过滤的算法原理之DFA算法 AC自动机和Fail树 基于双数组的AC匹配算法学习
那么多叉树是如何存储敏感词的呢?首先将敏感词分解为一个一个的字符,例如敏感词”CSDN”,第一个字符是C,则在Head下创建子树”C”(如果已经存在则跳过这一步)。 这种算法会出现一个小意外,如果一个敏感词恰好是另一个敏感词的前缀,就会导致较短的敏感词被长的敏感词覆盖,这种情况可以通过添加结束标记来区分。 txt文件,每个敏感词独占一行,不可出现空格,空行,逗号等非文字内容,必须使用UTF-8编码 * @param path txt文件的绝对地址 */ public static 14596个敏感词(可能有个别重复),在测试代码里生成了一个长度为1000的字符串,总共包含100个相同敏感词,敏感词中间有逗号隔开 重复执行过滤10000次,并打印结果和时间,结果如下 可以看到程序成功地过滤了敏感词 源文件+敏感词列表 在寻找敏感词列表时发现很多人的分享都被取消了,为了防止敏感词列表被检测出敏感词,使用了zip格式并加密。敏感词库存在部分重复,不过不影响使用。
因为网站内容或者评论大都不是原创的,这就有必要防范非法的敏感字。首先在模板页module.php最后面加入<?php $badstring="**|**|**";? >,其中的**代表非法敏感词 然后在按下面的输出方法即可,以模板板子为例 列表页(log_list.php):找到<?php echo $value['log_description']; ? > 这样就可以把网站的非法敏感词过滤掉
连胜老师介绍一种前端处理敏感词的方法:替换相关敏感词为** 把一些基本的敏感词放在前端校验,一些疑似或者有语义的词再去用官方API检测。 hasSensitiveWords(str) { if(str == '' || str == undefined) return false; var words = '台独,藏独'; // 常用敏感词 : var titleStr = util.hasSensitiveWords(this.data.title); if (titleStr) { util.showModelTips('标题包含敏感词 titleStr), titleDefault: util.replaceAll(this.data.title, titleStr), }); return; } 当用户输入了相关敏感词后 ,前端可以做个简单处理,把常用敏感词替换成**。
这里想到了自己经常联调的风控同学违禁词识别场景。和某明星塌房需要拦截关键词一毛一样。在联调之余有幸请教了风控的几位同学,再此学习了一下风控系统中敏感词校验的设计方案。 场景:张三塌房,需要对增量的文案流量过滤张三关键词。 大量的关键词内存存储方案。场景:业务需求增多,关键词自然增多,很常见。 快速匹配违禁词。 场景:用户多,词多,自然需求 2、实现思路 2.1 HelloWord级别的敏感词校验 我们以下面的DEMO为例,从0开始**,一步一步的质疑这个方案,从而实现局部最优**。 看下面的快速匹配违禁词 2.3 快速匹配违禁词 Trie 树(前缀树)可以用于高效的解决关键词匹配问题。上面的切片规则可以根据开始的第一个字进行切分。 详情可参考Trie 树原理及其敏感词过滤的实现 3、总结 整个链路可以不实现,但是方案要完整;系统可以不用,但是要做。两句都对。
问题描述:很多网站会对用户发帖内容进行一定的检查,并自动把敏感词修改为特定的字符。
随着各种社交论坛的日益火爆,敏感词过滤逐渐成为了非常重要的功能。那么在 Serverless 架构下,利用 Python 语言,敏感词过滤又有那些新的实现呢? 我们能否用最简单的方法实现一个敏感词过滤的 API 呢? DFA过滤敏感词 这种方法相对来说效率会更高一些。例如,我们认为坏人,坏孩子,坏蛋是敏感词,则他们的树关系可以表达: ? 敏感词过滤方法小结 可以看到这个所有算法中,在上述的基本算法中DFA过滤敏感词性能最高,但是实际上,对于后两者算法,并没有谁一定更好,可能某些时候,AC自动机过滤敏感词算法会得到更高的性能,所以在生产生活中 总结 敏感词过滤是目前非常常见的需求/技术,通过敏感词过滤,我们可以在一定程度上降低恶意言语或者违规言论的出现,在上述实践过程,有以下两点内容: 对于敏感词库额获得问题:Github 上有很多,可以自行搜索下载
敏感词检测API - 私有化部署提供文本识别、智能鉴黄、敏感词过滤、涉政检测等服务,可部署至「本地服务器」或「专有云服务器」,保障数据私密性,提供一键启动软件部署包私有化。 简介敏感词库从760000词组中整理出来,基于NLP算法检测支持Windows、MacOs、Linux等64位主流系统可以部署在本地服务器,也可以部署至阿里云、腾讯云、华为云、百度云等云服务器通过下载部署包 ,即可一键启动私有化的"敏感词检测 API服务"自动云更新最新词库支持http json方式或grpc方式查询单服务参考查询效率70000次/分钟,同时支持并行服务按需自定义添加文本白名单/黑名单服务运行内存 65M左右,非常轻便应用场景用户昵称、聊天消息、直播弹幕、评论留言、用户简介、商品详情、创作文章等内容合规检测过滤演示地址坚果墙在线敏感词检测服务下载地址https://github.com/bosnzt /wordscheckhttps://gitee.com/bosnzt/wordscheck快速接入文档文档地址敏感词分类色情:色情传播、x用品、av女优、色情描写、x器官、x行为、色情行为政治:领导人
一、什么是敏感词过滤? 敏感词过滤是一种处理网络内容的技术,可以检测和过滤出网络中的敏感/违禁词汇。它通过给定的关键字或字符串,判断网络内容是否包含某些敏感信息,从而防止违反法律法规的信息流通。 通常,可以使用两种方法来过滤敏感词: 黑名单过滤:即定义一个黑名单,将所有敏感词择记录在其中,然后对输入的文本进行对比,如果发现有敏感词,就将其过滤掉。 ToolGood.Words是一款高性能非法词(敏感词)检测组件,附带繁体简体互换,支持全角半角互换,获取拼音首字母,获取拼音字母,拼音模糊搜索等功能。 resultStr == "1") { resCode = 240; resultStr = ""; resMsg = "敏感内容匹配时发生错误 resultStr = resultStr }); } catch (Exception ex) { return Json(new { code = 220, msg = "敏感内容匹配时发生错误