敏感词的字典树匹配(lua版)
对于国内互联网和出版物来说,屏蔽敏感词和某些众所周知的秘密是一件老生常谈加司空见惯的事情了。。。上周小白也做了一个这个功能,但是我们属于游戏,要屏蔽的东西十分简单,不用像那些大型网站或者平台一样用专门的算法进行匹配,所以就能省则省。。。但是还是想说蛋疼的模式匹配啊
1,普通匹配法
该方法就是直接进行字符匹配,遍历所有的敏感词列表看看用户的输入中是否有敏感词出现,这种对敏感词少且输入短的来说是无所谓,但是真正的应用,我只能说:呵呵。。。
2,正则匹配
我也觉得正则匹配用到此处刚刚好,完全可以担当灵活多变四个字。但是如果是匹配有某些规律的还好说,可敏感词我还真找不出来他都是什么规律,想了想,无奈的放弃吧,当断则断
3,字典树
从运营处拿到了两份敏感词,一份是名字,一份是聊天,其中名字有一万行,聊天也特么有一万多行。使用过普通匹配后,猛喷出一口老血,这酸爽。。。无奈,使用了字典树,具体步骤是:a,预先遍历敏感词,构造字典树;b,根据输入匹配。貌似说了一堆废话。。。(其实我也不想,是现在闲了)。下面直接上代码吧
local chat = require "chat"local chat_dict
local chat_leaves = {}
--构造字典树
local function init_chat_dict()chat_dict = {}local record = chat.tablefor i = 1, #record dolocal word = record[i]local t = chat_dictfor j = 1, #word do local c = string.byte(word, j)if not t[c] thent[c] = {}endt = t[c]end chat_leaves[word] = trueend
end--匹配
function ShieldChat(msg)if not chat_dict theninit_chat_dict()endlocal matchs = {}for i = 1, #msg dolocal p = ilocal q = plocal t = chat_dictwhile true doif not t[string.byte(msg,q)] thenq = q - 1breakendt = t[string.byte(msg, q)]q = q + 1endif q >= p thenlocal str = string.sub(msg, p, q)if chat_leaves[str] thentable.insert(matchs, {b = p, e = q, l = (q - p + 1)})endendendlocal str = msgfor _,v in ipairs(matchs) dostr = string.sub(str, 1, v.b - 1) .. string.rep("*", v.l) .. string.sub(str, v.e + 1)endreturn str
end
以上包含最基本功能,剩下的想加可以自行添加其他要求,并希望能得到大家的其他指导!
转载于:https://www.cnblogs.com/garsonlab/p/9992158.html
敏感词的字典树匹配(lua版)相关推荐
- Java过滤敏感词汇算法(字典树)
定义节点 import java.util.ArrayList; import java.util.List;public class Node {private char root;private ...
- hdu 1251 字典树,指针版
这题内存需求很大,我用静态数组写的trie总MLE,看discuss说50w的数组才过,但我一开50w的就MLE了啊--想不通 这是链表版的trie,1个case,所以也不用考虑内存释放什么的 #in ...
- 敏感词过滤的php代码,php实现敏感词过滤(Trie树)
灵感来自于 [嘉兴ing](https://segmentfault.com/a/1190000019137933 "Trie树 php 实现敏感词过滤") 感谢分享. 本文主要是 ...
- UGC社区敏感词过滤原理
UGC社区是以用户原创内容为主的移动互联网线上社区,其前身是网页端的bbc论坛.社区型平台每天会产生大量由用户自发形成的内容,有文字.图片.视频等形式,当然现在还有直播等形式的内容,由于用户层次的不同 ...
- python-DFA算法敏感词检索
敏感词检索功能 根据 DFA 算法思想进行实现,主要包括两方面的内容: 将收集好的敏感词库生成 Trie 树 按照项目需求,对文本中的敏感词进行检索或者处理 算法复杂度: Trie树: 构建-O(n) ...
- 很全的敏感词匹配系统的设计与实践
作者:vivo互联网服务器团队-Liang Kangwu 一.前言 谛听系统是vivo的内容审核平台,保障了vivo各互联网产品持续健康的发展.谛听支持审核多种内容类型,但日常主要审核的内容是文本,下 ...
- 用前缀树实现中文敏感词过滤器
文章目录 前言 运行环境 过滤器源码 过滤器测试类 前言 本文代码实现一个中文的敏感词过滤器,预先将准备好的敏感词写入前缀树数据结构中实现快速检索,并且节省内存.一般用于检查注册用户名称.言论是否包含 ...
- 如何设计一个敏感词匹配系统?
▲ 点击上方"分布式实验室"关注公众号 回复"1"抽取纸质技术书 谛听系统是vivo的内容审核平台,保障了vivo各互联网产品持续健康的发展.谛听支持审核多种内 ...
- 【前缀树】写一个敏感词过滤器
1.什么是敏感词过滤 这其实是一个很常见的功能,随处可见以至于你可能都没关注过,基本上在有评论的地方都会有它的身影. 举例来说,你打游戏和别人对喷的时候,是不是一些脏话发不出去哈哈,这些词汇会用*** ...
- SpringBoot使用前缀树实现敏感词的过滤
记录一下使用SpringBoot中使用前缀树对敏感词的一个过滤. 首先呢在resources目录下建立一个文件用来装敏感词例如我在resources/sensitive-words.txt如下: 敏感 ...
最新文章
- 016 | 漫谈区块链共识机制
- Mako 模板系统文档翻译(1) 使用基础
- hbase 客户端_全网最细致的 HBase 内核解析
- linux 7za下载,Linux安装7za
- python打印星星居中_python中怎么打印星星
- docker 和挂载文件一起打包成新镜像_Docker文件系统和数据卷
- 记录 之 tf.placeholder() 函数的意义及用法
- Python OS和shutil模块的常见方法
- [react] 为什么建议Fragment包裹元素?它的简写是什么?
- vgc机器人编程1到13题_工业机器人编程与实操-期末试题
- VC在windows下编写用于串行通讯的程序
- 道路建立拓扑关系的规则_建立真正社区关系的5条规则
- DataGridView使用技巧一:获取或设置当前单元格的内容
- 如何用PS软件取得色块的颜色值?
- java实现ftp连接、登陆、上传、下载、删除文件、获取目录、文件列表
- 上海企业英语培训机构排名
- English trip V2 - 24 Making Predictions Teacher: Taylor
- AD7606 SPI模式 网上问题汇总
- 严重:init datasource errorcom.mysql.jdbc.exceptions.jdb4.CommunicationsException:Communications link失败
- OPERA-MS:宏基因组二、三代测序混合组装