本工具主要针对监管部门出具的敏感词表,提供excel到sqlite转换、获取原始词库、内容检查、获取所有检查词、HTTP服务等功能。
使用Golang 1.12.1+开发,基于 sqlite 数据库,因为使用了 cgo,所以暂时不支持交叉编译,在不同的系统上本地编译即可使用。
# window 系统编译
go build -o sword.exe
# linux 系统编译
CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o sword
可以直接下载编译好的工具,点击下载
首先,工具包含一个全局参数 -c
或者 --config
,在使用任何子命令的时候都可以使用这个参数指定配置文件,默认使用当前目录下的 .sword.toml,一般修改这个文件即可。
其次可以使用 --help
可以查看所有命令帮助。
下面分别介绍各项子命令的功能:
监管部门的原始数据是一份特定格式的 excel 文件(,包含多种不同分类的敏感词,每一类敏感词都分为动词、名词、专属名词三类;所以首先,我们需要使用 data
命令生成一个规范化的数据库,本工具默认使用 sqlite 数据库。
配置文件中,和数据库相关的配置为:
[db]
# 驱动类型,目前只支持sqlite
Driver = "sqlite3"
# 生成的数据库文件地址,默认在/data目录
DB = "data/20190403.db"
带上 -e
参数指定原始数据 excel 文件,使用以下命令即可生成数据库,
$sword data -e "data/xxx.xlsx"
数据库生成中...
数据库生成成功 ✔
目前/data目录下已经包含了原始的 excel 文件,和生成好的数据库文件,都是2019年4月3日的,如果有新的原始数据可以自行重新生成;如果没有可以直接略过此命令。
原始数据中敏感词包含动词、名词、专属名词三类,那么实际使用过程中我们需要检查的词的集合应当是:
(动词集合X名词集合)∪专属名词集合
也就是动名词集合的笛卡尔积和专属名词集合的并集,这个词集合的所有词都需要检查,我们叫它所有敏感词集合。
fetch
命令会直接获取这个所有敏感词集合,格式如下:
[
{
"class": "分类",
"word": "词"
},
{
"class": "分类",
"word": "词"
},
...
]
基于所有敏感词集合,本自命令检查文字内容是否包含敏感词,有两种使用方式对应两个参数:
-t
or--content
:直接指定需要检查的文字内容-p
or--path
:指定需要检查的文档路径
如果返回 null 则说明没有敏感词,如果有敏感词则返回以下JSON格式内容:
[
{
"class": "分类",
"word": "词"
},
{
"class": "分类",
"word": "词"
}
...
]
本子命令直接启动一个 HTTP 服务,提供敏感词获取、原始词数据获取、内容检查接口。接口文档请点击查询文档平台。
相关配置内容如下:
[server]
# 是否打开 debug 模式
Debug=true
# 模式
Mode = "release"
# 服务端口
Port = 8777
# 相关参数
DefaultReadTimeOut = 10
DefaultWriteTimeOut = 10
DefaultMaxHeaderBytes = 20
# 日志路径
AccessLog = "logs/access.log"
目前命令执行后 HTTP 服务会直接启动并前台运行阻塞提供服务,可以使用 & or nohup 等后台运行;如果需要部署到正式服务器,请使用 systemd 或 shell 自行处理;并暂时不提供启停命令。后续会继续完善 HTTP 服务启停和部署等方面的功能。