敏感词

字典树遍历实现字符串敏感词替换

匿名 (未验证) 提交于 2019-12-03 00:21:02
何为字典树? 字典树(Trie树),又称前缀树,一种Hash树的变种,用于统计,排序和保存大量的 字符串,利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较 利用字典树对大段文字进行搜索,查找敏感词并进行打码替换 将敏感词词库以字符的形式保存到字典树中,例如敏感词词库中包含了“色情”、“赌博”、“暴力”,则需要生成这么一棵树: 其中根节点不对应任何字符,尾部节点进行标记,表示这是一个词的结尾。 删选敏感词时,对大段文字进行遍历,同时在字典树中进行查找匹配,找到文字中的敏感词并将敏感词替换为“***”符号,以下是详细代码 构造字典树 构造方案是构建一个Node类来表示各节点,Node的成员变量是一个保存有各子节点的Map,key为单个字符,value为子节点Node: //字典树节点,其中包含一个Map,该Map保存了所有子节点,key为节点对应的字符 private class TrieNode{ private boolean end = false; private Map<Character, TrieNode> subNodes = new HashMap<>(); private void addSubNode(Character key, TrieNode node){ subNodes.put(key, node); } private

python实现敏感词过滤的几种方法

China☆狼群 提交于 2019-12-02 06:45:32
1.replace过滤 最简单也是最直接的就是直接循环敏感词,然后使用replace过滤关键词,文章和敏感词少的时候还可以,多的时候效率就真的很一般了。 2.使用正则过滤 有两个技术要点, 1.使用Python正则表达式的re的sub()函数; 2.在正则表达式语法中,竖线“|”表示二选一或多选一。 代码参考 import re def check_filter(keywords, text): return re.sub("|".join(keywords), "***", text) keywords = ("暴力", "色情", "其他关键字") text = "这句话里不包含暴力,也不包含色情,但是可能包含其他关键字" print(check_filter(keywords, text)) 返回结果 这句话里不包含***,也不包含***,但是可能包含*** 3.DFA过滤敏感词算法 在网上查了下敏感词过滤方案,找到了一种名为DFA的算法,即Deterministic Finite Automaton算法,翻译成中文就是确定有穷自动机算法。它的基本思想是基于状态转移来检索敏感词,只需要扫描一次待检测文本,就能对所有敏感词进行检测,所以效率比方案一高不少。 假设我们有以下5个敏感词需要检测:傻逼、傻子、傻大个、坏蛋、坏人。那么我们可以先把敏感词中有相同前缀的词组合成一个树形结构

简单实现敏感词过滤功能

↘锁芯ラ 提交于 2019-11-27 05:58:42
现在基本所有的网页都存在敏感词过滤的功能,最近开发项目的时候,需要一个敏感词过滤的功能,参考了很多博客,便对此做了总结和自己的开发代码。 一、构建敏感词库 读取文件数据,并保存到HashMap中,构建一个DFA模型(字典树) public class SensitiveWordInit { public static Map sensitiveWordMap = null; /** * 加载敏感词库 * @return * @throws Exception */ public Set<String> LoadSetitiveWord() throws Exception{ InputStream inputStream = null; InputStreamReader inputStreamReader = null; BufferedReader bufferedReader = null; Set<String> set = new HashSet<String>(); try{ inputStream = getClass().getClassLoader().getResourceAsStream("CensorWords.txt"); inputStreamReader = new InputStreamReader(inputStream,"UTF-8");