前缀树是N叉树的一种特殊形式,也叫Trie、字典树、查找树。通常来说,一个前缀树是用来存储字符串的。前缀树的每一个节点代表一个 字符串 ( 前缀 )。每一个节点会有多个子节点,通往不同子节点的路径上有着不同的字符。子节点代表的字符串是由节点本身的原始字符串,以及 通往该子节点路径上所有的字符组成的。
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.准备好待处理字符串: 哈哈大王八子大猪蹄子哦 ,声明三个指针,分别指向前缀树的根节点以及待处理字符串的开始字符 3.position指向的字符与根节点的所有子节点进行匹配,不匹配,position 和 begin分别指向待处理字符串的下一个字符,tempNode依旧指向 根节点 4.依旧不匹配,pos...
在后续的搜索过程中,我们设置三个指针,指针1指向树,指针2,3指向字符串,具体流程见代码 1. /**2. * 过滤敏感词 3. * 4. * @param text 待过滤的文本 5. * @return 过滤后的文本 6. */7. public String filter(String text) {8. if (StringUtils.isBlank(text)) {9. return null;10. }11.12....
添加敏感词到前缀树中 注意构造树时如果根节点没有孩子节点,要初始化再添加到哈希表中。 privatevoidaddWord(StringlineTxt){TrieNodetempNode=rootNode;// 循环每个字节for(inti=0;i<lineTxt.length();++i){Characterc=lineTxt.charAt(i);// 过滤空格if(isSymbol(c)){continue;}TrieNodenode=tempNode.get...
一个简单的基于Golang的敏感词过滤算法 package main import ( "fmt" "unicode/utf8") // 敏感词过滤 type Trie struct { child map[rune]*Trie word string } // 插入 func (trie *Trie) insert(word string) *Trie { cur := trie for _, v := range []rune(word) { if _, ok := cur.ch...
敏感词检测 实现敏感词检测都很多种方法,例如暴力、正则、前缀树等。例如一个游戏的文字交流的场景,敏感词会被和谐成 * ,该如何实现呢?首先我们先准备一些敏感词如下: sensitiveWords := []string{"傻逼","傻叉","垃圾","妈的","sb", } 由于文章审核原因敏感词就换成别的了,大家能理解意思就行。
敏感词检测 实现敏感词检测都很多种方法,例如暴力、正则、前缀树等。例如一个游戏的文字交流的场景,敏感词会被和谐成 * ,该如何实现呢?首先我们先准备一些敏感词如下: sensitiveWords := []string{"傻逼","傻叉","垃圾","妈的","sb", } 由于文章审核原因敏感词就换成别的了,大家能理解意思就行。