参考链接:

https://zhuanlan.zhihu.com/p/84685657

https://www.cnblogs.com/luguoshuai/p/9254190.html

一开始打算使用树结构来实现,但考虑到敏感字数量过多,其构建的树会十分庞大,占用过多内存,所以这里使用的是上面链接里面提到的“滑动窗口”方法

例如,要检测的字符串为“123”,则实际上只需处理,以下6种情况:1,12,123,2,23,3;进行6次敏感字的判断即可

  1. 1 local sensitiveWordList = {
  2. 2 "早啊",
  3. 3 "a啊",
  4. 4 } --测试用
  5. 5 local sensitiveWordDic = {} --key:敏感字 value:true
  6. 6
  7. 7 --获取字符数
  8. 8 function GetWordCount(str)
  9. 9 local _,count = string.gsub(str, "[^\128-\193]", "")
  10. 10 return count
  11. 11 end
  12. 12
  13. 13 --将字符串转为table
  14. 14 function GetWordTable(str)
  15. 15 local temp = {}
  16. 16 for uchar in string.gmatch(str, "[%z\1-\127\194-\244][\128-\191]*") do
  17. 17 temp[#temp+1] = uchar
  18. 18 end
  19. 19 return temp
  20. 20 end
  21. 21
  22. 22 --将字符串的table转为字符串
  23. 23 function GetWordStr(wordTable, startPos, endPos)
  24. 24 local str = ""
  25. 25 local startPos = startPos or 1
  26. 26 local endPos = endPos or #wordTable
  27. 27 for i=startPos,endPos do
  28. 28 str = str .. wordTable[i]
  29. 29 end
  30. 30 return str
  31. 31 end
  32. 32
  33. 33 --处理敏感字
  34. 34 --isOnlyCheck:true表示仅检查是否有敏感字
  35. 35 function HandleSensitiveWord(str, isOnlyCheck)
  36. 36 local wordTable = GetWordTable(str)
  37. 37 local recordPos = {} --记录敏感字的位置
  38. 38 local hasSensitiveWord = false --是否有敏感字
  39. 39 local resultStr
  40. 40
  41. 41 for i=1,#wordTable do --开始位置
  42. 42 for j=i,#wordTable do --结束位置
  43. 43 local strTemp = GetWordStr(wordTable, i, j)
  44. 44 print(strTemp)
  45. 45 if sensitiveWordDic[strTemp] then
  46. 46 hasSensitiveWord = true
  47. 47 table.insert(recordPos, {i, j})
  48. 48 i = j
  49. 49 break
  50. 50 end
  51. 51 end
  52. 52
  53. 53 if hasSensitiveWord and isOnlyCheck then
  54. 54 break
  55. 55 end
  56. 56 end
  57. 57
  58. 58 if isOnlyCheck then
  59. 59 return hasSensitiveWord
  60. 60 else
  61. 61 for i=1,#recordPos do
  62. 62 local startPos = recordPos[i][1]
  63. 63 local endPos = recordPos[i][2]
  64. 64 for j=startPos,endPos do
  65. 65 wordTable[j] = "*"
  66. 66 end
  67. 67 end
  68. 68 resultStr = GetWordStr(wordTable)
  69. 69 return hasSensitiveWord, resultStr
  70. 70 end
  71. 71 end
  72. 72
  73. 73 function Init()
  74. 74 for i=1,#sensitiveWordList do
  75. 75 sensitiveWordDic[sensitiveWordList[i]] = true
  76. 76 end
  77. 77
  78. 78 --测试
  79. 79 local hasSensitiveWord, resultStr = HandleSensitiveWord("a早啊s")
  80. 80 print(hasSensitiveWord, resultStr)
  81. 81 end
  82. 82
  83. 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. 基础篇之DOS命令

    对于编程的小朋友来说,在DOS中输入一些命令也是常有的事情. 今天就来学习一些常见的命令.[该篇是在B站学习Siki学院的课程时做的笔记] DOS命令目录操作 常用DOS命令(输入命令后按下回车) d ...

  2. C#使用SharpZipLib解压多文件的zip压缩文件数据流,保存到本地

    代码: public async Task<ReturnModel<List<string>>> UploadModel() { var task = new Ta ...

  3. css - object-fit ie兼容

    css - object-fit ie兼容 参考资料 github 解决object-fit兼容IE浏览器实现图片自适应 demo <!-- * @createDate: 2022-08-30 ...

  4. PHP myadmin 无路径getshell

    PHP>5 & MySQl>5 环境:windows下常规的集成环境如 phpstudy,wamp,xampp等. 条件:当已经用弱口令或者爆破登录myadmin以后,没登录进入就 ...

  5. 启动Eureka报org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'configurationPropertiesBeans' defined in class path resource

    我出现这种情况是下图两个版本不对应 要结合官文档的版本号 也就是说将parent版本号改为2.2.x或者2.3.x

  6. signalR client属性中的大致方法

    T All { get; } 相当于持久连接中的 Broadcast. T AllExcept(params string[] excludeConnectionIds); 给排除本人所有人发送消息. ...

  7. idea中的快捷键

  8. Flutter showModalBottomSheet 顶部圆角

    showModalBottomSheet( context: context, shape: const RoundedRectangleBorder( borderRadius: BorderRad ...

  9. 网易面经-hashmap是否能存null(debug源码)

    面试时一定要坚持自己的认知,不要让面试官两三下pua了. 结果是可以的 null作为key时被放在了tab下标为0的位置,只能有一个null null作为value时不受限制 虽然说value为nul ...

  10. Python抓取数据具体流程

    之前看了一段有关爬虫的网课深有启发,于是自己也尝试着如如何过去爬虫百科"python"词条等相关页面的整个过程记录下来,方便后期其他人一起来学习. 抓取策略 确定目标:重要的是先确 ...