UGC社区敏感词过滤原理


UGC社区是以用户原创内容为主的移动互联网线上社区,其前身是网页端的bbc论坛。社区型平台每天会产生大量由用户自发形成的内容,有文字、图片、视频等形式,当然现在还有直播等形式的内容,由于用户层次的不同,产生的内容自然就有优劣之分,同时,有人的地方就会有商机,自然不乏广告或者垃圾信息的存在,因此需要对这些东西进行过滤。

传统的方式是使用KMP算法对用户输入的字符串进行敏感词的匹配,然后将敏感词删除或者替换掉。对于内容比较短的字符串可能处理速度不会出现太大的问题,但当内容比较多的时候就会出现时间复杂度非常高的弊端,会严重影响系统的运行。本文介绍了一种当前比较流行的敏感词过滤的算法的原理。


过程:

1.首先根据敏感词构建字典树(每个字符当做一个节点),并在叶子节点做上标记

2.创建三个变量,分别监测Root节点,字符串的首字符,然后构建一个StringBuilder对象。如下图所示:

UGC社区敏感词过滤原理_第1张图片

3.字符串首字符与字典树中的第一层子节点进行匹配,如果变量③所指字符与变量①所指字符不相同,变量③往后推进一位,变量②也往后挪一位,并通过append()加入sb中;

如果变量③所指字符与变量①所指字符字符相同,变量①就指向子节点,变量③继续往后遍历,变量①也指向下一个子节点,当匹配不成功时,如图所示,变量①重新指向root节点,变量③指向匹配不相同时所指向的字符,变量②也指向变量③所指字符,并添加进去sb中;

UGC社区敏感词过滤原理_第2张图片

UGC社区敏感词过滤原理_第3张图片

UGC社区敏感词过滤原理_第4张图片


当匹配成功的时候,而且变量①所指节点是做过标记的叶子节点,则判断变量②跟变量③之间字符串是敏感词,则将这段字符串删除或者用*代替并加入sb中,如图所示:

UGC社区敏感词过滤原理_第5张图片


然后将变量①指向root节点;

依次执行上面的操作,直至字符串中的最后一个字符都添加到了sb中,遍历结束,敏感词过滤完毕,然后将sb输出。

UGC社区敏感词过滤原理_第6张图片



你可能感兴趣的:(java)