[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,程序是基本运行起来了,但是却存在着一个重大的安全问题,那就登陆权限验证,一般来 ...
随机推荐
- vue-cli打包后运行报路径错误 不知道什么牛马问题 连默认生成的项目不动一行代码直接打包都会出错
不知道什么牛马问题 连默认生成的项目不动一行代码直接打包都会出错 解决方法 新建一个 vue.config.js module.exports = { publicPath: './', config ...
- 【SQL Server】存储过程带参数输出——output
在SQL Server 中,如果要用一个存储过程返回字符串应该怎么做?用output参数. 错误方式 接下来,展示一下,常见的错误方法 CREATE PROCEDURE testString AS B ...
- IE浏览器a标签无法下载问题解决(IE浏览器a标签download属性不兼容问题解决)
//下载文件流函数,只支持get方法. export function downBlob(payload) { return new Promise(((resolve, reject) => ...
- 解决tomcat8080端口占用问题
解决tomcat8080端口占用问题 1. 使用管理员权限打开cmd 2. 输入 netstat -ano | findstr 8080 找出占用8080端口的进程pid netstat -ano | ...
- Python 删除文件及文件夹
2种方式: [不删除给定的目录] path1 = "D:\\dev\\workspace\\python\\pytestDemo\\222" def del_filedir(pat ...
- 应用Sequelize创建项目
创建项目: 第一步:安装express-generator -g 第二步:安装ejs模板 express --view=ejs 项目名 第三步:安装依赖进入项目 npm i ------------ ...
- 第一个知识点:import 和 export
//全部导入import people from './example' //有一种特殊情况,即允许你将整个模块当作单一对象进行导入//该模块的所有导出都会作为对象的属性存在import * as e ...
- mysql零基础-2
更新中的数据完整性错误 UPDATE employees SET department_id = 55 WHERE department_id = 110; 删除数据 删除一条记录 DELETE FR ...
- 方法(Java)
什么是方法? 基本介绍 在其他语言中也叫函数 System.out.println();类名.对象.方法: Java方法是语句的集合,它们在一起执行一个功能 方法是解决一类问题的步骤的有序集合 方法包 ...
- 编译安装php-fpm并添加nginx支持
编译安装php-fpm 环境准备 yum -y install gcc automake autoconf libtool make install gcc gcc-c++ glibc bison b ...