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

相关文章

Python pyinstaller实现图形化打包工具

《Pythonpyinstaller实现图形化打包工具》:本文主要介绍一个使用PythonPYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的... 目录1.简介2.运行效果3.相关源码1.简介一个使用python PYQT5制作的关于pyinstall

详解Java中的敏感信息处理

《详解Java中的敏感信息处理》平时开发中常常会遇到像用户的手机号、姓名、身份证等敏感信息需要处理,这篇文章主要为大家整理了一些常用的方法,希望对大家有所帮助... 目录前后端传输AES 对称加密RSA 非对称加密混合加密数据库加密MD5 + Salt/SHA + SaltAES 加密平时开发中遇到像用户的

使用Python制作一个PDF批量加密工具

《使用Python制作一个PDF批量加密工具》PDF批量加密‌是一种保护PDF文件安全性的方法,通过为多个PDF文件设置相同的密码,防止未经授权的用户访问这些文件,下面我们来看看如何使用Python制... 目录1.简介2.运行效果3.相关源码1.简介一个python写的PDF批量加密工具。PDF批量加密

使用Java编写一个文件批量重命名工具

《使用Java编写一个文件批量重命名工具》这篇文章主要为大家详细介绍了如何使用Java编写一个文件批量重命名工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录背景处理1. 文件夹检查与遍历2. 批量重命名3. 输出配置代码片段完整代码背景在开发移动应用时,UI设计通常会提供不

Python按条件批量删除TXT文件行工具

《Python按条件批量删除TXT文件行工具》这篇文章主要为大家详细介绍了Python如何实现按条件批量删除TXT文件中行的工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.简介2.运行效果3.相关源码1.简介一个由python编写android的可根据TXT文件按条件批

详解Python中通用工具类与异常处理

《详解Python中通用工具类与异常处理》在Python开发中,编写可重用的工具类和通用的异常处理机制是提高代码质量和开发效率的关键,本文将介绍如何将特定的异常类改写为更通用的ValidationEx... 目录1. 通用异常类:ValidationException2. 通用工具类:Utils3. 示例文

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

超强的截图工具:PixPin

你是否还在为寻找一款功能强大、操作简便的截图工具而烦恼?市面上那么多工具,常常让人无从选择。今天,想给大家安利一款神器——PixPin,一款真正解放双手的截图工具。 想象一下,你只需要按下快捷键就能轻松完成多种截图任务,还能快速编辑、标注甚至保存多种格式的图片。这款工具能满足这些需求吗? PixPin不仅支持全屏、窗口、区域截图等基础功能,它还可以进行延时截图,让你捕捉到每个关键画面。不仅如此

PR曲线——一个更敏感的性能评估工具

在不均衡数据集的情况下,精确率-召回率(Precision-Recall, PR)曲线是一种非常有用的工具,因为它提供了比传统的ROC曲线更准确的性能评估。以下是PR曲线在不均衡数据情况下的一些作用: 关注少数类:在不均衡数据集中,少数类的样本数量远少于多数类。PR曲线通过关注少数类(通常是正类)的性能来弥补这一点,因为它直接评估模型在识别正类方面的能力。 精确率与召回率的平衡:精确率(Pr