[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,程序是基本运行起来了,但是却存在着一个重大的安全问题,那就登陆权限验证,一般来 ...
随机推荐
- 遮罩DIV遮挡住下面元素 下面元素如何触发响应点击事件
遮罩DIV{ pointer-events: none; }
- iOS开发 WKWebView实现JS交互
需求:利用webView加载H5页面,并实现点击H5页面的按钮触发事件,事件是调用OC的方法.简单说就是JS调用OC的方法,这里我们选择的是WKWebView,至于为什么不用UIWebView,自行百 ...
- Django 之 Form
forms组件 1. 校验字段功能 针对一个实例:注册用户讲解. 模型:models.py class UserInfo(models.Model): name=models.CharField(ma ...
- sync.WaitGroup
WaitGropu使用注意 作groutine参数时传指针 type WaitGroup struct { noCopy noCopy // 64-bit value: high 32 bits ar ...
- CIC滤波器
CIC滤波器是滑动平均滤波器的非常高效的迭代实现,只需要一个减法和一个加法,而滑动平均需要N-1个加法. cic滤波器相当于一个梳状滤波器y(n)=x(n)-x(n-D),H(z)=1-z-D,和一个 ...
- 用java读取Excel并依据模板图生成对应的图片
package test; import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; import java. ...
- Java Collection体系
Collection 接口 宏观图 快速使用 import java.util.*; public class Demo { public static void main(String[] args ...
- Offer 提速:如何写出有亮点的简历
先来个灵魂拷问: 你与他人相比,有什么能形成明显区分度的优势条件? 这里有两个层面的问题,一是 如何识别出你的优势条件,毕竟大多数人大多数时候可能都是在做业务,临到写简历的时候要求总结日常工作中跟别人 ...
- 水印 canvas 实现
let str = info; let c = document.createElement("canvas"); document.body.appendChild.c; let ...
- linux 学习之xargs
xargs 可以将筛选结果作为执行条件 如 ls *.go | xargs rm -rf 删除当前目前所有后缀为go的文件 指定单行列数 cat test.txt | xargs -n2