java 屏蔽敏感词-Java是如何实现敏感词过滤的功能的呢?Java
发布时间:2023-06-29 16:08 浏览次数:次 作者:佚名
虽然说网络标榜着言论自由,但言论自由不是放纵,任由个人说一些过于敏感的话语。下面,和大家分享基于Springboot项目java 屏蔽敏感词,Java是如何实现敏感词过滤的功能,想要了解的小伙伴可以阅读一下以下内容。
一、导包
本文的敏感词过滤器用在SpringBoot项目中,因此,首先需要在pom.xml文件中导入如下依赖
org.springframework.boot
spring-boot-starter-aop
org.springframework.boot
spring-boot-starter-thymeleaf
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-devtools
runtime
org.springframework.boot
spring-boot-starter-test
test
org.apache.commons
commons-lang3
3.9
二、敏感词文件
在resources目录下,创建sensitive-word.txt,里面填入需要过滤的敏感词信息。
fcd65dd6ef29c65159578b155f72c644
b9152ed73a4d8e61d3a68a9cd904175c
三、前缀树的实现
前缀树TrieNode以一个空节点为头结点,每个节点下包含若干子节点java 屏蔽敏感词,不同节点代表不同字符。TrieNode 由两部分组成,首先是一个boolean变量,表示该结点是否为一个关键词的终结点。其次是该结点的子节点集合,在本文中,用HashMap存储子节点,key存储结点代表的字符,类型为Character,value为TrieNode,表示子节点。实现的代码如下。
//前缀树
private class TrieNode{
//关键词结束标识
private boolean isKeywordEnd = false;
//子节点
private Map subNodes = new HashMap<>();
//isKeywordEnd的get、set方法
public boolean isKeywordEnd() {
return isKeywordEnd;
}
public void setKeywordEnd(boolean keywordEnd) {
isKeywordEnd = keywordEnd;
}
//添加子节点
public void addSubNode(Character c,TrieNode node){
subNodes.put(c,node);
}
//获取子节点
public TrieNode getSubNode(Character c){
return subNodes.get(c);
}
}
四、敏感词过滤器的实现
@Component
public class SensitiveFilter {
// 替换符
private static final String REPLACEMENT = "***";
//根节点
private TrieNode rootNode = new TrieNode();
//bean的初始化方法,服务一启动,容器自动给bean执行此方法完成初始化
//此方法的目的是读取敏感词文件,构建敏感词前缀树
@PostConstruct
public void init(){
try(
InputStream is = this.getClass().getClassLoader().getResourceAsStream("sensitive-words.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
){
String keyword;
while((keyword=reader.readLine())!=null){
this.addKeyword(keyword);
}
}catch (IOException e){
logger.error("加载敏感词文件失败: " + e.getMessage());
}
}
//将一个敏感词添加到前缀树
private void addKeyword(String keyword){
TrieNode tempNode = rootNode;
for (int i = 0; i 0x9FFF);
}
}
到此这篇关于Java实现敏感词过滤器功能的文章就介绍到这了,更多相关Java实战项目联系的内容,请搜索W3Cschool以前的文章或继续浏览下面的相关文章,也希望大家以后多多支持我们!