定义节点

import java.util.ArrayList;
import java.util.List;public class Node {private char root;private List<Node> childList;private boolean isLeaf;public Node(char root){this.root=root;childList=new ArrayList<Node>();isLeaf=false;}public Node subNode(char c){if(childList != null){for(Node eachChild : childList){if(eachChild.root == c){return eachChild;}}}return null;}public boolean isLeaf() {return isLeaf;}public void setLeaf(boolean leaf) {isLeaf = leaf;}public void addChild(Node node){this.childList.add(node);}
}

定义字典树


public class WordsTree {private Node head;public WordsTree() {this.head = new Node(' ');//头结点}public void insert(String word) {if(search(word).equals(word)) return;//检测树中是否存在此词Node node = head;for (int i = 0; i < word.length(); i++) {Node child = node.subNode(word.charAt(i));if (child != null) {node = child;} else {node.addChild(new Node(word.charAt(i)));node = node.subNode(word.charAt(i));}}node.setLeaf(true);}public String search(String word) {Node node = this.head;String str = "";for (int i = 0; i < word.length(); i++) {if (node.isLeaf()) return str;//在这添加防止文章中的敏感词汇被空格(可以加其他字符)隔开,无法识别if (word.charAt(i) == ' ') {str += word.charAt(i);continue;}if (node.subNode(word.charAt(i)) == null) return "";node = node.subNode(word.charAt(i));str += word.charAt(i);}if (node.isLeaf() == true) return str;else return "";}public String searchComment(String comment) {String str = "";String comment1 = comment;for (int i = 0; i < comment.length(); i++) {str = this.search(comment.substring(i));if (!str.equals("")) {comment1 = comment1.replaceAll(str, "\\*\\*");}i += str.length();}return comment1;}
}

调用

public class main {public static void main(String[] args){WordsTree tree=new WordsTree();tree.insert("鲤鱼");tree.insert("他家");System.out.println(tree.searchComment("红鲤鱼家有头小绿驴叫李屡屡,绿鲤    鱼家有头小红驴叫吕里里,红鲤1鱼说他家的李屡屡要比绿鲤鱼家的吕里里绿,绿鲤鱼说他家的吕里里要比红鲤鱼家的李屡屡红,是红鲤鱼比绿鲤鱼的驴绿,还是绿鲤鱼比红鲤鱼的驴红。"));}
}

结果:

红**家有头小绿驴叫李屡屡,绿**家有头小红驴叫吕里里,红鲤1鱼说**的李屡屡要比绿**家的吕里里绿,绿**说**的吕里里要比红**家的李屡屡红,是红**比绿**的驴绿,还是绿**比红**的驴红。

可以看出用空格隔开的“鲤鱼”二字仍然被识别出来了,而用“1”隔开的“鲤鱼”二字没有被识别,在网上聊天的时候就是这样识别的,当一些词语无法发送的时候用一些常见字符隔开就可以发送了,“他家”两个字也可以检测出来。

Java过滤敏感词汇算法(字典树)相关推荐

  1. 过滤敏感词汇(trie树实现敏感词过滤)

    1.字符串匹配 (1)暴力解法:采用两个for循环,每次匹配的时间复杂度O(m*n) (2)KMP:时间复杂度O(m+n) n表示字符串的长度,m表示每个灵感词的长度 (3)trie树 字典树/单词查 ...

  2. java实现前缀树--过滤敏感词汇

    一.前缀树简单介绍 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它 ...

  3. 使用数据结构过滤敏感词算法

    前缀树 名称:Tire.字典树.查找树 特点:查找效率高,消耗内存大 应用:字符串检索.词频统计.字符串排序等 敏感词过滤器 定义前缀树 package com.nowcoder.community. ...

  4. python过滤敏感词汇_利用Python正则表达式过滤敏感词的方法

    利用Python正则表达式过滤敏感词的方法 问题描述:很多网站会对用户发帖内容进行一定的检查,并自动把敏感词修改为特定的字符. 技术要点: 1)Python正则表达式模块re的sub()函数: 2)在 ...

  5. 过滤器-过滤敏感词汇

    首先要准备好敏感词库,敏感词汇的格式如下: |1 买枪|2 四大舰队|3 其中1代表禁用词:禁用词将禁止提交,2代表审核次:将以高亮字体显示,3代表过滤词:将替换为****, 过滤器代码实现如下: p ...

  6. flex java 全局拦截_flex + java 过滤敏感词

    过滤敏感词这个相对比较容易做到,网上也很多方法,看得比较多的一个方法就是:把所有的敏感词写入到一个properties文件中,程序启动时拼成一个正则表达式.这个也只是比较基础的敏感词过滤器,比较强大的 ...

  7. 自学Java day53 使用jvav实现 字典树 数据结构 从jvav到架构师

    字典树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:利用字符串的公 ...

  8. JAVA压缩之LZW算法字典压缩与解压

    压缩过程: 前面已经写过一篇哈夫曼压缩,LZW字典压缩与哈夫曼压缩的不同之处在于不需要把编码写入文件,编码表是在读文件中生成的,首先将0-255个ASCLL码与对应的数字存入哈希表中,作为基础码表. ...

  9. python过滤敏感词汇_浅谈Python 敏感词过滤的实现

    一个简单的实现 class NaiveFilter(): '''Filter Messages from keywords very simple filter implementation > ...

最新文章

  1. Active Directory还原工具之三Software Active Directory Recycle Bin PowerPack
  2. python turtle画熊-用Python Turtle 画可爱的熊猫
  3. Nginx之负载均衡
  4. big sur 降级_太阳报:若诺维奇降级,球员将降薪一半
  5. spring集成 JedisCluster 连接 redis3.0 集群
  6. c#和python同一主机直接udp_为什么Python 如此之慢
  7. 电脑怎么打字切换中文_Master of Typing in Chinese for Mac(中文打字大师)
  8. mac文件丢失,苹果电脑有没有好用的恢复软件?
  9. Win10修改EFI分区文件
  10. 算法第四版开发环境的配置
  11. 重装jdk时出错Error: could not open `C:\Program Files\Java\jre6\lib\amd64\jvm.cfg'
  12. 基于校园图书管理系统需求分析
  13. python爬虫之批量下载小说
  14. 暴走英雄坛服务器维护,《暴走英雄坛》4月29日更新公告
  15. 一文搞定 Spring Security 异常处理机制!
  16. CSP 201409-5 拼图问题(给出一个n×m的方格图,现在要用如下L型的积木拼到这个图中......)
  17. Android 8.0 recovery 流程分析
  18. node js+sql 后端分页查询效率越来越低解决方案
  19. 继承 extends
  20. java jtextarea.setfont,Java JTextArea用法

热门文章

  1. 软件工程导论第三章复习总结附思维导图
  2. 单片机驱动LM75采集温度
  3. iOS开发:将新的设备的UDID加入到苹果开发者账号中的步骤
  4. 运算符(一元 二元)
  5. 为什么发动机需要吸入大量的空气?
  6. mysql进阶(十九)SQL语句如何精准查找某一时间段的数据
  7. Bootstrap【第二章】全局CSS之排版代码表格
  8. 微信小程序摄像头监控_微信小程序读取摄像头 微信调用摄像头
  9. python代码图片头像_python图像处理-个性化头像
  10. 如何防止恶意扫码点餐