JAVA实现敏感词高亮或打码过滤:sensitive-word

2023-12-14 21:15

本文主要是介绍JAVA实现敏感词高亮或打码过滤:sensitive-word,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

练手项目中实现发表文章时检测文章是否带有敏感词,以及对所有敏感词的一键过滤功能

文章目录

    • 效果预览
    • 实现步骤

效果预览

在这里插入图片描述

随便复制一篇内容到输入框

在这里插入图片描述
机器审核文章存在敏感词,弹消息提示并进入人工审核阶段(若机器审核通过,则无需审核直接发表)

在这里插入图片描述

审核浏览界面,把敏感词库关联到的所有敏感词高亮显示

在这里插入图片描述

再来看看一键打码功能,将文章中的敏感词替换成*

在这里插入图片描述

文章进行打码后就能直接发表通过了

在这里插入图片描述

在这里插入图片描述


实现步骤

有想过使用Elasticsearch实现,不过还要自己搞个敏感词库表感觉有点麻烦,体量较小的项目还是简单点实现吧,过段时间再研究采用Elasticsearch的方案。

所以此处我们引用sensitive-word敏感词工具组件上手

sensitive-word文档

首先Maven 引入依赖

<dependency><groupId>com.github.houbb</groupId><artifactId>sensitive-word</artifactId><version>0.9.0</version>
</dependency>

在工具类文件夹中新建一个MyWordReplace.java来存放我们自定义的替换策略,用来实现敏感词高亮

public class MyWordReplace implements IWordReplace {@Overridepublic void replace(StringBuilder stringBuilder, final char[] rawChars, IWordResult wordResult, IWordContext wordContext) {// 获取敏感词String sensitiveWord = InnerWordCharUtils.getString(rawChars, wordResult);// 自定义不同的敏感词替换策略,可以从数据库等地方读取if("我草".equals(sensitiveWord)) {stringBuilder.append("我测");} else if("傻X".equals(sensitiveWord)) {stringBuilder.append("睿智");} else {// 除了自定义敏感词替换策略,其余在富文本中转成红色高亮显示stringBuilder.append("<span style='color:red'>"+sensitiveWord+"</span>");}}
}

服务层中调用组件方法对传入参数进行敏感词校验和高亮替换

		NoteContent content = note.getContent(); // 获取文本对象内容// 设一个布尔值作为返回值判断文章是否带敏感词boolean flag = false;if (note.getStatus()!= Note.STATE_NORMAL) {if (!SensitiveWordHelper.contains(content.getContent())) {note.setStatus(Note.STATE_RELEASE);}else{// 替换高亮处理过滤后的文本content.setContent(SensitiveWordHelper.replace(content.getContent(), new MyWordReplace()));// 文章有敏感词,flag设为trueflag = true;}}

然后是非常简单的一键打码功能,前端设置一个一键打码的按钮,绑定点击方法如下

// 把文章内容作为参数传给后端,后端处理完返回字符串到前端,替换掉原有文本
const putMosaic = function () {contentMosaic({ content: form.contentStr }).then(res => {form.contentStr = res.dataElMessage.success('一键打码成功')})
}

后端处理直接在控制层实现

    @RequiresLogin@PutMapping("/contentMosaic")public R<String> contentMosaic(@RequestBody NoteContent noteContent) {String content = noteContent.getContent();if (!StringUtils.hasText(content)) {throw new ServiceException("内容为空");}// 直接返回打码替换后的内容return R.ok(SensitiveWordHelper.replace(content));}

完事~


10W的敏感词库还是有点过于敏感了,最好是根据项目要求自定义敏感词库,更多用法还是参考官方文档

在这里插入图片描述

这篇关于JAVA实现敏感词高亮或打码过滤:sensitive-word的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/493893

相关文章

Java中StopWatch的使用示例详解

《Java中StopWatch的使用示例详解》stopWatch是org.springframework.util包下的一个工具类,使用它可直观的输出代码执行耗时,以及执行时间百分比,这篇文章主要介绍... 目录stopWatch 是org.springframework.util 包下的一个工具类,使用它

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

opencv图像处理之指纹验证的实现

《opencv图像处理之指纹验证的实现》本文主要介绍了opencv图像处理之指纹验证的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、简介二、具体案例实现1. 图像显示函数2. 指纹验证函数3. 主函数4、运行结果三、总结一、

SpringIntegration消息路由之Router的条件路由与过滤功能

《SpringIntegration消息路由之Router的条件路由与过滤功能》本文详细介绍了Router的基础概念、条件路由实现、基于消息头的路由、动态路由与路由表、消息过滤与选择性路由以及错误处理... 目录引言一、Router基础概念二、条件路由实现三、基于消息头的路由四、动态路由与路由表五、消息过滤

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

springboot security使用jwt认证方式

《springbootsecurity使用jwt认证方式》:本文主要介绍springbootsecurity使用jwt认证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录前言代码示例依赖定义mapper定义用户信息的实体beansecurity相关的类提供登录接口测试提供一

Spring Boot 3.4.3 基于 Spring WebFlux 实现 SSE 功能(代码示例)

《SpringBoot3.4.3基于SpringWebFlux实现SSE功能(代码示例)》SpringBoot3.4.3结合SpringWebFlux实现SSE功能,为实时数据推送提供... 目录1. SSE 简介1.1 什么是 SSE?1.2 SSE 的优点1.3 适用场景2. Spring WebFlu

基于SpringBoot实现文件秒传功能

《基于SpringBoot实现文件秒传功能》在开发Web应用时,文件上传是一个常见需求,然而,当用户需要上传大文件或相同文件多次时,会造成带宽浪费和服务器存储冗余,此时可以使用文件秒传技术通过识别重复... 目录前言文件秒传原理代码实现1. 创建项目基础结构2. 创建上传存储代码3. 创建Result类4.