当前位置: 主页 > JAVA语言

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以前的文章或继续浏览下面的相关文章,也希望大家以后多多支持我们!