工作四年,关于过滤敏感词,我准备这样干

简介: 工作四年,关于过滤敏感词,我准备这样干

📆 业务场景

提交订单评价时需要对评价内容进行判断,如果出现敏感词则提示修改

🔊这不就是写一个敏感词的校验工具类吗,小问题,说干就干

🖥️业务梳理

  1. 将敏感词存入数据库或者文件中
  2. 读取文件或数据库中敏感词,循环遍历敏感词,判断评价内容中是否包含敏感词,包含则提示报错

📌小技巧

读取文件时不需要每次都读取,用一个静态代码块坐初始化,读取完毕后放入jvm缓存

//敏感词库 通过jvm缓存
    private static final Set<String> sensitiveWords = new HashSet<>();
static {
   
   
    //静态代码块加载敏感词库
    load();
}

📇完整代码

import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 * 敏感词工具类
 * @author woniu
 * 2023-11-09
 */
@Slf4j
public class SensitiveWordUtil {
   
   

    //敏感词库 通过jvm缓存
    private static final Set<String> sensitiveWords = new HashSet<>();

    static {
   
   
        //静态代码块加载敏感词库
        load();
    }

    /**
     * 从敏感文件中逐行读取,加载到敏感词 set中
     */
    public static void load() {
   
   
        if (CollectionUtils.isEmpty(sensitiveWords)) {
   
   
            InputStream in = SensitiveWordUtil.class.getResourceAsStream("/file/word.txt");
            try (BufferedReader reader = new BufferedReader(new InputStreamReader(in));){
   
   
                String line;
                //逐行读取文件
                while ((line = reader.readLine()) != null) {
   
   
                    sensitiveWords.add(line);
                }
            } catch (FileNotFoundException e) {
   
   
                log.error("读取敏感词库文件错误,文件不存在");
                throw new RuntimeException("读取敏感词库文件错误,文件不存在");
            } catch (IOException e) {
   
   
                log.error("读取敏感词库文件错误,io问题");
                throw new RuntimeException("读取敏感词库文件错误,io问题");
            }
        }
    }


    /**
     * 判断传入文本中是否包含敏感词
     * @param word
     * @return
     */
    public static void containsSensitiveWord(String word) {
   
   
        Iterator<String> iterator = sensitiveWords.iterator();
        while (iterator.hasNext()) {
   
   
            String sensitiveWord = iterator.next();
            if (word.contains(sensitiveWord)) {
   
   
                log.error("匹配到敏感词"+sensitiveWord);
                throw new RuntimeException("评价内容不符合规范,请检查");
            }
        }
    }


    public static void main(String[] args) {
   
   

        // boolean aa = containsSensitiveWord("转让");
        // boolean aa1 = containsSensitiveWord("转让");
        // boolean aa2 = containsSensitiveWord("转让");
        // boolean aa3 = containsSensitiveWord("转让");
        // boolean aa4 = containsSensitiveWord("转让");
    }


}

嗯,速度很快,可以下班了

image-20231109174535083

image-20231113113059583

image-20231109174655588

🖊️最后总结

🖲要熟练掌握技巧,一定多多练习:纸上得来终觉浅,绝知此事要躬行

胖奥特曼悠闲躺着

目录
相关文章
|
机器学习/深度学习 算法 Java
JAVA敏感词快速检测、过滤
本文章参考借鉴于https://blog.csdn.net/weixin_45444807/article/details/132249763?ops_request_misc=&request_id=&biz_id=102&utm_term=%E6%95%8F%E6%84%9F%E8%AF%8D%E6%A3%80%E6%B5%8B&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-2-132249763.nonecase&spm=1018.2226.3001.4187
2527 1
|
安全 网络协议 Linux
Linux加强篇010-使用Apache服务部署静态网站
山重水复疑无路,柳暗花明又一村
1072 0
【springboot+easypoi】一行代码搞定简单的word导出
之前写过一篇《一行代码搞定Excel导入导出》,有需要的童鞋可以回头看一下,今天简单说一下怎么一行代码实现简单的word导出。有的童鞋不太同意了,扯淡呢一行代码。
4348 0
|
存储 安全 测试技术
快速教你如何使用postman工具进行接口测试?(配置全局token、JWT可用)
快速教你如何使用postman工具进行接口测试?(配置全局token、JWT可用)
1230 0
|
搜索推荐 UED
敏感词 v0.19.0 新特性之敏感词单个编辑,不必重复初始化
【9月更文挑战第17天】敏感词管理在众多场景中至关重要。敏感词 v0.19.0 推出的新特性——单个编辑,无需重复初始化,显著提升了效率和灵活性,降低了系统负担。用户可直接修改特定敏感词,适用于内容审核平台、社交网络及电商平台等多种场景,确保及时响应变化,提升用户体验。这一特性为敏感词管理带来了重大改进,具有广泛的实用价值。
252 3
|
Java
敏感词过滤
布隆过滤器用来判断一个集合中的是否包含某一个元素,由于采用hash运算,有hash碰撞的原因,所以会存在误判。布隆过滤器判定一个元素存在的情况,这个元素可能不存在,但是判定一个元素不存在的时候,是一定不存在的。
416 0
|
存储 自然语言处理 数据库
Python字典操作实现文章敏感词检索
Python字典操作实现文章敏感词检索
184 1
|
开发框架 Dart 前端开发
Android 跨平台方案对比之Flutter 和 React Native
本文对比了 Flutter 和 React Native 这两个跨平台移动应用开发框架。Flutter 使用 Dart 语言,提供接近原生的性能和丰富的组件库;React Native 则基于 JavaScript,具备庞大的社区支持和灵活性。两者各有优势,选择时需考虑团队技能和项目需求。
895 8
|
数据采集 分布式计算 OLAP
最佳实践:AnalyticDB在企业级大数据分析中的应用案例
【10月更文挑战第22天】在数字化转型的大潮中,企业对数据的依赖程度越来越高。如何高效地处理和分析海量数据,从中提取有价值的洞察,成为企业竞争力的关键。作为阿里云推出的一款实时OLAP数据库服务,AnalyticDB(ADB)凭借其强大的数据处理能力和亚秒级的查询响应时间,已经在多个行业和业务场景中得到了广泛应用。本文将从个人的角度出发,分享多个成功案例,展示AnalyticDB如何助力企业在广告投放效果分析、用户行为追踪、财务报表生成等领域实现高效的数据处理与洞察发现。
1015 0
|
算法 计算机视觉
图像处理之三种常见双立方插值算法
图像处理之三种常见双立方插值算法
235 2