1. 常用方案关键词匹配 (Keyword Matching)使用预定义的敏感词库,匹配并屏蔽关键词.适合速度快、关键词固定的场景.示例场景:暴力、色情、政治敏感等词汇过滤.正则表达式 (Regex Filtering)处理变体、隐晦或故意混淆的词汇.示例场景:脏话、拼音变种、带特殊符号的敏感词.NLP 模型检测 (NLP Model Filtering)使用预训练模型检测更复杂的上下文敏感内容.示例场景:煽动性言论、歧视、极端情绪等.黑白名单机制黑名单:拦截指定的违规词汇.白名单:允许特定场景下的敏感词(如“武器”在游戏领域合法).2. 性能优化由于敏感词检测通常属于高频操作,以下措施可提升性能
将敏感词构建成 Trie 树,支持快速前缀匹配,效率高于循环或 includes().
Trie 树示例
class TrieNode {
children: Record
isEndOfWord = false;
}
class Trie {
root: TrieNode;
constructor() {
this.root = new TrieNode();
}
insert(word: string) {
let node = this.root;
for (const char of word) {
if (!node.children[char]) {
node.children[char] = new TrieNode();
}
node = node.children[char];
}
node.isEndOfWord = true;
}
search(text: string): boolean {
let node = this.root;
for (const char of text) {
if (node.children[char]) {
node = node.children[char];
if (node.isEndOfWord) return true;
} else {
node = this.root;
}
}
return false;
}
}
// 示例
const trie = new Trie();
['赌博', '暴力'].forEach(word => trie.insert(word));
console.log(trie.search("这是一段包含赌博的信息")); // true
console.log(trie.search("这是一段安全的信息")); // false
缓存优化
使用 Redis 缓存已处理的文本,避免重复扫描.对于高频短句可采用 LRU 缓存.批量检测
将多条消息合并后批量检测,减少 API 调用次数.示例:将用户多次发送的内容合并成一条再检测.异步并行处理
使用 Promise.all() 提高多条内容的检测效率.3. Trie 树Trie 树是一种专门处理字符串检索的数据结构,适用于快速查找、自动补全、敏感词过滤等场景
性能优化批量构建 Trie 树:避免逐个插入,减少 I/O 开销.Trie + Redis 缓存:将 Trie 树转换为 JSON 格式存储,利用 Redis 提升查询速度.文本预处理:统一转小写、去除空格/标点,降低匹配失败率.