[置顶] 【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++实现)
相关文章推荐
- 较高人工智能的人机博弈程序实现(多个算法结合)含C++源码
- 较高人工智能的人机博弈程序实现(多个算法结合)含C++源码
- 设计模式Command的C++实现源码
- 一组实现邮件发送功能的c++封装类(附源码)
- 设计模式builder的C++实现源码
- GoF 23种设模式解析附C++实现源码(k_eckel转自微软高校博客K_eckel's mindview)
- 关于C++类库KYLib: 使用AVLtree实现 map 类模板源码
- 【C++】栈——顺序表实现V1.0(源码提供)
- 【C++】队列——顺序表实现V1.0(源码提供)
- 设计模式singleton的C++实现源码
- stand C++ stack 的实现源码
- 环行缓冲区实现(V0.3) C++源码
- 环行缓冲区的实现(V0.2,C++源码)
- 设计模式flyweight的C++实现源码
- “基于关键字匹配的文本过滤系统”配置文件的设计和实现(C/C++源码)
- 较高人工智能的人机博弈程序实现(多个算法结合)含C++源码
- C++虚函数实现一般化操作内幕分析(源码VC6.0可以直接调试)
- Contourlet变换的C++源码的实现
- 设计模式AbstractFactory的C++实现源码
- 设计模式adapter的C++实现源码