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

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

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++实现)  


你可能感兴趣的:(c++)