Hutool--DFA 敏感词工具类

2023-12-19 23:12
文章标签 工具 敏感 hutool dfa

本文主要是介绍Hutool--DFA 敏感词工具类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用hutool的dfa工具类可以很好的帮助我们来实现敏感词过滤的功能,下面从用例入手来逐步地去j简单了解一下dfa工具类。

字典树

DFA算法的核心是建立了以敏感词为基础的许多敏感词树(字典树)。 它的基本思想是基于状态转移来检索敏感词。

字典树,是一种树形结构树形结构,主要用于统计,排序和保存大量的字符串。

主要思想:利用字符串的公共前缀来节约存储空间,很好地利用了串的公共前缀,节约了存储空间,字典树主要包含插入和查找两种操作。

初始化敏感词库

在文本中查找敏感词之前,首先需要一个存放敏感词的词库作为查找标准。

public void initKeyWord() throws IOException {List<String> strings = new ArrayList<>();URL path = ResourceUtil.getResource("txtTemplate/words.txt");File file = FileUtil.file(path);FileReader reader = new FileReader(file);BufferedReader bufferedReader = new BufferedReader(reader);String line = bufferedReader.readLine();while (line != null) {strings.add(line);line = bufferedReader.readLine();}SensitiveUtil.init(strings);}

此段代码通过读取文件中的敏感词来初始化词库,主角自然是SensitiveUtil工具类。此工具类中,有一个棵重要的树:dfa字典树。

private static final WordTree sensitiveTree = new WordTree();public static void init(Collection<String> sensitiveWords) {sensitiveTree.clear();sensitiveTree.addWords(sensitiveWords);}

可以看到是通过WordTree addWords中的添加方法来构建敏感词的字典树的。

ublic WordTree addWord(String word) {final Filter<Character> charFilter = this.charFilter;WordTree parent = null;WordTree current = this;WordTree child;char currentChar = 0;final int length = word.length();for (int i = 0; i < length; i++) {currentChar = word.charAt(i);if (charFilter.accept(currentChar)) {child = current.get(currentChar);if (child == null) {child = new WordTree();current.put(currentChar, child);}parent = current;current = child;}}if (null != parent) {parent.setEnd(currentChar);}return this;}
查找敏感词并替换

对传入的文本进行敏感词查找,并将敏感词替换为相应数量的*

public String replaceKeyWords(String text){List<FoundWord> matchAll = SensitiveUtil.getFoundAllSensitive(text, false, true);if (matchAll.size() > 0) {for (FoundWord match : matchAll) {String str = match.getFoundWord();StringBuilder replace = new StringBuilder();for (int i = 0; i < StrUtil.length(str); i++) {replace.append("*");}text = StrUtil.replace(text, str, replace.toString());}}return text;
}

FoundWord是在工具类中自定义的类,通过getFoundWord()方法可以拿到查找到的单词,详细信息请查阅源码。getFoundAllSensitive方法对敏感词进行查找,返回一个FoundWord集合

public static List<FoundWord> getFoundAllSensitive(String text) {return sensitiveTree.matchAllWords(text);
}

这篇关于Hutool--DFA 敏感词工具类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

JS+HTML实现在线图片水印添加工具

《JS+HTML实现在线图片水印添加工具》在社交媒体和内容创作日益频繁的今天,如何保护原创内容、展示品牌身份成了一个不得不面对的问题,本文将实现一个完全基于HTML+CSS构建的现代化图片水印在线工具... 目录概述功能亮点使用方法技术解析延伸思考运行效果项目源码下载总结概述在社交媒体和内容创作日益频繁的

基于Python打造一个全能文本处理工具

《基于Python打造一个全能文本处理工具》:本文主要介绍一个基于Python+Tkinter开发的全功能本地化文本处理工具,它不仅具备基础的格式转换功能,更集成了中文特色处理等实用功能,有需要的... 目录1. 概述:当文本处理遇上python图形界面2. 功能全景图:六大核心模块解析3.运行效果4. 相

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

Java中使用Hutool进行AES加密解密的方法举例

《Java中使用Hutool进行AES加密解密的方法举例》AES是一种对称加密,所谓对称加密就是加密与解密使用的秘钥是一个,下面:本文主要介绍Java中使用Hutool进行AES加密解密的相关资料... 目录前言一、Hutool简介与引入1.1 Hutool简介1.2 引入Hutool二、AES加密解密基础

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效

基于Python和MoviePy实现照片管理和视频合成工具

《基于Python和MoviePy实现照片管理和视频合成工具》在这篇博客中,我们将详细剖析一个基于Python的图形界面应用程序,该程序使用wxPython构建用户界面,并结合MoviePy、Pill... 目录引言项目概述代码结构分析1. 导入和依赖2. 主类:PhotoManager初始化方法:__in

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark