敏感词过滤是一种在网站、应用程序或平台中实现内容审查的技术,用于阻止用户发布包含不适当、非法或不符合政策的内容。我们在实际的网站运营过程中,往往需要担心某些用户发布的内容中包含敏感词汇,这些词汇往往会导致我们的网站被用户举报,甚至被服务器运营商封禁、被相关部门约谈、罚款等。为了防止这种情况发生,我们需要对敏感词汇进行过滤。
敏感词过滤的实现涉及多个步骤,既包括技术实现,也包括策略制定。以下以安企CMS的敏感词过滤设计为例,展开说明。
定义敏感词库
敏感词库的构成,一般包含涉及SE情的、涉及政治的、涉及FAN动暴力的、涉及广告法的词汇。根据我们网站的不同定义,可以收集集中一部分获取全部的词汇。一般我们可以从网上下载或手动收集这些词汇。
在敏感词库的收集方面,安企CMS设计成了手动收集+系统同步双模式。默认系统没有敏感词,可以选择从官网同步官网预设好的敏感词库,也可以手动添加自定义的敏感词。
敏感词过滤的算法设计
针对日常的企业网站,我们不必要采用上下文分析、语义分析等 AI 算法。为了简便起见,我们可以使用最常见,也是最简单是的关键词匹配算法,为了更大的适应规则,我们还可以增加使用正则匹配类的模糊匹配算法来实现。
安企CMS 采用的就是关键词匹配 + 正则模糊匹配双模式进行处理。具体的替换代码如下:
具体代码是 GoLang 代码,因为 安企CMS 是 Go 语言开发,因此代码以 Go 语言为例。
func ReplaceSensitiveWords(content []byte, sensitiveWords []string) []byte {
// 如果敏感词库为空,或内容为空,直接返回
if len(sensitiveWords) == 0 || len(content) == 0 {
return content
}
// 顶一个结构体,用于存储替换结果
type replaceType struct {
Key []byte
Value []byte
}
var replacedMatch []*replaceType
numCount := 0
//忽略所有html标签的属性,这是为了防止将标签属性替换成为*,导致页面出错
reg, _ := regexp.Compile("(?i)<!?/?[a-z0-9-]+(\\s+[^>]+)?>"