美文网首页unity3D技术分享
Unity/C# FastCheck方式敏感词过滤 及单元测试

Unity/C# FastCheck方式敏感词过滤 及单元测试

作者: 人生玩家Eli | 来源:发表于2021-04-08 18:43 被阅读0次

说明

参考自: NewbieGameCoder/IllegalWordsDetection: 提供高效率的较简单的Unity3d手游客户端的敏感词检测的算法,能应付大部分敏感词过滤需求 (github.com)
我的实现:https://github.com/Csymaet/IllegalWordsDetection
使用了FastCheck的过滤方式,思路非常巧妙,效率也比较高。
原项目使用了指针,因为对指针不熟,所以我不用指针重构了一遍

  • 代码变动较大
  • 逻辑做了些优化,但大体思路是一致的
  • 可读性更好一点
  • 而且写了单元测试

效率上比原项目快点(这让我怀疑我写得是不是有bug, 我没用指针居然更快一点???)

核心

遍历要检测的字符串,而不是遍历屏蔽字,屏蔽字可能有成千上万个,而要检测的字符串通常最多只有几十个字。

思路

变量声明:
text: 要检测的字符串
badWord: 敏感词
curChar: 遍历text时,当前遍历到的字符
curCharIndex: 当前遍历到的字符索引

检测是否存在badWords

  1. 先把text转换成小写,然后去掉里面没有意义的字符,如"!@#$"。
  2. 从前往后,遍历text的每一个字符,直到有一个字符是某个badWord的首字符为止。
  3. 此时curChar是某个badWord的首字符,那就继续检测下一个字符是不是某个badWord的第二个字符,以此类推。
  4. 如果第curCharIndex+i个字符是某个badWord的第i+1个字符,同时也是某个badWord的尾字符,就从curCharIndex截取到curCharIndex+i,看看它是不是badWord,如果是,则说明存在badWord。

将字符串中的敏感词替换为*号的思路和上面说的大同小异,只是遇到敏感词时不返回,而是将位置记录下来,不再赘述。

结果

过滤这样一段话1000次,敏感词为5000个,大概花费50毫秒左右

过滤结果.png

单元测试(写单元测试还是很有用的!帮我发现了一些问题)

单元测试.png

有兴趣的还可以看下这个项目ToolGood.Words,看上去非常强大。

水平有限,欢迎批评和建议。

相关文章

  • Unity/C# FastCheck方式敏感词过滤 及单元测试

    说明 参考自: NewbieGameCoder/IllegalWordsDetection: 提供高效率的较简单的...

  • 敏感词过滤算法(2)

    去年写过一篇文章,名字叫做《敏感词过滤算法》,介绍了为什么需要敏感词过滤算法?以及使用什么方式来实现的。其中提到三...

  • 敏感词过滤

    一、原句处理 1.去除原句中的所有空格2.去除原句子中的所有标点符号,包含全角和半角的3.将所有的繁体中文替换成简...

  • go实现敏感词过滤

    敏感词过滤,提前将敏感词设置好,然后每次有新句子都要过滤一遍,若存在敏感词,则用*号代替,代码如下

  • 关于评论功能的总结

    作为前端,相对敏感词,我更应该注意对发布内容过滤,js脚本和html标签如何过滤 敏感词的过滤应当是过滤服务器➕人...

  • iOS 敏感词过滤 (OC与Swift版本都有)

    iOS 敏感词过滤:用*代替敏感词 实现效果举例: 敏感词为 : 123 “哈哈123456哈哈123呵呵” 被转...

  • python实现敏感词过滤的几种方法

    1.replace过滤 最简单也是最直接的就是直接循环敏感词,然后使用replace过滤关键词,文章和敏感词少的时...

  • C# 敏感词过滤方案(Trie Tree实现)

    1、Trie Tree Trie Tree(字典树),一种常见的树形结构,由于其利用字符串的公共前缀极大程度上减少...

  • java过滤敏感词!

    课程设计做了个博客系统,为了对评论进行敏感词过滤,所以去看了下DFA 在Java中实现敏感词过滤的关键就是DFA算...

  • 敏感词过滤问题

    互联网公司通常需要对手机或者社交软件发送的信息进行敏感词过滤,用户发送的信息一般是100多个字,但总量特别大,一周...

网友评论

    本文标题:Unity/C# FastCheck方式敏感词过滤 及单元测试

    本文链接:https://www.haomeiwen.com/subject/bwvvkltx.html