利用字典树过滤敏感词

过滤敏感词

咳咳,我们做项目哈,都会有要做利用侦听器做过滤敏感词的操作哈,其实呢,我们可以直接用equals方法,直接进行匹配,然后过滤掉,就可以了,但是呢,一个网站,往往有很多很多的信息需要做这样的操作,这样就有点拖了哈,
所以我们这次利用字典树的形式,进行过滤操作

字典树

  • Trie字典树,又称查找树
  • 特点: 查找效率超级高,但是消耗内存大
  • 应用:可以用于字符串检索,词频统计、字符串排序等等。
  • 先来看看是什么样子的吧

在这里插入图片描述

  • 就是这样的哈,一般我们头结点为空哈,
  • 然后每一层的节点是必须不能有相同的节点的
  • 然后每个节点只带有一个字符,

字典树数据结构

private class TrieNode{
   
   

        // 关键词结束的标识
        private boolean isKeywordEnd;

        // 子节点 (key是下级字符, value是下级节点)
        private Map<Character,TrieNode> subNodes = new HashMap<>();

        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);
        }
    }
  • 因为是要写一个过滤敏感词的工具类,所以我们的数据结构就以内部类的形式来表示了
  • 首先有一个标记,表示该节点是不是单词的最后一个字符。
  • 然后用map来封装下级节点,做好 getter 和 setter 即可

有了数据结构,我们就可以进行初始化的操作了

  • 首先我们要搞一个敏感词的文本,每行装一些敏感词
    @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()) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木木不会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值