您的位置:首页 > 编程语言 > C语言/C++

[置顶] 【C++】实现敏感词过滤算法(含源码)

2017-01-13 11:52 176 查看

敏感词过滤算法(聚合词树查询法)

1.构建词树

2.敏感词判断

3.遍历文本

关于敏感词过滤算法,数不胜数,在参考众多算法后,选取了比较实用的算法,进行总结与改进。大家可以参考一下链接:

敏感词过滤算法实现

发一个高性能的敏感词过滤算法 可以忽略大小写、全半角、简繁体、特殊符号干扰

算法描述:

将所有敏感词库按模块聚合构建成一个词树(所谓聚合,就是将相同字开头的部分进行聚合,以减少对词的查询范围,相当于建立敏感词索引,如:他奶奶的、他妈的、他娘的,这三个词,聚合构建成词树时,“他”字就是这三个词的索引,同时每个词的结尾都有一个结束标志和该词的一些描述,如敏感级别等),然后从头到尾扫描一遍目标文本,当遇到以敏感词树中的索引的字时,查看后面的文本是否构成敏感词(如果这里有以这个敏感词开头的更长的敏感词时,以更长的为匹配结果,并判断该词在文本中前后是否有分隔符来区别其匹配方式),如果是则记录,一遍扫描完之后所有敏感词即被扫描出来了!

1.构建词树

词树整体为多叉树结构,词树节点包含当前位置可能出现的所有字符(字节),以及该字符对应的下一节点地址,节点的高度对应相关敏感词的字节位置,节点的分支数表示该节点的被复用的次数,每个敏感词的都会有一个特殊的结束节点。词树结构可以节省存储空间,提升查询效率。
词库
ab

ab1

ab2

ba

ba1

ba2

词树

a b \r

   1 \r

   2 \r

b a \r

   1 \r

   2 \r

2.敏感词判断

使用递归算法查找词树,找出符合要求的最大长度敏感词

ab

abc

输入abcd,则命中abc

3.遍历文本

从文本的起始位置,以每个字符作为单词的起始字符向后查询,

abc

输入

123abc123,命中abc

敏感词过滤算法(c++实现)  

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: