DFA有穷自动机敏感词过滤算法

news/2024/11/30 7:37:49/

1.EndType

package com.example.utils.wordfilter;/*** 结束类型定义*/
public enum EndType {/*** 有下一个,结束*/HAS_NEXT, IS_END
}

2.WordType

package com.example.utils.wordfilter;/*** 词汇类型*/
public enum WordType {/*** 黑名单/白名单*/BLACK, WHITE
}

3.FlagIndex

package com.example.utils.wordfilter;import java.util.List;/*** 敏感词标记*/
public class FlagIndex {/*** 标记结果*/private boolean flag;/*** 是否黑名单词汇*/private boolean isWhiteWord;/*** 标记索引*/private List<Integer> index;public boolean isFlag() {return flag;}public void setFlag(boolean flag) {this.flag = flag;}public List<Integer> getIndex() {return index;}public void setIndex(List<Integer> index) {this.index = index;}public boolean isWhiteWord() {return isWhiteWord;}public void setWhiteWord(boolean whiteWord) {isWhiteWord = whiteWord;}
}

4.WordContext

package com.example.utils.wordfilter;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;/*** 词库上下文环境* 初始化敏感词库,将敏感词加入到HashMap中,构建DFA算法模型*/
@SuppressWarnings({"rawtypes", "unchecked"})
public class WordContext {/*** 敏感词字典*/private final Map wordMap = new HashMap();/*** 是否已初始化*/private boolean init;/*** 黑名单列表*/private final String blackList;/*** 白名单列表*/private final String whiteList;public WordContext() {this.blackList = "/blacklist.txt";this.whiteList = "/whitelist.txt";initKeyWord();}public WordContext(String blackList, String whiteList) {this.blackList = blackList;this.whiteList = whiteList;initKeyWord();}/*** 获取初始化的敏感词列表** @return 敏感词列表*/public Map getWordMap() {return wordMap;}/*** 初始化*/private synchronized void initKeyWord() {try {if (!init) {// 将敏感词库加入到HashMap中addWord(readWordFile(blackList), WordType.BLACK);// 将非敏感词库也加入到HashMap中addWord(readWordFile(whiteList), WordType.WHITE);}init = true;} catch (Exception e) {throw new RuntimeException(e);}}/*** 读取敏感词库,将敏感词放入HashSet中,构建一个DFA算法模型:<br>* 中 = { isEnd = 0 国 = {<br>* isEnd = 1 人 = {isEnd = 0 民 = {isEnd = 1} } 男 = { isEnd = 0 人 = { isEnd = 1 }* } } } 五 = { isEnd = 0 星 = { isEnd = 0 红 = { isEnd = 0 旗 = { isEnd = 1 } } } }*/public void addWord(Iterable<String> wordList, WordType wordType) {Map nowMap;Map<String, String> newWorMap;

http://www.ppmy.cn/news/1327374.html

相关文章

clickhouse 代替 es 如何对文档做模糊查询?

概述 模糊查询在日志存储的场景中非常普遍。ClickHouse作为大数据分布式引擎&#xff0c;理所当然地会被作为日志存储的备选方案。事实上使用ClickHouse作为日志存储方案&#xff0c;业界目前也已经在多家企业落地&#xff0c;比如Uber、石墨文档、映客、快手、携程、唯品会等…

C语言:函数指针的使用

在C语言中&#xff0c;函数指针是指向函数的指针变量。它可以存储函数的地址&#xff0c;使得可以通过该指针来调用函数。以下是函数指针的基本概念和用法&#xff1a; 一、基本概念&#xff1a; 声明函数指针&#xff1a; returnType (*pointerName)(parameterTypes); 这里 r…

IDEA在重启springboot项目时没有自动重新build

IDEA在重启springboot项目时没有自动重新build 问题描述 当项目里面某些依赖或者插件更新了&#xff0c;target的class文件没有找到&#xff0c;导致不是我们需要的效果。 只能手动的清理target文件&#xff0c;麻烦得很 &#xff0c; 单体项目还好说&#xff0c;一次清理就…

Go使用记忆化搜索的套路【以20240121力扣每日一题为例】

题目 分析 这道题很明显记忆化搜索&#xff0c;用py很容易写出来 Python class Solution:def splitArray(self, nums: List[int], k: int) -> int:n len(nums)# 寻找分割子数组中和的最小的最大值s [0]for num in nums:s.append(s[-1] num)#print(s)cachedef dfs(cur,…

JS-WebAPIs- Window对象(五)

• BOM(浏览器对象模型) BOM(Browser Object Model ) 是浏览器对象模型 window对象是一个全局对象&#xff0c;也可以说是JavaScript中的顶级对象像document、alert()、console.log()这些都是window的属性&#xff0c;基本BOM的属性和方法都是window的。所有通过var定义在全局…

[通知]rust跟我学八:获取指定目录下的所有文件全路径 已上线

大家好&#xff0c;我是带剑书生&#xff0c;开源库get_local_info的作者。目前我的付费专栏已经上线&#xff0c;用于介绍在实现get_local_info过程中&#xff0c;遇到该问题所使用的解决方法&#xff0c;喜欢的朋友可以去订阅了&#xff0c;19.9元&#xff0c;非常便宜的价格…

10个你不知道的JavaScript技巧,让你的代码更加的优雅!

你成为一名前端开发者时&#xff0c;JavaScript会是你工作中不可或缺的一部分。在开发过程中&#xff0c;你可能会遇到许多棘手的问题&#xff0c;比如性能问题&#xff0c;代码的可读性&#xff0c;代码的复杂性等等。在这篇文章中&#xff0c;我们将介绍10个JavaScript技巧&a…

如何从命令行运行testng.xml?

目录 创建一个新的java项目并从命令行运行testng.xml 使用命令行运行XML文件 从命令行运行现有maven项目的XML文件 在这篇文章中&#xff0c;我们将使用命令行运行testng.xml。有多种场景需要使用命令行工具运行testng.xml。也许您已经创建了一个maven项目&#xff0c;现在想…