在Java项目中,设计一个敏感词过滤系统可以通过以下步骤进行:
代码实现
以下是一个简单的敏感词过滤系统的实现:
1. Trie(前缀树)数据结构
import java.util.HashMap;
import java.util.Map;
class TrieNode {
Map<Character, TrieNode> children = new HashMap<>();
boolean isEndOfWord = false;
}
public class SensitiveWordFilter {
private TrieNode root;
public SensitiveWordFilter() {
root = new TrieNode();
}
// 插入敏感词到 Trie 树
public void addSensitiveWord(String word) {
TrieNode currentNode = root;
for (char c : word.toCharArray()) {
currentNode = currentNode.children.computeIfAbsent(c, k -> new TrieNode());
}
currentNode.isEndOfWord = true;
}
// 判断一个字符是否是敏感词的开始字符
public boolean containsSensitiveWord(String text) {
TrieNode currentNode = root;
for (char c : text.toCharArray()) {
currentNode = currentNode.children.get(c);
if (currentNode == null) {
return false;
}
if (currentNode.isEndOfWord) {
return true;
}
}
return false;
}
// 过滤文本中的敏感词
public String filter(String input) {
StringBuilder result = new StringBuilder();
int start = 0;
while (start < input.length()) {
TrieNode currentNode = root;
int end = start;
while (end < input.length() && currentNode.children.containsKey(input.charAt(end))) {
currentNode = currentNode.children.get(input.charAt(end));
end++;
if (currentNode.isEndOfWord) {
break;
}
}
if (end > start) {
result.append("***"); // 如果匹配到敏感词,替换为 ***
start = end; // 跳过已匹配的敏感词
} else {
result.append(input.charAt(start));
start++;
}
}
return result.toString();
}
}
2. 使用敏感词过滤系统
public class Main {
public static void main(String[] args) {
SensitiveWordFilter filter = new SensitiveWordFilter();
// 添加敏感词
filter.addSensitiveWord("敏感词");
filter.addSensitiveWord("禁止");
// 测试过滤功能
String text = "这是一个包含敏感词的文本,需要禁止某些词汇";
// 打印过滤后的文本
String result = filter.filter(text);
System.out.println("过滤后的文本: " + result);
}
}
解释
- children:存储每个字符的子节点。
- isEndOfWord:标记该节点是否是一个敏感词的结尾。
- addSensitiveWord:将敏感词添加到Trie树中。
- containsSensitiveWord:检查输入的文本中是否包含敏感词。
- filter:替换文本中的敏感词为***。
扩展功能
- 灵活性:你可以根据需要扩展为动态加载敏感词,也可以从数据库中加载敏感词。
- 模糊匹配:可以进一步改进,支持模糊匹配,比如支持类似“禁**”这种变种敏感词。
评论前必须登录!
注册