牛客网项目第三章-开发社区核心功能-过滤敏感词

牛客网项目第三章-开发社区核心功能-过滤敏感词
牛客网项目第三章-开发社区核心功能-过滤敏感词_第1张图片
在访问某个网站的时候,在网站上发布一些内容,该网站会对我们发布的内容进行过滤,色情、暴力等非法内容会被隐去,或者把这些词汇更换成*号;发布内容可以看成一串字符串,可以使用API对字符串里面的内容进行替换,例如String中replace();但网站在实际运营过程中,敏感词比较多,有几十甚至上百,输入的字符串也可能过长,使用String性能太差,通常会采用前缀树,来自己生成一个敏感词过滤方法。下节发布帖子可以用到该敏感词过滤方法。

一、前缀树

1.查找效率高,消耗内存大,以空间换时间
2.应用:(1)字符串检索,可以检索到一串字符串中的敏感词
(2)词频统计:可以统计出一篇文章中的哪个词出现的频率最多,热点词
(3)字符串排序:对文章进行排序

二、敏感词过滤器工具

1.定义前缀树
前缀树过滤敏感词的逻辑
2.根据敏感词,初始化前缀树
(1)前缀树根节点为空,除了根节点其余节点只包含一个字符,从根节点到某一个节点就是当前该节点对应的字符串,每个节点的所有自己点包含的字符串不同,相同需要合并
牛客网项目第三章-开发社区核心功能-过滤敏感词_第2张图片
(2)通过前缀树判断输入的字符串有无敏感词
需要三个指针,第一个指针指向根节点,第二个指针指向字符串的第一个字符(标记敏感词的开头),第三个指针指向字符串的第一个字符(标记敏感词的结尾)定义一个变量StringBuilder存放过滤后的字符串
牛客网项目第三章-开发社区核心功能-过滤敏感词_第3张图片

三、编写过滤敏感词的方法

1.首先在resources包下定义存放敏感词的文件sensitive-words.txt
2.在util包下定义敏感词过滤工具类SensitiveFilter,为了复用方便,加注解由容器管理
牛客网项目第三章-开发社区核心功能-过滤敏感词_第4张图片
(1)在SensitiveFilter中定义private修饰的内部类前缀树
牛客网项目第三章-开发社区核心功能-过滤敏感词_第5张图片
(2)根据敏感词初始化前缀树
牛客网项目第三章-开发社区核心功能-过滤敏感词_第6张图片
在这里插入图片描述
牛客网项目第三章-开发社区核心功能-过滤敏感词_第7张图片
(3)定义将敏感词加到前缀树的方法
牛客网项目第三章-开发社区核心功能-过滤敏感词_第8张图片
(4)检索敏感词
牛客网项目第三章-开发社区核心功能-过滤敏感词_第9张图片
(5)在test包下新建一个测试类SensitiveTests
牛客网项目第三章-开发社区核心功能-过滤敏感词_第10张图片
牛客网项目第三章-开发社区核心功能-过滤敏感词_第11张图片

你可能感兴趣的:(java)