[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,程序是基本运行起来了,但是却存在着一个重大的安全问题,那就登陆权限验证,一般来 ...
随机推荐
- TCP连接connect函数返回错误
如果是 TCP 套接字,那么调用 connect 函数将激发 TCP 的三次握手过程,而且仅在连接建立成功或出错时才返回.其中出错返回可能有以下几种情况: 三次握手无法建立,客户端发出的 SYN 包没 ...
- php递归算法多级分类
/** * 递归实现无限极分类 * @param $array 分类数据 * @param $pid 父ID * @param $level 分类级别 * @return $list 分好类的数组 直 ...
- mybatis核心配置文件—mappers标签设置映射文件
<!-- 加载映射文件 --> <mappers> <!--<mapper resource="mappers/UserMapper.xml"& ...
- oracle常用知识随笔
1.创建表空间及用户赋权 create tablespace spaceone datafile '/dev/spaceone'size 80mextent management localsegme ...
- vue.js----之框架搭建(一)
首先你要有node,没有的去官网安装一下就好了 好了开始搭建骨架 第一步安装vue-cli npm install -g vue-cli 创建vue项目 语法:这里我选择使用webpack来创建 vu ...
- 目标检测yolov5检测火龙果
一.github官方网址 https://github.com/ultralytics/yolov5/tree/v6.1 二.labelme标记数据集: (1).进入虚拟环境 (2).pip inst ...
- 什么是Entity Framework(ORM)
高手掠过,仅仅是查漏补缺 Entity Framework是什么: 1,ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对应 (O/R Mapp ...
- 由浇花工具开始IOT物联网平台之开始前言篇【1】
在2020年时,突然有个想法,就是做个浇花工具,因为平时喜欢养花,有时忘记浇花,有时感觉手动浇花太麻烦,所以做个这个小玩意,是用.NET 开发的WinForm小程序,来控制单片机,带动水泵浇花,还可以 ...
- 策略模式demo
/** StrategyContext. */ public class StrategyContext { private Strategy strategy; // 传入的是Strategy的实现 ...
- 基于LabVIEW的计时器
前言: 最近有人问我,怎么实现一个计时器计时,可以做到启动.停止.重新开始等功能,好久没关于LABVIEW的博文,借这个写个计时器相关内容. 一.Labview时间计时器介绍: 这里采用时间计时器计算 ...