lua 文件读写处理(操作敏感词库)
最近需要给游戏做一个敏感词新系统,我采用的方法是比较常用的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.lua
io.input(file_input) -- 逐行读取文件
local string_l = file_input:read("*l")
while(string_l ~= nil)
do
table.insert(wordsDataInput, string_l)
string_l = file_input:read("*l")
end
io.close(file_input) -- 写入文件
-- 以只写方式打开文件
local file_output = io.open("sensitive_words.txt", "a") -- 设置默认输出文件为
io.output(file_output) -- 对数据进行处理
-- 如果有头包含
local function ifIsHeadInTable(str)
for i = 1, #wordsDataInput do
local 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]) then
wordsDataInput[i] = "\n"
end
end
end
end -- 是否已经有相同的
local function isHasSameInTable(str)
if not wordsDataOutput or not next(wordsDataOutput) then return false end for key, value in ipairs(wordsDataOutput) do
if value == str then
return true
end
end return false
end -- 先剔除头包含
for key, value in pairs(wordsDataInput) do
ifIsHeadInTable(value)
end -- 再剔除相同的
for key, value in ipairs(wordsDataInput) do
if not isHasSameInTable(value) then
table.insert(wordsDataOutput, value)
end
end for index, word in pairs(wordsDataOutput) do
io.write(word.."\n")
end
io.close(file_output)
end
操作后的文件少了整整4000个词,差不多35kb,这样加载词库需要的空间和时间都大大减少。但是要注意的是lua对文件的操作都是以UTF-8编码来的,如果是其他编码的文件就不能用了。
lua 文件读写处理(操作敏感词库)的更多相关文章
- unity对敏感词库处理的记录
string txt = Resources.Load<TextAsset>("minganci").ToString(); //string txt = " ...
- lua文件读写
lua里的文件读写模型来自C语言,分为完整模型(和C一样).简单模型. 1.简单模型 io.input([file]) 设置默认的输入文件,file为文件名(此时会以文本读入)或文件句柄(可以理解为 ...
- C++中文件读写的操作
在C++中读读写文件一般指的就是磁盘中的文本文件和二进制文件: 文本文件:以字符序列组成的文件 二进制文件:由二进制组成的文件 读写文件采用ofstream和ifstream文件流,两者可用头文件&l ...
- 文件读写io操作范例
系统io读写,copy int main(int argc, char **argv) { if(argc != 3) { printf("Usage: %s <src> ...
- C语言基础文件读写操作
整理了一份C语言的文件读写件操作代码,测试时打开相应的注释即可. #include <stdio.h> #include <stdlib.h> #include <uni ...
- C/C++文件读写操作总结
本文主要从两方面介绍读写文件操作,一个是C,另一个是C++. 一.基于C的文件操作. 在ANSI C中对文件操作有两种方式,一种是流式文件操作,另一种是I/O文件操作.下面分别介绍. 1.流式文件操作 ...
- Java实现敏感词过滤
敏感词.文字过滤是一个网站必不可少的功能,如何设计一个好的.高效的过滤算法是非常有必要的.前段时间我一个朋友(马上毕业,接触编程不久)要我帮他看一个文字过滤的东西,它说检索效率非常慢.我把它程序拿过来 ...
- 转:鏖战双十一-阿里直播平台面临的技术挑战(webSocket, 敏感词过滤等很不错)
转自:http://www.infoq.com/cn/articles/alibaba-broadcast-platform-technology-challenges 鏖战双十一-阿里直播平台面临的 ...
- Java实现敏感词过滤(转)
敏感词.文字过滤是一个网站必不可少的功能,如何设计一个好的.高效的过滤算法是非常有必要的.前段时间我一个朋友(马上毕业,接触编程不久)要我帮他看一个文字过滤的东西,它说检索效率非常慢.我把它程序拿过来 ...
- Jsp敏感词过滤
Jsp敏感词过滤 大部分论坛.网站等,为了方便管理,都进行了关于敏感词的设定. 在多数网站,敏感词一般是指带有敏感政治倾向(或反执政党倾向).暴力倾向.不健康色彩的词或不文明语,也有一些网站根据自身实 ...
随机推荐
- [Vue warn]: Invalid prop: type check failed for prop "model". Expected Object, got String with value ""
问题描述: [Vue warn]: Invalid prop: type check failed for prop "model". Expected Object, got S ...
- 前端(vue)导出pdf
纯前端导出 pdf 实现方法如下: 1. 安装 html2pdf.jspdf npm install html2canvas jspdf --save 2. 项目 utils 文件夹中新建一个 htm ...
- Phi的反函数
P4780 Phi的反函数 Phi(\(\varphi\) )定义 \(\varphi(n)\) 代表从1-n所有与n互质的数的个数 求\(\varphi(n)\) 普通求法: 首先将n唯一分解为 \ ...
- 【Windows】ip地址修改器v5.0.5.4 修改ip更简便
ip地址修改器v5.0.5.4 修改ip更简便 IP地址修改器,一款能够快速的切换IP地址,在几个不同的固定IP之间进行切换,手动输太麻烦,所以可以用到这款IP地址修改器! 下载 ip地址修改器v5. ...
- 上午小博(java小知识)
使用super来引用父类的成分,使用this来引用当前对象 一个类从另一个类继承,new这个子类的实例的时候,使用super来引用父类对象,this是指当前对象的引用. 当new一个对象出来的时候,这 ...
- Visual Studio 集成了.NET 升级助手插件
.NET团队2023年2月16日在官方博客上发布了名为".NET Upgrade Assistant"的全新 Visual Studio 扩展,帮助开发人员升级.NET 应用程序. ...
- Mockito单元测试 初试
Mockito单元测试相对于Spring Boot 自带的好处理在于,单元测试不需要加载注入Spring Boot 启动项目. 1.需要注入的东西如下,@InjectMocks是注入需要测试的类,@S ...
- GPT接入飞书
GPT接入飞书 在体验ChatGPT这方面,我算是晚的.使用下来,更多的是对于这种应用形式感到兴奋,而不是ChatGPT的专业能力. 得知OpenAI提供GPT3的Api接口后,我想到了将其接入团队飞 ...
- 内网安全之:MS14-068 Kerberos 域用户提权漏洞
内网安全之:MS14-068 Kerberos 域用户提权漏洞 目录 内网安全之:MS14-068 Kerberos 域用户提权漏洞 0 漏洞说明 (MS14-068:CVE-2014-6324) 1 ...
- 都在用 AI 生成美少女,而我却。。。
最近 AI 画画特别的火,你能从网上看到非常多好看的图片,于是我就开始了我的安装之旅,我看到的图是这样的. 这样的. 还有这样的. 然后我就开始了我的 AI 安装生成计划. 安装环境 首先我们需要安装 ...