这个项目本身是一个中文敏感词库,要把它“运行”起来,主要有两种方式:一是把词库文件集成到自己的程序里,二是直接利用项目里自带的敏感词检测服务。我帮你把这两种方式在 Linux 服务器上的操作方法都梳理好了:
首先,在 Linux 服务器上获取项目文件,并切换 dev 分支:
bashgit clone https://github.com/konsheng/Sensitive-lexicon.git
cd Sensitive-lexicon
git checkout dev
如果 git checkout dev 失败,是因为默认克隆下来的是 master 分支,在克隆时加上 -b dev 参数可以直接下载 dev 分支:
bashgit clone -b dev https://github.com/konsheng/Sensitive-lexicon.git
cd Sensitive-lexicon
bashls -l
主要会看到这几个目录:
bashVocabulary/:未经整理的原始词汇库。 Organized/:经过整理的分类词汇库。 ThirdPartyCompatibleFormats/:为第三方平台提供的兼容格式。 cmd/server/:用 Go 语言写的 HTTP 敏感词检测服务。 internal/:服务内部实现逻辑。 Dockerfile / .dockerignore:Docker 镜像构建相关文件。
项目自带了一个用 Go 语言编写的轻量 HTTP 服务,可以用来做敏感词检测。这种方式不需要你自己实现算法,开箱即用。
准备工作:在 Linux 服务器上安装 Go 1.16 或更高版本。可以执行以下命令检查:
bashgo version
如果未安装,可以到 Go 官网 下载对应版本。
具体操作步骤如下:
设置环境变量并编译
在项目根目录下,参考以下命令设置环境变量、下载依赖并编译:
bash# 设置端口和词库目录
export PORT="8080"
export LEXICON_DIR="Vocabulary"
export FUZZY_MAX_DISTANCE="1"
下载 Go 模块依赖并编译可执行文件
bashgo mod tidy go build -o bin/server ./cmd/server
运行服务,编译成功后,运行生成的可执行文件:
bash./bin/server
启动成功后,你会看到类似这样的日志,表示服务在 8080 端口上监听:
textServer started on port 8080
测试服务 健康检查 (GET /health):
bashcurl http://localhost:8080/health
敏感词检测 (POST /detect): 发送一个 JSON 请求来检测文本,其中 enable_fuzzy 参数用于开启模糊匹配:
bashcurl -X POST http://localhost:8080/detect \
-H "Content-Type: application/json" \
-d '{"text": "待检测的文本内容", "enable_fuzzy": true}'
重新加载词库 (POST /reload): 如果词库文件有更新,无需重启服务,发送这个请求即可热加载:
bashcurl -X POST http://localhost:8080/reload
需要注意,Vocabulary 目录里的文件是 .txt 格式,每行一个词,但可能存在一些特殊字符或 BOM(Byte Order Mark)。如果遇到解析问题,可以用 dos2unix、sed 等命令对文件进行预处理。
为了更快速、更优雅地部署,项目提供了 Docker 支持,可以免去配置 Go 环境的麻烦。
确保系统安装了 Docker。可以执行以下命令检查:
bashdocker --version
构建镜像:
bashdocker build -t sensitive-lexicon .
运行容器:
bashdocker run -d -p 18080:8080 -e PORT=8080 -e LEXICON_DIR=Vocabulary sensitive-lexicon
启动后,同样可以通过 http://localhost:18080 来访问服务。
修改 Dockerfile 使用替代镜像 如果修改 Docker 配置不生效,或者你希望快速解决,可以直接修改项目的 Dockerfile,使用一个已经同步好的国内镜像替代。
在项目根目录下找到 Dockerfile 并打开:
bashvim Dockerfile
构建时报错go: github.com/andybalholm/brotli@v1.0.5: Get "https://proxy.golang.org/...": i/o timeout 找到以 FROM gcr.io/distroless/static
开头的行,将其替换为:dockerfileFROM oamdev/gcr.io-distroless-static:nonroot
保存文件后,重新执行 docker build 命令。
这个 oamdev/gcr.io-distroless-static
镜像的功能和原版一致,可以放心使用。location /sensitive/ { # 重写路径:将 /sensitive/detect 转为 /detect rewrite ^/sensitive/(.*)$ /$1 break; proxy_pass http://127.0.0.1:18080; include /etc/nginx/snippets/proxy-common.conf; }