sensitive-word java 如何实现一个敏感词工具?违禁词实现思路梳理
拓展阅读
开源地址
为了便于大家学习,项目开源地址如下,欢迎 fork+star 鼓励一下老马~
敏感词
我们只要是涉及到用户可以自由发表言论的网站,或者说收集对应的信息。
都会涉及到用户的输入词敏感问题。
敏感类别
类似于直接给敏感词打一个标签。(label)
- 内容安全
内容暴露个人信息。
身份证,密码,手机号。银行卡号。
用户名,出生年月,家庭住址。年龄。
-
暴力色情
-
反动违法
-
广告推广垃圾信息
微信(公众号,等等)
地址,网址。
-
流言蜚语(造谣)
-
诈骗
-
其他
最好可以对敏感词进行分类。
敏感词的来源
-
内置常见的网站和开源项目词典
-
用户自定义
api 设计
FindAll, Validate, Filter and Replace words.
是否包含
valid() 是否合法,这个和是否包含敏感词恰恰相反。
contains() 是否包含敏感词
findAll() 发现所有
findFirst() 发现第一个
返回的信息
可以是 (start, end, word, label)
也可以指定只返回 word,
filter
filter(“xxx”) 默认直接移除
filter(“xxx”, “*”) 全部使用指定的词语代替
不指定和指定字符串只是一种过滤策略的默认形式。
filter(“xxx”, FilterStrategy) 默认的替换策略。
拼音策略
直接使用拼音替代
这种功能应该放在拓展模块,引入特定的拓展包。不作为核心必须功能。
噪音模式
这里可以用【停顿词】替换,默认使用停顿词。
当然也可以用户自定义停顿词,进行文本信息的降噪处理。
比如:
你这个坏x人
我们如果认为 x
是噪音,就可以直接忽略这个词,进而将【坏人】合成一个新的词汇。
递归处理
如果一句话,替换以后也可能出现敏感词,这个就可以使用递归模式处理。
比如:
坏坏人人
坏人
直接移除,剩下的还是 坏人
,所以如果直接使用移除策略,是比较麻烦的。
ps: 直接使用 DFA 算法试试。
相关优化
文件处理
将所有的敏感词直接处理为单个文件。(如果未作分类的话)
尽量西分开:
(1)广告
(2)停顿词等等
便于后期处理。
停顿词
停顿词的引入。
大小写,全角半角
忽略英文大小写
繁简体
忽略繁简体。(拓展)
直接将所有内容转换为统一的简体处理。
拼音
所有敏感词的拼音引入(拓展)
拼音首字母,或者任何一个变为拼音(或者首字母)
翻转
直接进行全拼的翻转。这里针对:
(1)政治类
(2)色情暴力类
提升级别。
提升准确率
可以考虑引入单词的频率。
相关技术
DFA 算法
【停止维护】使用DFA算法实现的内容安全,反垃圾,智能鉴黄,敏感词过滤,不良信息检测,文本校验,敏感词检测,包括关键词提取,过滤html标签等。
使用DFA算法实现的敏感词过滤。主要用于实现数据文本的内容安全,反垃圾,智能鉴黄,敏感词过滤,不良信息检测,携带文本的关键词获取。
-
过滤SQL脚本
-
过滤script标签
-
过滤html标签
以上非法攻击类暂时不做优先处理。
-
过滤中文字符
-
过滤英文字符
-
过滤数字
-
过滤字母
-
过滤汉字
-
自定义过滤,可由后台自动删除添加。提供完善的API。
具体通过实现DFA算法实现对敏感词、广告词的过滤功能:
1、匹配大小写过滤
2、匹配全角半角过滤
3、匹配过滤停顿词过滤。
支持如下类型类型过滤检测:
fuck 全小写
FuCk 大小写
fuck全角半角
f!!!u&c ###k 停顿词
fffuuuucccckkk 重复词
AC 自动机
AC自动机
Trie 树
提升性能。
又称单词查找树,trie树,是一种树形结构,是一种哈希树的变种。
典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。
它的优点是:
利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。
关于trie树详细信息请自行baidu
其他框架-拓展功能
pinyin 转换框架
全角半角之间的转换。
拓展阅读
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!