最近需要给游戏做一个敏感词新系统,我采用的方法是比较常用的DFA(确定有穷状态机)算

法,先不讲算法,而这种算法的实现需要一个相应的敏感词库。

我拿到了词库后发现词库中大概有8000+个词,其中包括很多重复的,还有很多有着头包含关

系的词;

  什么是头包含词呢? 看如下例子:

  我们知道在DFA算法读取敏感词后如果存在这种情况:

  词1: "ab"  词2:  "abc"

  在读取之后“ ab “这个敏感词就会不复存在而被abc覆盖掉, 而我们游戏需要对敏感词进行的

操作不是以其他字符(如 * *)代替句子中的敏感词而是如果判断出句子中含有敏感词,则无法发

出。所以,如果 “ab” 已经是敏感词了,“abc”就没有必要出现在敏感词库中了所以我需要将敏感

词库中的

  1. 相同的词只留下一个

  2. 删除头包含其他敏感词的敏感词

  但是现有的敏感词库中有8000+ 个词我不可能一个个去找,所以我就想到了利用现有的lua io

文件库对原先的敏感词库进行处理这样可以节省太多的时间 代码如下

local function getNewWord()local wordsDataInput  = {}local wordsDataOutput = {}-- 读取文件-- 以只读方式打开文件local file_input = io.open("sensitive_words_input.txt", "r")-- 设置默认输入文件为 test.luaio.input(file_input)-- 逐行读取文件local string_l = file_input:read("*l") while(string_l ~= nil)dotable.insert(wordsDataInput, string_l)string_l = file_input:read("*l") endio.close(file_input)-- 写入文件-- 以只写方式打开文件local file_output = io.open("sensitive_words.txt", "a")-- 设置默认输出文件为io.output(file_output)-- 对数据进行处理-- 如果有头包含local function ifIsHeadInTable(str)for i = 1, #wordsDataInput dolocal startIndex, endIndex = string.find(wordsDataInput[i], str)if startIndex ~= nil and endIndex ~= nil then-- 如果find到头索引为1,尾索引不为字符串长度则可以认定为是头包含关系if startIndex == 1 and endIndex ~= string.len(wordsDataInput[i]) thenwordsDataInput[i] = "\n"endendend    end -- 是否已经有相同的local function isHasSameInTable(str)if not wordsDataOutput or not next(wordsDataOutput) then return false endfor key, value in ipairs(wordsDataOutput) doif value == str thenreturn trueendendreturn falseend-- 先剔除头包含for key, value in pairs(wordsDataInput) doifIsHeadInTable(value)end-- 再剔除相同的for key, value in ipairs(wordsDataInput) doif not isHasSameInTable(value) thentable.insert(wordsDataOutput, value)endendfor index, word in pairs(wordsDataOutput) doio.write(word.."\n")endio.close(file_output)
end

  操作后的文件少了整整4000个词,差不多35kb,这样加载词库需要的空间和时间都大大减少。但是要注意的是lua对文件的操作都是以UTF-8编码来的,如果是其他编码的文件就不能用了。

转载于:https://www.cnblogs.com/kpxy/p/11256560.html

lua 文件读写处理(操作敏感词库)相关推荐

  1. Android U盘文件读写复制操作

    Android U盘文件读写复制操作 应用开发起因 一.U盘的拔插监听及读取U盘设备 二.读取文件列表 1.U盘文件列表读取 2.Storage文件列表读取 三.通过文件列表进入文件,进行文本文件的读 ...

  2. 网站发帖敏感字java_网站敏感词过滤的实现(附敏感词库)

    现在基本上所有的网站都需要设置敏感词过滤,z似乎已经成了一个网站的标配,如果你的网站没有,或者你没有做相应的处理,那么小心相关部门请你喝茶哦. 最近在调研Java web网站的敏感词过滤的实现,网上找 ...

  3. Matlab的各种数据读取、文件读写等操作汇总

    Matlab的各种数据读取.文件读写等操作汇总 MATLAB提供了多种方式从磁盘读入文件或将数据输入到工作空间,即读取数据,又叫导入数据:将工作空间的变量存储到磁盘文件中称为存写数据,又叫导出数据.至 ...

  4. python怎么保存文件代码_Python文件读写保存操作的实现代码

    本篇文章给大家带来的内容是关于Python文件读写保存操作的实现代码 ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 记录下第一次使用Python读写文件的过程,虽然很简单,第一次实 ...

  5. C++11 文件读写(vs2019 安装配置boost库)

    一.VS2019 安装配置boost库 1.库下载 boost v1.75下载: Boost Downloads boost v1.70下载:Version 1.70.0 本文使用boost v1.7 ...

  6. 敏感词库 php,敏感词过滤的php类库

    简介: class Logic_BlackWord { const APP_FORUM = 1; const APP_BLOG  = 2; const APP_VOTE  = 3; public fu ...

  7. python读取写入文件_Python文件读写保存操作

    记录下第一次使用Python读写文件的过程,虽然很简单,第一次实现其实也有些注意的事项. 单个文件的读操作: 我们先假设一个需求如下: 读取一个test.txt文件 删除指定字符之前的文本 需求明白之 ...

  8. python存文件代码_Python文件读写保存操作的示例代码

    记录下第一次使用Python读写文件的过程,虽然很简单,第一次实现其实也有些注意的事项. 单个文件的读操作: 我们先假设一个需求如下: 读取一个test.txt文件 删除指定字符之前的文本 需求明白之 ...

  9. php返回当前字符串把所有敏感词变红,PHP 实现敏感词 / 停止词 过滤(附敏感词库)...

    敏感词.文字过滤是一个网站必不可少的功能,如何设计一个好的.高效的过滤算法是非常有必要的.在实现敏感词过滤的算法中,我们必须要减少运算,而 DFA 在 DFA 算法中几乎没有什么计算,有的只是状态的转 ...

  10. 文件读写io操作范例

    系统io读写,copy int main(int argc, char **argv) {  if(argc != 3) {   printf("Usage: %s <src> ...

最新文章

  1. Android SDK上手指南:虚拟与物理设备
  2. 027_html框架
  3. 字符串处理(POJ1782)
  4. 《xUnit Test Patterns》学习笔记4 - Principles of Test Automation
  5. 机器学习实践二 -多分类和神经网络
  6. java 动态获取IP地址(城市)
  7. 探讨:ASP.NET技术的学习顺序问题
  8. 《可信计算的研究与发展》;C-Rank:一种Deep Web数据记录可信度评估方法
  9. 关键词广告支付模式的研究
  10. Linux命令老是记不住?一篇文章帮你解决。Linux常用命令汇总
  11. MATLAB下批量修改图片名称
  12. linux分区管理,Linux下磁盘分区管理
  13. Android 7.0 Vold工作流程
  14. 安装 ubuntu 18.04登录界面卡死解决
  15. 高中数学必修一:函数性质图像知识点总结(名师总结)
  16. OpenCV图像拼接-Stitcher类-Stitching detailed使用与参数介绍
  17. linux常用基础命令整理
  18. 自动驾驶测试系列(一):初识自动驾驶 下
  19. 【sop】基于灵敏度分析的有源配电网智能软开关优化配置(Matlab代码实现)
  20. SystemVerilog学习笔记

热门文章

  1. java利用sigar获取电脑cpu 内存 硬盘使用率等信息
  2. 测试注意力的游戏软件,培养孩子专注力,1套测试题+7个小游戏,在家就可以轻松玩!(家长必看)...
  3. win10 Java 环境配置
  4. 【python写一个无限弹窗】
  5. 32位单片机C语言编程 微盘,32位单片机C语言编程:基于PIC32
  6. 监控易:智慧高校一体化综合运维解决方案
  7. 欠拟合、过拟合、优化器
  8. 一文详解C语言关键字
  9. vasp和ms_科学网—小谈CASTEP(Linux), MS-CASTEP, VASP软件区别 - 张召富的博文
  10. C#俄罗斯方块代码完整版带部分注释