站点图标 高效码农

中文敏感词库终极指南:5分钟搞定审核难题,你的敏感词过滤该升级了!

中文敏感词库指南:把“敏感词过滤”这件事讲清楚

读完这篇文章,你将知道:

  • 什么是敏感词库,它为什么重要
  • 如何 5 分钟把 Sensitive-lexicon 集成到自己的项目
  • 怎样避免踩坑:法律、语境、维护更新
  • 常见疑问 15 问(FAQ)

1 为什么会有“敏感词库”?

“敏感词”不是新鲜词。我们在论坛、聊天室、APP 评论区里,经常能看到“**”或“[内容已隐藏]”。
背后就是一套“敏感词过滤”机制:程序先把文本拆开,再跟一份“黑名单”比对,发现命中就处理。

Sensitive-lexicon 就是这份黑名单的开源版本。它把“政治、色情、暴力”等常见敏感领域的词汇整理成一份纯文本文件,方便开发者直接拿来用,也欢迎社区一起维护。


2 Sensitive-lexicon 是什么?一张图看懂

维度 说明
名称 Sensitive-lexicon
语言 中文
类型 纯文本词库
覆盖领域 政治、色情、暴力等
更新频率 持续更新
开源协议 MIT License
获取方式 GitHub 克隆或下载

3 快速上手:3 步把词库放进你的代码

3.1 下载仓库

git clone https://github.com/Konsheng/Sensitive-lexicon.git
cd Sensitive-lexicon

文件夹里能看到:

  • sensitive-lexicon.txt —— 主词库
  • Vocabulary/ —— 细分目录,方便按需取用

3.2 选一条匹配算法

词库只是“原料”,真正过滤要靠算法。下面 3 种最常用:

算法 思路 适用场景
DFA(确定性有限自动机) 把词库变成状态机,扫描一次文本即可 高并发、需要毫秒级响应
Trie 树 把词库变成前缀树,省内存 内存敏感型服务
正则表达式 一行代码就能跑 脚本、小工具、原型验证

举个 Python 小例子(Trie 树):

import json, os

# 1. 读词库
with open('sensitive-lexicon.txt', encoding='utf-8') as f:
    words = [line.strip() for line in f if line.strip()]

# 2. 构建 Trie
trie = {}
for w in words:
    node = trie
    for ch in w:
        node = node.setdefault(ch, {})
    node['#'] = True  # 结束标记

# 3. 过滤函数
def filter(text):
    i, n = 0, len(text)
    out = []
    while i < n:
        node, j = trie, i
        while j < n and text[j] in node:
            node = node[text[j]]
            if '#' in node:          # 命中敏感词
                out.append('*'*(j-i+1))
                i = j + 1
                break
            j += 1
        else:
            out.append(text[i])
            i += 1
    return ''.join(out)

print(filter("这是一段测试文字"))

3.3 验证效果

把一段包含敏感词的文本丢进去,看输出是不是被替换成了“*”。
如果结果不对,回到词库检查拼写或长度,再对比算法逻辑即可。


4 如何把项目越做越大?——贡献词汇的正确姿势

Sensitive-lexicon 是社区驱动项目,任何人都能提 Issue 或 Pull Request。
提交流程

  1. Fork 仓库
  2. Vocabulary/ 新建或修改词条(纯文本,一行一词)
  3. 写清来源:微博、新闻、聊天截图……方便审核
  4. 提交 PR,等待维护者合并

提示:

  • 不要一次性提交上万条,分批更容易 review
  • 如果拿不准,先发 Issue 讨论

5 常见疑问 15 问(FAQ)

提问 回答
1. 这个词库有多全? 覆盖数万条,但不可能 100% 完整,需要结合业务补充。
2. 更新频率? 社区有 commit 就更新,平均每月数次。
3. 商用收费吗? 完全免费,MIT 协议可商用。
4. 可以直接用于生产吗? 可以,但建议二次审核,避免误杀。
5. 如何区分色情与医学词汇? 词库只给列表,语境判断靠业务逻辑。
6. 会不会侵犯隐私? 词库本身不含用户数据。
7. 支持多语言吗? 目前仅中文。
8. 文件编码? UTF-8 无 BOM。
9. 有 API 吗? 没有,需自己读文件。
10. 如何测试性能? 用 wrk、ab 等压测工具,关注 QPS 与内存占用。
11. 误杀怎么办? 建立白名单,或在匹配后加人工复核。
12. 有图形界面吗? 无,需自己开发。
13. 如何回滚? Git 版本控制,随时 checkout 旧版本。
14. 支持 Docker? 无官方镜像,但可自己写 Dockerfile。
15. 如何联系维护者? GitHub Issue 或 Discussion。

6 进阶:把词库做成服务

如果你不想每次重启进程就重新加载词库,可以做成独立服务:

  1. 把词库放进 Redis
  2. 写一个 HTTP API(Flask、Spring Boot 任选)
  3. 前端调用 POST /filter,返回过滤后的文本

这样多个业务线共用一份词库,更新只需改 Redis 即可。


7 法律与伦理:红线在哪里?

  • 遵守当地法律
    不同地区对敏感内容的定义差异很大,上线前请让法务把关。
  • 尊重语境
    “乳房”在医学文章里是正常词,在弹幕里可能被滥用。
  • 保留日志
    过滤命中记录要脱敏存储,方便后续审计。

8 一张思维导图总结

graph TD
    A[敏感词库] --> B[获取]
    A --> C[使用]
    A --> D[维护]
    B --> B1[GitHub 克隆]
    C --> C1[DFA/Trie/正则]
    C --> C2[独立服务]
    D --> D1[提交 PR]
    D --> D2[建立白名单]

9 结语

敏感词过滤不是“一劳永逸”的工程,而是一场与语境、文化、法律共同演进的长期合作。
Sensitive-lexicon 提供了一把“瑞士军刀”,真正的功夫在于你如何用好它:

  • 选对算法,性能不拖后腿
  • 结合业务,避免误杀
  • 遵守规则,守住底线

祝你用得顺利。如果遇到问题,回到 GitHub 提 Issue,社区永远欢迎多一双眼睛。

退出移动版