参考链接:

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]敏感字检测的更多相关文章

  1. php 检测敏感字

    public function getMin($content){//调用接口 $content_url ="http://www.ju1.cn/index.php/Index/add.ht ...

  2. Python中替换敏感字

    敏感词在文本文件document.txt中,当用户输入敏感词语时,用*号代替并打印出来 document.txt中的文件内容如下: 北京 上海 广州 深圳 领导 test.py content=inp ...

  3. [DeeplearningAI笔记]序列模型3.9-3.10语音辨识/CTC损失函数/触发字检测

    5.3序列模型与注意力机制 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.9语音辨识 Speech recognition 问题描述 对于音频片段(audio clip)x ,y生成文本 ...

  4. 敏感词检测、屏蔽设计(iOS & Android)

    敏感词检测 服务器端最常使用的算法是DFA算法.如果服务器端使用java实现常规的DFA算法,假若... 源码:https://github.com/qiyer/DFA_Cplusplus

  5. C++ 简单中文敏感词检测工具类

    具体思路: 1->敏感词库,可从数据库读取,也可以从文件加载. 2->将敏感词转化为gbk编码,因为gbk严格按照字符一个字节,汉字两个字节的格式编码,便于容易切分文字段. 3->将 ...

  6. lua敏感词过滤

    --过滤敏感词(如果onlyKnowHas为true,表示只想知道是否存在敏感词,不会返回过滤后的敏感词,比如用户注册的时候,我们程序是只想知道用户取的姓名是否包含敏感词的(这样也能提高效率,检测到有 ...

  7. [lua][openresty]代码覆盖率检测的解决方式

    废话在前 什么是代码覆盖率 来自百度百科 代码覆盖(Code coverage)是软件测试中的一种度量,描述程式中源代码被测试的比例和程度,所得比例称为代码覆盖率. 开发人员为何关注? 在我们的开发过 ...

  8. python (5分钟实现一个游戏的屏蔽敏感字系统,)

    import datetime time=datetime.datetime.now() dirty= ['fuck','狗日的','犊子','麻批','仙人板板','R你妈','操你','草你',' ...

  9. 简单使用jstl实现敏感字替换

    package com.ceshi; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; ...

  10. 一篇搞定Java过滤器

    Filter:过滤器 引言 我们可以通过使用前面的技术,做出一些简单的登陆注册以及配合数据库实现对数据增删改查的Demo,程序是基本运行起来了,但是却存在着一个重大的安全问题,那就登陆权限验证,一般来 ...

随机推荐

  1. centos linux 忘记密码

    1.开机 esc 将画面停止 2.   e 进入设置状态 3.编辑修改两处:ro改为rw,在LANG=en_US.UFT-8后面添加init=/bin/sh,版本不同 内容不同,找到对应的位置修改 4 ...

  2. antVue--a-cascader级联组件使用触发loadData方法注意事项

    <template> <a-cascader :options="options" :load-data="loadData" placeho ...

  3. laravel 邮件发送

    1.首先你要在qq悠闲中开启你的   SMPT(设置->账户)   获取到你的授权码 2.配置laravel MAIL_DRIVER=smtpMAIL_HOST=smtp.qq.comMAIL_ ...

  4. maven-标准目录结构,常用命令,生命周期,概念模型图

    maven-标准目录结构 作为一个maven工程,它的src目录和pom.xml是必备的,进入src目录后,我们发现它里面的目录结构如下:  src/main/java -- 存放项目的 . java ...

  5. TypeScript Array(数组)

    TypeScript Array(数组) 数组对象是使用单独的变量名来存储一系列的值. 数组非常常用. 假如你有一组数据(例如:网站名字),存在单独变量如下所示: var site1="Go ...

  6. 其他4-shell脚本后台运行知识

    1. 用途和方法 在实际工作中,一般会通过ssh连接服务器,隐藏可能就会有脚本或命令在执行期间不能中断的需求,若中断,则不仅前功尽弃,还可能破坏系统数据,下面是防止脚本执行终端的3种方法: 1)使用s ...

  7. bcc分析缓存命中率

    系统环境:centos7/redhat7 安装,提前配好网络yum源,比如aliyun yum install bcc-tools /etc/profile 添加如下命令路径 vim /etc/pro ...

  8. pycharm 导入requests库踩坑帖

    requests库确认安装了,但是在pycharm里各种导入不了,简直要奔溃,后来看帖子,有博主"alt + enter"了一下,跳出了install选项,然后就可以了... 用个 ...

  9. phpmyadmin scripts/setup.php 反序列化漏洞(WooYun-2016-199433)(Kali)

    ​ phpmyadmin 2.x版本中存在一处反序列化漏洞,通过该漏洞,攻击者可以读取任意文件或执行任意代码. 通过vulhub靶场进行复现操作 1.首先搭建靶场环境(采用Kali) cd vulhu ...

  10. 使用Python实现给企业微信发送allure报告,并实现微信查看

    1.注册企业微信 搜索企业微信直接注册 2.创建应用 3.查看企业id.Secret.应用id.部门id 4.发送代码 import os import jenkins import requests ...