2.构建前缀树的方法 代码语言:javascript 复制 publicvoidaddSensitiveWord(String words){TreeNode tempNode=rootNode;for(int i=0;i<words.length();i++){Character c=words.charAt(i);if(!isSymbol(c)){continue;}TreeNode node=tempNode.getSubNode(c);if(node==null){node=newTreeNode();tempNode....
我们先定义一颗前缀树,在程序开始阶段创建前缀树对敏感词进行保存,便于后续的查找 1. // 前缀树 2. private class TrieNode {3.4. // 关键词结束标识5. private boolean isKeywordEnd = false;6.7. // 子节点(key是下级字符,value是下级节点)8. private Map<Character, TrieNode> subNodes = new HashMap<...
1.首先建立个敏感词前缀树 根节点为空 2.准备好待处理字符串: 哈哈大王八子大猪蹄子哦 ,声明三个指针,分别指向前缀树的根节点以及待处理字符串的开始字符 3.position指向的字符与根节点的所有子节点进行匹配,不匹配,position 和 begin分别指向待处理字符串的下一个字符,tempNode依旧指向 根节点 4.依旧不匹配,pos...
小结:添加敏感词字符节点存在不添加返回存在的节点,不存在添加新字符节点并返回新添节点,当敏感词的所有字符都添加完毕后,让最后一个节点,End=true,存储一个完整的敏感词。 匹配敏感词 将待匹配的内容转换成[]rune类型,然后遍历寻找前缀树种第一个匹对的前缀节点,然后从后一个位置继续,直到完整匹配到了敏感词,将...
过滤敏感词 设置了三个指针帮助判断。 如果字符是空格类型,并且是根节点情况,直接添加字符,移动begin,pos指针,temp不变。相当于直接跳过再接着寻找。非根节点则只用移动pos指针。因为非根节点情况相当于已经再寻找敏感词的过程中了,只需要跳过该空格继续寻找即可。
敏感词检测 实现敏感词检测都很多种方法,例如暴力、正则、前缀树等。例如一个游戏的文字交流的场景,敏感词会被和谐成 * ,该如何实现呢?首先我们先准备一些敏感词如下: sensitiveWords := []string{"傻逼","傻叉","垃圾","妈的","sb", } 由于文章审核原因敏感词就换成别的了,大家能理解意思就行。