Unity中使用的一套敏感词过滤方式
当项目中的敏感词数量不是很多的时候,直接用数组来遍历过滤其实也可以,但是具体的数量有多大,这个肯定不好说,因此,对.txt中的敏感词合理组织后再进行过滤就显得非常有必要了。
如上图,左边是txt中配置的敏感词,右边是需要转换为的数据结构(C#中的Dictory来存储即可)
下面那句话是一个示例,即需要过滤敏感词的句子。
具体的实现代码:
using System;
using System.IO;
using System.Collections;
using UnityEngine;
using Common;
using System.Collections.Generic;
using System.Text; public class FilterSensitiveWords
{
static string[] sensitiveWordsArray = null;
static string fileName = "sensitivewords.u";
static string ReplaceValue = "*";
static Dictionary<char, IList<string>> keyDict; public static void Initialize()
{
string path = "txt/sensitivewords.u";
string name = "sensitivewords";
LoadHelp.LoadAssetBundle(path, name, ar =>
{
string content = ar.Bundle.LoadAsset<TextAsset>(name).text;
if (!(content.Equals("") || content.Equals(null)))
{
sensitiveWordsArray = content.Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries); keyDict = new Dictionary<char, IList<string>>();
foreach (string s in sensitiveWordsArray)
{
if (string.IsNullOrEmpty(s))
continue;
if (keyDict.ContainsKey(s[]))
keyDict[s[]].Add(s.Trim(new char[] { '\r' }));
else
keyDict.Add(s[], new List<string> { s.Trim(new char[] { '\r' }) });
}
}
});
} //判断一个字符串是否包含敏感词,包括含的话将其替换为*
public static bool IsContainSensitiveWords(ref string text, out string SensitiveWords)
{
bool isFind = false;
SensitiveWords = "";
if (null == sensitiveWordsArray || string.IsNullOrEmpty(text))
return isFind; int len = text.Length;
StringBuilder sb = new StringBuilder(len);
bool isOK = true;
for (int i = ; i < len; i++)
{
if (keyDict.ContainsKey(text[i]))
{
foreach (string s in keyDict[text[i]])
{
isOK = true;
int j = i;
foreach (char c in s)
{
if (j >= len || c != text[j++])
{
isOK = false;
break;
}
}
if (isOK)
{
SensitiveWords = s;
isFind = true;
i += s.Length - ;
sb.Append('*', s.Length);
break;
} }
if (!isOK)
sb.Append(text[i]);
}
else
sb.Append(text[i]);
}
if (isFind)
text = sb.ToString(); return isFind;
}
}
Unity中使用的一套敏感词过滤方式的更多相关文章
- java实现敏感词过滤(DFA算法)
小Alan在最近的开发中遇到了敏感词过滤,便去网上查阅了很多敏感词过滤的资料,在这里也和大家分享一下自己的理解. 敏感词过滤应该是不用给大家过多的解释吧?讲白了就是你在项目中输入某些字(比如输入xxo ...
- 用php实现一个敏感词过滤功能
周末空余时间撸了一个敏感词过滤功能,下边记录下实现过程. 敏感词,一方面是你懂的,另一方面是我们自己可能也要过滤一些人身攻击或者广告信息等,具体词库可以google下,有很多. 过滤敏感词,使用简单的 ...
- 浅析敏感词过滤算法(C++)
为了提高查找效率,这里将敏感词用树形结构存储,每个节点有一个map成员,其映射关系为一个string对应一个TreeNode. STL::map是按照operator<比较判断元素是否相同,以及 ...
- Java实现敏感词过滤
敏感词.文字过滤是一个网站必不可少的功能,如何设计一个好的.高效的过滤算法是非常有必要的.前段时间我一个朋友(马上毕业,接触编程不久)要我帮他看一个文字过滤的东西,它说检索效率非常慢.我把它程序拿过来 ...
- 转:鏖战双十一-阿里直播平台面临的技术挑战(webSocket, 敏感词过滤等很不错)
转自:http://www.infoq.com/cn/articles/alibaba-broadcast-platform-technology-challenges 鏖战双十一-阿里直播平台面临的 ...
- java敏感词过滤
敏感词过滤在网站开发必不可少.一般用DFA,这种比较好的算法实现的. 参考链接:http://cmsblogs.com/?p=1031 一个比较好的代码实现: import java.io.IOExc ...
- Java实现敏感词过滤(转)
敏感词.文字过滤是一个网站必不可少的功能,如何设计一个好的.高效的过滤算法是非常有必要的.前段时间我一个朋友(马上毕业,接触编程不久)要我帮他看一个文字过滤的东西,它说检索效率非常慢.我把它程序拿过来 ...
- Jsp敏感词过滤
Jsp敏感词过滤 大部分论坛.网站等,为了方便管理,都进行了关于敏感词的设定. 在多数网站,敏感词一般是指带有敏感政治倾向(或反执政党倾向).暴力倾向.不健康色彩的词或不文明语,也有一些网站根据自身实 ...
- Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类
Java 敏感词过滤,Java 敏感词替换,Java 敏感词工具类 =========================== ©Copyright 蕃薯耀 2017年9月25日 http://www ...
随机推荐
- Spring Security中异常上抛机制及对于转型处理的一些感悟
在使用Spring Security的过程中,我们会发现框架内部按照错误及问题出现的场景,划分出了许许多多的异常,但是在业务调用时一般都会向外抛一个统一的异常出来,为什么要这样做呢,以及对于抛出来的异 ...
- 527D Clique Problem 判断一维线段没有两辆相交的最大线段数量
这题说的是给了n个位置 在x轴上 每个位置有一个权值为wi,然后将|xi - xj|>=wi+wj ,满足这个条件的点建一条边,计算着整张图中有多少多少个点构成的子图,使得这个子图的节点数尽量的 ...
- VS2012快捷键突然不能用怎么办
晚上做项目做着做着,就去弄了下键盘配置,可怜的娃娃~~~一下子弄得什么快捷键都不能用了,比如”注释:ctrl+k ctrl+c”;问题纠结了我一个多钟,好在最后结合了网络上各路英雄的idea;解决了问 ...
- MyBatis学习笔记(五)——实现关联表查询
转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4264440.html 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创 ...
- 2018-2019-2 20165209 《网络对抗技术》Exp3:免杀原理与实践
2018-2019-2 20165209 <网络对抗技术>Exp3:免杀原理与实践 1 免杀原理与实验内容 1.1 免杀原理 一般是对恶意软件做处理,让它不被杀毒软件所检测.也是渗透测试中 ...
- Git本地仓库与远程github同步的时候提示fatal: remote origin already exists 错误解决办法
Git本地仓库与远程github同步的时候提示fatal: remote origin already exists 错误解决办法 1.git在本地的电脑创建了仓库,要远程同步github的仓库.使用 ...
- 让360双核浏览器默认极速模式,避免采用IE模式无法正常访问html5网页的解决办法
让360双核浏览器默认极速模式,避免采用IE模式无法正常访问html5网页的解决办法 用Meta标签代码让360双核浏览器默认极速模式不是兼容模式<meta name="rendere ...
- OpenGL边用边学------2 经典照相机模型
https://blog.csdn.net/smstong/article/details/50290327 实际照相步骤 1 布置场景和调整照相机位置 3 选择镜头对焦Focus 4 按下快门 5 ...
- bzoj5470 / P4578 [FJOI2018]所罗门王的宝藏
P4578 [FJOI2018]所罗门王的宝藏 设第$i$行上的值改变了$r1[i]$,第$j$列上的值改变了$r2[i]$ 显然密码$(i,j,c)=r1[i]+r2[j]$ 对于同一列上的两个密码 ...
- 02: tornado进阶篇
目录:Tornado其他篇 01: tornado基础篇 02: tornado进阶篇 03: 自定义异步非阻塞tornado框架 04: 打开tornado源码剖析处理过程 目录: 1.1 自定制t ...