[Lua]敏感字检测
参考链接:
https://zhuanlan.zhihu.com/p/84685657
https://www.cnblogs.com/luguoshuai/p/9254190.html
一开始打算使用树结构来实现,但考虑到敏感字数量过多,其构建的树会十分庞大,占用过多内存,所以这里使用的是上面链接里面提到的“滑动窗口”方法
例如,要检测的字符串为“123”,则实际上只需处理,以下6种情况:1,12,123,2,23,3;进行6次敏感字的判断即可
- 1 local sensitiveWordList = {
- 2 "早啊",
- 3 "a啊",
- 4 } --测试用
- 5 local sensitiveWordDic = {} --key:敏感字 value:true
- 6
- 7 --获取字符数
- 8 function GetWordCount(str)
- 9 local _,count = string.gsub(str, "[^\128-\193]", "")
- 10 return count
- 11 end
- 12
- 13 --将字符串转为table
- 14 function GetWordTable(str)
- 15 local temp = {}
- 16 for uchar in string.gmatch(str, "[%z\1-\127\194-\244][\128-\191]*") do
- 17 temp[#temp+1] = uchar
- 18 end
- 19 return temp
- 20 end
- 21
- 22 --将字符串的table转为字符串
- 23 function GetWordStr(wordTable, startPos, endPos)
- 24 local str = ""
- 25 local startPos = startPos or 1
- 26 local endPos = endPos or #wordTable
- 27 for i=startPos,endPos do
- 28 str = str .. wordTable[i]
- 29 end
- 30 return str
- 31 end
- 32
- 33 --处理敏感字
- 34 --isOnlyCheck:true表示仅检查是否有敏感字
- 35 function HandleSensitiveWord(str, isOnlyCheck)
- 36 local wordTable = GetWordTable(str)
- 37 local recordPos = {} --记录敏感字的位置
- 38 local hasSensitiveWord = false --是否有敏感字
- 39 local resultStr
- 40
- 41 for i=1,#wordTable do --开始位置
- 42 for j=i,#wordTable do --结束位置
- 43 local strTemp = GetWordStr(wordTable, i, j)
- 44 print(strTemp)
- 45 if sensitiveWordDic[strTemp] then
- 46 hasSensitiveWord = true
- 47 table.insert(recordPos, {i, j})
- 48 i = j
- 49 break
- 50 end
- 51 end
- 52
- 53 if hasSensitiveWord and isOnlyCheck then
- 54 break
- 55 end
- 56 end
- 57
- 58 if isOnlyCheck then
- 59 return hasSensitiveWord
- 60 else
- 61 for i=1,#recordPos do
- 62 local startPos = recordPos[i][1]
- 63 local endPos = recordPos[i][2]
- 64 for j=startPos,endPos do
- 65 wordTable[j] = "*"
- 66 end
- 67 end
- 68 resultStr = GetWordStr(wordTable)
- 69 return hasSensitiveWord, resultStr
- 70 end
- 71 end
- 72
- 73 function Init()
- 74 for i=1,#sensitiveWordList do
- 75 sensitiveWordDic[sensitiveWordList[i]] = true
- 76 end
- 77
- 78 --测试
- 79 local hasSensitiveWord, resultStr = HandleSensitiveWord("a早啊s")
- 80 print(hasSensitiveWord, resultStr)
- 81 end
- 82
- 83 Init()
结果如下:
[Lua]敏感字检测的更多相关文章
- php 检测敏感字
public function getMin($content){//调用接口 $content_url ="http://www.ju1.cn/index.php/Index/add.ht ...
- Python中替换敏感字
敏感词在文本文件document.txt中,当用户输入敏感词语时,用*号代替并打印出来 document.txt中的文件内容如下: 北京 上海 广州 深圳 领导 test.py content=inp ...
- [DeeplearningAI笔记]序列模型3.9-3.10语音辨识/CTC损失函数/触发字检测
5.3序列模型与注意力机制 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.9语音辨识 Speech recognition 问题描述 对于音频片段(audio clip)x ,y生成文本 ...
- 敏感词检测、屏蔽设计(iOS & Android)
敏感词检测 服务器端最常使用的算法是DFA算法.如果服务器端使用java实现常规的DFA算法,假若... 源码:https://github.com/qiyer/DFA_Cplusplus
- C++ 简单中文敏感词检测工具类
具体思路: 1->敏感词库,可从数据库读取,也可以从文件加载. 2->将敏感词转化为gbk编码,因为gbk严格按照字符一个字节,汉字两个字节的格式编码,便于容易切分文字段. 3->将 ...
- lua敏感词过滤
--过滤敏感词(如果onlyKnowHas为true,表示只想知道是否存在敏感词,不会返回过滤后的敏感词,比如用户注册的时候,我们程序是只想知道用户取的姓名是否包含敏感词的(这样也能提高效率,检测到有 ...
- [lua][openresty]代码覆盖率检测的解决方式
废话在前 什么是代码覆盖率 来自百度百科 代码覆盖(Code coverage)是软件测试中的一种度量,描述程式中源代码被测试的比例和程度,所得比例称为代码覆盖率. 开发人员为何关注? 在我们的开发过 ...
- python (5分钟实现一个游戏的屏蔽敏感字系统,)
import datetime time=datetime.datetime.now() dirty= ['fuck','狗日的','犊子','麻批','仙人板板','R你妈','操你','草你',' ...
- 简单使用jstl实现敏感字替换
package com.ceshi; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; ...
- 一篇搞定Java过滤器
Filter:过滤器 引言 我们可以通过使用前面的技术,做出一些简单的登陆注册以及配合数据库实现对数据增删改查的Demo,程序是基本运行起来了,但是却存在着一个重大的安全问题,那就登陆权限验证,一般来 ...
随机推荐
- 基础篇之DOS命令
对于编程的小朋友来说,在DOS中输入一些命令也是常有的事情. 今天就来学习一些常见的命令.[该篇是在B站学习Siki学院的课程时做的笔记] DOS命令目录操作 常用DOS命令(输入命令后按下回车) d ...
- C#使用SharpZipLib解压多文件的zip压缩文件数据流,保存到本地
代码: public async Task<ReturnModel<List<string>>> UploadModel() { var task = new Ta ...
- css - object-fit ie兼容
css - object-fit ie兼容 参考资料 github 解决object-fit兼容IE浏览器实现图片自适应 demo <!-- * @createDate: 2022-08-30 ...
- PHP myadmin 无路径getshell
PHP>5 & MySQl>5 环境:windows下常规的集成环境如 phpstudy,wamp,xampp等. 条件:当已经用弱口令或者爆破登录myadmin以后,没登录进入就 ...
- 启动Eureka报org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'configurationPropertiesBeans' defined in class path resource
我出现这种情况是下图两个版本不对应 要结合官文档的版本号 也就是说将parent版本号改为2.2.x或者2.3.x
- signalR client属性中的大致方法
T All { get; } 相当于持久连接中的 Broadcast. T AllExcept(params string[] excludeConnectionIds); 给排除本人所有人发送消息. ...
- idea中的快捷键
- Flutter showModalBottomSheet 顶部圆角
showModalBottomSheet( context: context, shape: const RoundedRectangleBorder( borderRadius: BorderRad ...
- 网易面经-hashmap是否能存null(debug源码)
面试时一定要坚持自己的认知,不要让面试官两三下pua了. 结果是可以的 null作为key时被放在了tab下标为0的位置,只能有一个null null作为value时不受限制 虽然说value为nul ...
- Python抓取数据具体流程
之前看了一段有关爬虫的网课深有启发,于是自己也尝试着如如何过去爬虫百科"python"词条等相关页面的整个过程记录下来,方便后期其他人一起来学习. 抓取策略 确定目标:重要的是先确 ...