feat(cool): 添加敏感词过滤功能
- 引入 go-sensitive-word 敏感词过滤库 - 在全局初始化中加载敏感词库并配置过滤器 - 在创建玩家时应用敏感词过滤,替换不合适的昵称内容
This commit is contained in:
@@ -3,11 +3,13 @@ package cool
|
||||
import (
|
||||
"blazing/common/utils"
|
||||
"context"
|
||||
"log"
|
||||
"reflect"
|
||||
|
||||
"github.com/gogf/gf/v2/os/glog"
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
"github.com/yitter/idgenerator-go/idgen"
|
||||
sensitive "github.com/zmexing/go-sensitive-word"
|
||||
)
|
||||
|
||||
var ctx = context.TODO()
|
||||
@@ -17,6 +19,7 @@ var (
|
||||
|
||||
Loger = glog.New()
|
||||
)
|
||||
var Filter *sensitive.Manager
|
||||
|
||||
func init() {
|
||||
// 创建 IdGeneratorOptions 对象,可在构造函数中输入 WorkerId:
|
||||
@@ -33,5 +36,45 @@ func init() {
|
||||
idgen.SetIdGenerator(options)
|
||||
newId := idgen.NextId()
|
||||
glog.Debug(context.Background(), "初始化雪花算法", newId)
|
||||
Filter, err := sensitive.NewFilter(
|
||||
sensitive.StoreOption{Type: sensitive.StoreMemory}, // 基于内存
|
||||
sensitive.FilterOption{Type: sensitive.FilterDfa}, // 基于DFA算法
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
log.Fatalf("敏感词服务启动失败, err:%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 加载敏感词库
|
||||
err = Filter.LoadDictEmbed(
|
||||
sensitive.DictCovid19,
|
||||
sensitive.DictOther,
|
||||
sensitive.DictReactionary,
|
||||
sensitive.DictViolence,
|
||||
sensitive.DictPeopleLife,
|
||||
sensitive.DictPornography,
|
||||
sensitive.DictAdditional,
|
||||
sensitive.DictCorruption,
|
||||
sensitive.DictTemporaryTencent,
|
||||
)
|
||||
if err != nil {
|
||||
log.Fatalf("加载词库发生了错误, err:%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 动态添加自定义敏感词
|
||||
err = Filter.Store.AddWord("李世民", "秦始皇")
|
||||
if err != nil {
|
||||
log.Fatalf("添加敏感词发生了错误, err:%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 动态自定义敏感词白名单
|
||||
err = Filter.Store.DelWord("武汉海鲜市场", "武汉")
|
||||
if err != nil {
|
||||
log.Fatalf("删除敏感词发生了错误, err:%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
28
common/utils/go-sensitive-word-1.3.3/.github/workflows/go.yml
vendored
Normal file
28
common/utils/go-sensitive-word-1.3.3/.github/workflows/go.yml
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
# This workflow will build a golang project
|
||||
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go
|
||||
|
||||
name: Go
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "main" ]
|
||||
pull_request:
|
||||
branches: [ "main" ]
|
||||
|
||||
jobs:
|
||||
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: '1.21'
|
||||
|
||||
- name: Build
|
||||
run: go build -v ./...
|
||||
|
||||
# - name: Test
|
||||
# run: go test -v ./...
|
||||
22
common/utils/go-sensitive-word-1.3.3/.gitignore
vendored
Normal file
22
common/utils/go-sensitive-word-1.3.3/.gitignore
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
# Binaries for programs and plugins
|
||||
*.exe
|
||||
*.exe~
|
||||
*.dll
|
||||
*.so
|
||||
*.dylib
|
||||
|
||||
# Test binary, built with `go test -c`
|
||||
*.test
|
||||
|
||||
# Output of the go coverage tool, specifically when used with LiteIDE
|
||||
*.out
|
||||
|
||||
# Dependency directories (remove the comment below to include it)
|
||||
vendor/
|
||||
|
||||
# Edit Dir
|
||||
.idea
|
||||
.project
|
||||
.DS_Store
|
||||
.vscode
|
||||
.fleet
|
||||
179
common/utils/go-sensitive-word-1.3.3/README.md
Normal file
179
common/utils/go-sensitive-word-1.3.3/README.md
Normal file
@@ -0,0 +1,179 @@
|
||||
# go-sensitive-word
|
||||
|
||||
敏感词(敏感词/违禁词/违法词/脏词)检测工具,基于 DFA 算法实现的高性能 Go 敏感词过滤工具框架。
|
||||
|
||||
## 快速接入
|
||||
|
||||
**安装**
|
||||
```bash
|
||||
go get -u github.com/zmexing/go-sensitive-word@latest
|
||||
```
|
||||
|
||||
**使用**
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
sensitive "github.com/zmexing/go-sensitive-word"
|
||||
"log"
|
||||
)
|
||||
|
||||
func main() {
|
||||
filter, err := sensitive.NewFilter(
|
||||
sensitive.StoreOption{Type: sensitive.StoreMemory}, // 基于内存
|
||||
sensitive.FilterOption{Type: sensitive.FilterDfa}, // 基于DFA算法
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
log.Fatalf("敏感词服务启动失败, err:%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 加载敏感词库
|
||||
err = filter.LoadDictEmbed(
|
||||
sensitive.DictCovid19,
|
||||
sensitive.DictOther,
|
||||
sensitive.DictReactionary,
|
||||
sensitive.DictViolence,
|
||||
sensitive.DictPeopleLife,
|
||||
sensitive.DictPornography,
|
||||
sensitive.DictAdditional,
|
||||
sensitive.DictCorruption,
|
||||
sensitive.DictTemporaryTencent,
|
||||
)
|
||||
if err != nil {
|
||||
log.Fatalf("加载词库发生了错误, err:%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 动态添加自定义敏感词
|
||||
err = filter.Store.AddWord("李世民", "秦始皇")
|
||||
if err != nil {
|
||||
log.Fatalf("添加敏感词发生了错误, err:%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 动态自定义敏感词白名单
|
||||
err = filter.Store.DelWord("武汉海鲜市场", "武汉")
|
||||
if err != nil {
|
||||
log.Fatalf("删除敏感词发生了错误, err:%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
sensitiveText := "李世民和老祖秦始皇的是忘年交,他们两个相约一起去武汉海鲜市场玩耍"
|
||||
|
||||
// 是否有敏感词
|
||||
res1 := filter.IsSensitive(sensitiveText)
|
||||
fmt.Printf("res1: %v \n", res1)
|
||||
|
||||
// 找到一个敏感词
|
||||
res2 := filter.FindOne(sensitiveText)
|
||||
fmt.Printf("res2: %v \n", res2)
|
||||
|
||||
// 找到所有敏感词
|
||||
res3 := filter.FindAll(sensitiveText)
|
||||
fmt.Printf("res3: %v \n", res3)
|
||||
|
||||
// 找到所有敏感词及出现次数
|
||||
res4 := filter.FindAllCount(sensitiveText)
|
||||
fmt.Printf("res4: %v \n", res4)
|
||||
|
||||
// 和谐敏感词
|
||||
res5 := filter.Replace(sensitiveText, '*')
|
||||
fmt.Printf("res5: %v \n", res5)
|
||||
|
||||
// 过滤铭感词
|
||||
res6 := filter.Remove(sensitiveText)
|
||||
fmt.Printf("res6: %v \n", res6)
|
||||
}
|
||||
|
||||
|
||||
// 输出结果
|
||||
// res1: true
|
||||
// res2: 李世民
|
||||
// res3: [李世民 秦始皇]
|
||||
// res4: map[李世民:1 秦始皇:1]
|
||||
// res5: ***和老祖***的是忘年交,他们两个相约一起去武汉海鲜市场玩耍
|
||||
// res6: 和老祖的是忘年交,他们两个相约一起去武汉海鲜市场玩耍
|
||||
```
|
||||
|
||||
### 支持的功能API
|
||||
|
||||
| 方法名 | 说明 |
|
||||
| ---------------- | -------------- |
|
||||
| `IsSensitive()` | 判断文本中是否存在敏感词 |
|
||||
| `FindOne()` | 查找文本中的第一个敏感词 |
|
||||
| `FindAll()` | 查找文本中所有敏感词(去重) |
|
||||
| `FindAllCount()` | 查找所有敏感词及其出现次数 |
|
||||
| `Replace()` | 替换所有敏感词为指定字符 |
|
||||
| `Remove()` | 从文本中删除所有敏感词 |
|
||||
| `AddWord()` | 动态添加敏感词 |
|
||||
| `DelWord()` | 动态删除敏感词 |
|
||||
|
||||
|
||||
## 更多特性
|
||||
|
||||
### 字符串检测
|
||||
|
||||
```go
|
||||
// HasEmail 判断字符串中是否存在邮箱地址
|
||||
func HasEmail(s string) bool
|
||||
|
||||
// MaskEmail 将字符串中存在的邮箱地址替换成 "*"
|
||||
func MaskEmail(s string) string
|
||||
|
||||
// HasURL 判断字符串中是否存在网址
|
||||
func HasURL(s string) bool
|
||||
|
||||
// MaskURL 将字符串中存在的网址替换成 "*"
|
||||
func MaskURL(s string) string
|
||||
|
||||
// HasDigit 判断字符串中是否存在指定个数的数字(大于等于该数字)
|
||||
func HasDigit(s string, count int) bool
|
||||
|
||||
// MaskDigit 将字符串中存在的数字替换成 "*"
|
||||
func MaskDigit(s string) string
|
||||
|
||||
// HasWechatID 判断字符串中是否存在微信号
|
||||
func HasWechatID(s string) bool
|
||||
|
||||
// MaskWechatID 将字符串中存在的微信号替换成 "*"
|
||||
func MaskWechatID(s string) string
|
||||
```
|
||||
|
||||
## 常见问题
|
||||
|
||||
- [Unicode相似字符攻击](./docs/unicode.md)
|
||||
- [零宽字符攻击](docs/zero-width.md)
|
||||
|
||||
## 参考资料
|
||||
- 基于Java DFA实现的敏感词过滤:https://github.com/houbb/sensitive-word
|
||||
- unicode字词的神奇组合:https://www.zhihu.com/question/30873035
|
||||
- unicode违规技巧:https://zhuanlan.zhihu.com/p/545309061
|
||||
- unicode视觉欺骗:https://zhuanlan.zhihu.com/p/611904676
|
||||
- unicode字符列表:https://symbl.cc/en/unicode-table
|
||||
- 汉字结构描述字符:https://zh.wikipedia.org/wiki/%E8%A1%A8%E6%84%8F%E6%96%87%E5%AD%97%E6%8F%8F%E8%BF%B0%E5%AD%97%E7%AC%A6
|
||||
- 敏感词库:https://github.com/konsheng/Sensitive-lexicon
|
||||
|
||||
## 声明
|
||||
|
||||
本项目包含了一些敏感词库,其设计目的是为了解决在互联网环境中可能出现的不适当内容,通过技术手段屏蔽这些敏感词,旨在构建一个更健康、更安全的网络空间。
|
||||
|
||||
请注意以下几点:
|
||||
|
||||
1. **项目目的**:
|
||||
- 本项目的初衷是为开发者提供一个工具,帮助他们在各类互联网产品中过滤和屏蔽不适当或敏感的内容,从而营造一个良好的网络生态环境。
|
||||
|
||||
2. **使用限制**:
|
||||
- 本项目中的敏感词库仅供技术研究和实现内容过滤功能之用。
|
||||
- 任何个人或组织不得将本项目中的敏感词库用于传播、分享或其他任何可能导致敏感信息扩散的行为。
|
||||
|
||||
3. **责任声明**:
|
||||
- 使用本项目所产生的任何直接或间接后果,均由使用者自行承担。本项目开发者不对因不当使用造成的任何损失或法律后果负责。
|
||||
|
||||
4. **使用规范**:
|
||||
- 请确保在使用本项目时遵守相关法律法规。
|
||||
- 禁止将本项目用于任何违法或不正当的用途。
|
||||
|
||||
通过下载和使用本项目,即表示您同意并接受上述声明的所有内容。希望本项目能够为您在构建净化网络空间的过程中提供帮助。我们鼓励所有开发者共同努力,营造一个健康、安全的网络环境。
|
||||
BIN
common/utils/go-sensitive-word-1.3.3/docs/assets/dfa-mingan.png
Normal file
BIN
common/utils/go-sensitive-word-1.3.3/docs/assets/dfa-mingan.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 9.1 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
111
common/utils/go-sensitive-word-1.3.3/docs/benchmar.md
Normal file
111
common/utils/go-sensitive-word-1.3.3/docs/benchmar.md
Normal file
@@ -0,0 +1,111 @@
|
||||
# 性能压测
|
||||
|
||||
**硬件环境**
|
||||
- 处理器:Apple M2
|
||||
- 基带:内存:16 GB 类型:LPDDR5
|
||||
- 系统类型:MacOS Ventura 版本13.5 (22G74)
|
||||
|
||||
**压测结果**
|
||||
|
||||
| 方法 | Go耗时 | Java耗时 | 备注 |
|
||||
|---|-------------------|--------------------|------------------|
|
||||
| IsSensitive | 267 ns,约 452W QPS | 2724 ns,约 200W QPS | 大约是Java性能的 10 倍 |
|
||||
| Replace | 587 ns,约 202W QPS | 2865 ns,约 200W QPS | 大约是Java性能的 4.8 倍 |
|
||||
|
||||
## 压测代码
|
||||
|
||||
**Go**
|
||||
|
||||
```go
|
||||
func BenchmarkReplace(b *testing.B) {
|
||||
filter := NewFilter(
|
||||
StoreOption{Type: StoreMemory},
|
||||
FilterOption{Type: FilterDfa},
|
||||
)
|
||||
|
||||
err := filter.Store.LoadDictPath("./text/dict2.txt")
|
||||
if err != nil {
|
||||
log.Fatalf("加载词库发生了错误, err:%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
err = filter.Store.AddWord("测试1", "测试2")
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
sensitiveText := "小明微笑着对毒品销售说,我认为台湾国的人有点意思"
|
||||
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
_ = filter.Replace(sensitiveText, '*')
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Java**
|
||||
|
||||
```java
|
||||
package com.github.houbb.sensitive.word.benchmark;
|
||||
|
||||
import com.github.houbb.heaven.util.util.RandomUtil;
|
||||
import com.github.houbb.sensitive.word.bs.SensitiveWordBs;
|
||||
import com.github.houbb.sensitive.word.core.SensitiveWordHelper;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
@Ignore
|
||||
public class BenchmarkTimesTest {
|
||||
|
||||
@Test
|
||||
public void onlyContainsTest() {
|
||||
SensitiveWordBs sensitiveWordBs = SensitiveWordBs.newInstance()
|
||||
.enableWordCheck(true)
|
||||
.enableNumCheck(false)
|
||||
.enableUrlCheck(false)
|
||||
.enableEmailCheck(false)
|
||||
.ignoreRepeat(false)
|
||||
.ignoreCase(false)
|
||||
.ignoreNumStyle(false)
|
||||
.ignoreChineseStyle(false)
|
||||
.ignoreEnglishStyle(false)
|
||||
.ignoreWidth(false)
|
||||
.init();
|
||||
|
||||
String randomText = "小明微笑着对毒品销售说,我认为台湾国的人有点意思";
|
||||
|
||||
long start = System.nanoTime();
|
||||
for(int i = 0; i < 2000000; i++) {
|
||||
sensitiveWordBs.contains(randomText);
|
||||
}
|
||||
long end = System.nanoTime();
|
||||
System.out.println("------------------ COST: " + (end-start)/2000000);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onlyReplaceTest() {
|
||||
SensitiveWordBs sensitiveWordBs = SensitiveWordBs.newInstance()
|
||||
.enableWordCheck(true)
|
||||
.enableNumCheck(false)
|
||||
.enableUrlCheck(false)
|
||||
.enableEmailCheck(false)
|
||||
.ignoreRepeat(false)
|
||||
.ignoreCase(false)
|
||||
.ignoreNumStyle(false)
|
||||
.ignoreChineseStyle(false)
|
||||
.ignoreEnglishStyle(false)
|
||||
.ignoreWidth(false)
|
||||
.init();
|
||||
|
||||
String randomText = "小明微笑着对毒品销售说,我认为台湾国的人有点意思";
|
||||
|
||||
long start = System.nanoTime();
|
||||
for(int i = 0; i < 2000000; i++) {
|
||||
sensitiveWordBs.replace(randomText);
|
||||
}
|
||||
long end = System.nanoTime();
|
||||
System.out.println("------------------ COST: " + (end-start)/2000000);
|
||||
}
|
||||
}
|
||||
```
|
||||
151
common/utils/go-sensitive-word-1.3.3/docs/dfa.md
Normal file
151
common/utils/go-sensitive-word-1.3.3/docs/dfa.md
Normal file
@@ -0,0 +1,151 @@
|
||||
# DFA 算法实现敏感词过滤(基于 Trie 的实现)
|
||||
敏感词过滤是许多应用中必不可少的功能,用于防止敏感或不当内容的出现。本文档介绍基于 Trie(前缀树)的敏感词过滤实现(借鉴 DFA 思想),包括构建流程、匹配逻辑、示意图、实现细节与注意点。文档贴合已有 Go 语言代码实现,包含行为细节、边界说明以及与 Aho-Corasick 算法的比较,便于开发者正确使用和扩展。
|
||||
|
||||
## 基本思想
|
||||
- Trie/DFA 思想的多模式匹配:将敏感词逐字符插入到树中(以 rune 为边),匹配时从文本的每个起点开始沿树向下扫描,检测是否存在敏感词。
|
||||
- 与 Aho-Corasick 的区别:
|
||||
- Aho-Corasick 在 Trie 的基础上增加 **failure 链**,实现整体文本的线性扫描,复杂度 O(n + totalPatternLength)。
|
||||
- 本实现采用 **逐起点尝试匹配** 的方式,最坏情况下复杂度可能达到 O(n × m)(n 为文本长度,m 为敏感词最大长度)。
|
||||
- 优点:逻辑直观,实现简单,插入与查询容易理解。
|
||||
- 适用场景:中小规模敏感词过滤;大规模场景建议优化为 Aho-Corasick。
|
||||
|
||||
## 组成部分
|
||||
- 敏感词库存储(Store):保存所有敏感词,可从文件、数据库或远程接口加载;提供添加、删除功能。
|
||||
- DFA 模型(Filter):用 Trie 结构存储敏感词并完成匹配与处理;每个节点用 `children map[rune]*dfaNode` 表示子节点,用 `isLeaf` bool 标记词尾。
|
||||
|
||||
## 数据结构
|
||||
```go
|
||||
type dfaNode struct {
|
||||
children map[rune]*dfaNode
|
||||
isLeaf bool
|
||||
}
|
||||
|
||||
type DfaModel struct {
|
||||
root *dfaNode
|
||||
}
|
||||
```
|
||||
- children map[rune]*dfaNode:以字符为边,存储当前节点的所有子节点。
|
||||
- isLeaf bool:标记从 root 到当前节点的路径是否构成一个完整敏感词。
|
||||
- root:空前缀状态,所有匹配从这里开始。
|
||||
|
||||
⚠️ 注意:相同字符在不同父路径下会对应不同 dfaNode 实例(路径唯一决定节点),不会全局复用。
|
||||
|
||||
## 构建过程(AddWord / AddWords)
|
||||
- **初始化**:创建根节点 `root`(非叶子)。
|
||||
- **插入流程**:
|
||||
1. 将敏感词转换为 []rune(支持多字节字符,如中文、emoji)。
|
||||
2. 从 root 出发:
|
||||
- 若当前字符已存在子节点,沿该节点前进;
|
||||
- 否则新建子节点并连接。
|
||||
3. 遍历结束后,将最后节点标记为 isLeaf = true。
|
||||
- **批量添加**:对多个词重复该过程(共享前缀的词会复用节点)。
|
||||
- **时间与空间复杂度**:
|
||||
- 时间:O(L)(L 为词长)。
|
||||
- 空间:新增节点数约等于新增字符数,共享前缀可节省空间;总空间与所有词字符总数相关。
|
||||
|
||||
## 节点树示意图
|
||||
### 简单示例
|
||||
敏感词:"敏感词"、"敏锐"、"铭记"
|
||||
```mermaid
|
||||
graph TD
|
||||
Root((root))
|
||||
Root --> 敏["敏"]
|
||||
Root --> 铭["铭"]
|
||||
敏 --> 感["感"]
|
||||
感 --> 词["词 (isLeaf)"]
|
||||
敏 --> 锐["锐 (isLeaf)"]
|
||||
铭 --> 记["记 (isLeaf)"]
|
||||
```
|
||||
说明:每条路径 root -> ... -> (isLeaf) 表示一个敏感词。相同字符在不同路径下对应不同节点实例。
|
||||
|
||||
### 复杂示例
|
||||
敏感词:"台海国"、"台海独立"、"台海总统"、"台海帝国"、"台界帝国"
|
||||
```mermaid
|
||||
graph TD
|
||||
Root((root))
|
||||
Root --> 台["台"]
|
||||
|
||||
台 --> 海["海"]
|
||||
海 --> 海国["国 (isLeaf)"]
|
||||
海 --> 海独["独"]
|
||||
海独 --> 海独立["立 (isLeaf)"]
|
||||
海 --> 海总["总"]
|
||||
海总 --> 海总统["统 (isLeaf)"]
|
||||
海 --> 海帝["帝"]
|
||||
海帝 --> 海帝国["国 (isLeaf)"]
|
||||
|
||||
台 --> 界["界"]
|
||||
界 --> 界帝["帝"]
|
||||
界帝 --> 界帝国["国 (isLeaf)"]
|
||||
```
|
||||
要点:`国` 虽然是同一字符,但在 Trie 中依赖父节点而存在多个不同节点实例(并非全局唯一)。
|
||||
|
||||
## 匹配逻辑
|
||||
**总体思路**:按文本中的每个起点 start 向下沿 Trie 尝试匹配,若在某位置遇到 isLeaf 则记录匹配;若在某字符处无法继续匹配,则把起点向右滑动一个位置重试(即 start++)。从文本的第一个字符开始,根据字符在 Trie 中的转移,逐步遍历整个文本。如果当前字符找不到对应的转移,则回到根节点重新开始匹配下一个字符。如果匹配到叶子节点,则表示找到了一个敏感词,记录下该敏感词并继续匹配。当匹配完成整个文本后,返回所有匹配到的敏感词列表。
|
||||
|
||||
### 核心变量
|
||||
- runes:输入文本转为 []rune
|
||||
- start:当前起点索引
|
||||
- pos:当前扫描位置
|
||||
- parent:Trie 中当前节点(起点时为 root)
|
||||
- now:当前字符对应的子节点
|
||||
|
||||
### 搜索伪代码(以 FindAll 为例)
|
||||
```go
|
||||
start := 0
|
||||
parent := root
|
||||
for pos := 0; pos < length; pos++ {
|
||||
now, found = parent.children[runes[pos]]
|
||||
if !found {
|
||||
// 当前路径没有继续,重置为新的起点
|
||||
parent = root
|
||||
pos = start // 重置 pos 为 start(注意:后续循环会再自动 pos++)
|
||||
start++
|
||||
continue
|
||||
}
|
||||
|
||||
// 找到子节点
|
||||
if now.isLeaf && start <= pos {
|
||||
// 在 [start, pos] 区间上匹配到一个完整敏感词
|
||||
record match runes[start: pos + 1]
|
||||
}
|
||||
|
||||
if pos == length - 1 {
|
||||
// 到达文本末尾,重置以便从下一个起点开始
|
||||
parent = root
|
||||
pos = start
|
||||
start++
|
||||
continue
|
||||
}
|
||||
|
||||
// 继续沿 Trie 向下匹配
|
||||
parent = now
|
||||
}
|
||||
```
|
||||
控制流要点:未找到匹配时,parent 重置为 root,并将 pos = start, start++;下一轮循环 pos++ 正好移动到下一个起点。整体效果:对每个起点尽可能延长匹配,失败则向后滑动一位。
|
||||
|
||||
### 匹配复杂度
|
||||
- 本实现最坏时间复杂度:O(n × m)(n 文本长度,m 敏感词最大长度)。
|
||||
- 若需要严格线性时间,可扩展为 Aho-Corasick 的 failure-link。
|
||||
|
||||
## 示例:FindAll 执行过程
|
||||
敏感词:"敏锐", "敏感词", "铭记"
|
||||
|
||||
文本:"我们要铭记敏锐的观察和敏感词出现"
|
||||
- 从 "铭" 开始匹配到 "铭记"
|
||||
- 继续扫描,匹配到 "敏锐"
|
||||
- 再次匹配到 "敏感词"
|
||||
- 返回结果:"铭记", "敏锐", "敏感词"(顺序可能随实现而异)
|
||||
|
||||
## 复杂度分析
|
||||
- 构建(AddWord):
|
||||
- 时间:O(L)
|
||||
- 空间:与总词长相关(共享前缀节省空间)
|
||||
- 匹配(FindAll 等):
|
||||
- 最坏:O(n × m)
|
||||
- Aho-Corasick:O(n + totalPatternLength)
|
||||
|
||||
## 总结
|
||||
- 本实现基于 Trie 的 DFA 思想,逻辑清晰、易于理解和实现。
|
||||
- 缺点:匹配效率在大规模词库时不如 Aho-Corasick。
|
||||
- 扩展建议:添加 failure 链以优化性能;支持更多字符类型和动态词库更新。
|
||||
164
common/utils/go-sensitive-word-1.3.3/docs/unicode.md
Normal file
164
common/utils/go-sensitive-word-1.3.3/docs/unicode.md
Normal file
@@ -0,0 +1,164 @@
|
||||
# Unicode相似字符攻击
|
||||
|
||||
## 攻击原理
|
||||
|
||||
Unicode 相似字符攻击是一种利用 Unicode 字符集中存在的字符相似性来绕过文本过滤或识别系统的攻击手段。攻击者通过使用看似相同但实际上具有不同 Unicode 编码的字符来欺骗系统,以达到绕过过滤器或识别系统的目的。这种攻击可以用于欺诈、钓鱼、恶意代码注入等各种恶意活动中。
|
||||
|
||||
**原理:**
|
||||
|
||||
1. **Unicode 字符集的复杂性**:Unicode 字符集非常庞大,包含了数千个字符,其中很多字符在外观上看起来非常相似或者完全一样,但实际上它们的 Unicode 编码是不同的。这种复杂性使得攻击者可以利用这些相似字符来绕过文本过滤或识别系统的检测。
|
||||
2. **字符规范化的差异**:Unicode 规范定义了多种字符规范化形式,比如 NFC、NFD、NFKC、NFKD 等,它们会对字符进行不同程度的归一化处理。攻击者可以利用不同的字符规范化形式来生成看似相同但实际上具有不同 Unicode 编码的字符。
|
||||
|
||||
**外形一致不同点位文字演示**
|
||||
|
||||
例如下面两个 [“金”](https://symbl.cc/en/unicode-table/#cjk-compatibility-ideographs) 和 [“⾦”](https://symbl.cc/en/unicode-table/#cjk-radicals-supplement) 字的比较,虽然肉眼看起来外形一致,但是再 unicode 中确是不同的点位。
|
||||
|
||||

|
||||

|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"unicode/utf8"
|
||||
)
|
||||
func main() {
|
||||
s := "金"
|
||||
r, _ := utf8.DecodeRuneInString(s)
|
||||
fmt.Printf("Unicode 十六进制格式码点编码:%U\n", r)
|
||||
|
||||
s2 := "⾦"
|
||||
r2, _ := utf8.DecodeRuneInString(s2)
|
||||
fmt.Printf("s2 Unicode 十六进制格式码点编码:%U\n", r2)
|
||||
}
|
||||
|
||||
// 输出内容
|
||||
// Unicode 十六进制格式码点编码:U+F90A
|
||||
// s2 Unicode 十六进制格式码点编码:U+2FA6
|
||||
```
|
||||
|
||||
**UTF-8中文字符Unicode码点范围**
|
||||
|
||||
Unicode CJK 的范围分布在多个区段中,带有 CJK 的区块名中都拥有汉字。但最常用的范围是 `U+4E00~U+9FA5`,即名为:CJK Unified Ideographs 的区块,但 U+9FA6~U+9FFF 之间的字符还属于空码,暂时还未定义,但不能保证以后不会被定义。
|
||||
包括来自中文、日文、韩文、越南文、壮文、琉球文中的汉字,还包括越南的喃字与儒字、方块壮字,未来还包括甲骨文、金文、简帛文、陶文、鸟虫书等。
|
||||
|
||||
- 注1:中文范围 4E00-9FBF:CJK 统一表意符号 (CJK Unified Ideographs)
|
||||
- 注2:正则表达式[\u4e00-\u9fa5] 可匹配中文字符,但这种方式并不能根据平台所提供的字符集范围不同而改变。
|
||||
- 注3:Unicode 中 U+4E00~U+9FFF 的码表:http://www.unicode.org/charts/PDF/U4E00.pdf
|
||||
|
||||
**汉字Unicode编码范围**
|
||||
|
||||
对于不属于 `U+4E00~U+9FA5` 范围的字符,则是需要我们防止unicode相似字符攻击思考的地方。
|
||||
|
||||
| **字符集中文名** | **字数** | **Unicode 编码** |
|
||||
|-------------------------------------------------------------------------| -------- | ---------------- |
|
||||
| [基本汉字](https://www.qqxiuzi.cn/zh/hanzi-unicode-bianma.php?zfj=jbhz) | 20902字 | 4E00-9FA5 |
|
||||
| [基本汉字补充](https://www.qqxiuzi.cn/zh/hanzi-unicode-bianma.php?zfj=jbhzbc) | 90字 | 9FA6-9FFF |
|
||||
| [扩展A](https://www.qqxiuzi.cn/zh/hanzi-unicode-bianma.php?zfj=kza) | 6592字 | 3400-4DBF |
|
||||
| [扩展B](https://www.qqxiuzi.cn/zh/hanzi-unicode-bianma.php?zfj=kzb) | 42720字 | 20000-2A6DF |
|
||||
| [扩展C](https://www.qqxiuzi.cn/zh/hanzi-unicode-bianma.php?zfj=kzc) | 4154字 | 2A700-2B739 |
|
||||
| [扩展D](https://www.qqxiuzi.cn/zh/hanzi-unicode-bianma.php?zfj=kzd) | 222字 | 2B740-2B81D |
|
||||
| [扩展E](https://www.qqxiuzi.cn/zh/hanzi-unicode-bianma.php?zfj=kze) | 5762字 | 2B820-2CEA1 |
|
||||
| [扩展F](https://www.qqxiuzi.cn/zh/hanzi-unicode-bianma.php?zfj=kzf) | 7473字 | 2CEB0-2EBE0 |
|
||||
| [扩展G](https://www.qqxiuzi.cn/zh/hanzi-unicode-bianma.php?zfj=kzg) | 4939字 | 30000-3134A |
|
||||
| [扩展H](https://www.qqxiuzi.cn/zh/hanzi-unicode-bianma.php?zfj=kzh) | 4192字 | 31350-323AF |
|
||||
| [扩展I](https://www.qqxiuzi.cn/zh/hanzi-unicode-bianma.php?zfj=kzi) | 622字 | 2EBF0-2EE5D |
|
||||
| [康熙部首](https://www.qqxiuzi.cn/zh/hanzi-unicode-bianma.php?zfj=kxbs) | 214字 | 2F00-2FD5 |
|
||||
| [部首扩展](https://www.qqxiuzi.cn/zh/hanzi-unicode-bianma.php?zfj=bskz) | 115字① | 2E80-2EF3 |
|
||||
| [兼容汉字](https://www.qqxiuzi.cn/zh/hanzi-unicode-bianma.php?zfj=jrhz) | 472字② | F900-FAD9 |
|
||||
| [兼容扩展](https://www.qqxiuzi.cn/zh/hanzi-unicode-bianma.php?zfj=jrkz) | 542字 | 2F800-2FA1D |
|
||||
| [汉字笔画](https://www.qqxiuzi.cn/zh/hanzi-unicode-bianma.php?zfj=hzbh) | 36字 | 31C0-31E3 |
|
||||
| [汉字结构](https://www.qqxiuzi.cn/zh/hanzi-unicode-bianma.php?zfj=hzjg) | 16字 | 2FF0-2FFF |
|
||||
| [汉语注音](https://www.qqxiuzi.cn/zh/hanzi-unicode-bianma.php?zfj=hyzy) | 43字 | 3105-312F |
|
||||
| [注音扩展](https://www.qqxiuzi.cn/zh/hanzi-unicode-bianma.php?zfj=zykz) | 32字 | 31A0-31BF |
|
||||
| 〇 | 1字 | 3007 |
|
||||
|
||||
Unicode 版本:15.1
|
||||
|
||||
字数备注:
|
||||
① 部首扩展:2E9A 是空码位。
|
||||
② 兼容汉字:FA6E、FA6F 是空码位。
|
||||
|
||||
此页面的字数按实际字数标示(排除空码位),编码范围则排除了首尾空码位。另一个页面《[世界文字大全](https://www.qqxiuzi.cn/zh/unicode-zifu.php)》的编码范围标注则与 Unicode 一致(包括空码位)。 另,原有 PUA 字符产生于上世纪九十年代,现已全部标准化拥有正式码位,故从表中删除。
|
||||
|
||||
**形成过程:**
|
||||
|
||||
1. **拉丁字符和特殊符号的混合**:攻击者可以将拉丁字符(比如英文字母)与一些看似相似的特殊符号(比如希腊字母、数学符号等)混合在一起,生成一个看起来和原始字符相似但实际上具有不同编码的字符。例如,使用希腊字母的小写 sigma(σ)替代拉丁字母的小写 s(s)。
|
||||
2. **全角和半角字符的混合**:攻击者可以利用全角字符(全角空格、全角标点等)和半角字符(英文字符、标点符号等)的外观相似性来混合使用,生成绕过过滤器的字符。例如,使用全角字符的英文句号(。)替代半角字符的英文句号(.)。
|
||||
3. **Unicode 组合字符的利用**:Unicode 支持字符的组合表示,攻击者可以利用组合字符来生成看似相同但实际上具有不同编码的字符。例如,使用拉丁字母和组合重音符号(combining acute accent)来生成特定语言的字符,绕过过滤器检测。
|
||||
|
||||
通过利用这些技巧,攻击者可以成功地绕过文本过滤或识别系统的检测,传播有害内容或实施其他恶意活动。因此,对于开发文本过滤或识别系统的人员来说,需要认识到 Unicode 相似字符攻击的潜在风险,并采取相应的防御措施来保护系统的安全。
|
||||
|
||||
## 解决方案
|
||||
|
||||
防止 Unicode 相似字符攻击是敏感词检测中的一个重要问题,因为攻击者可以利用这些字符来绕过过滤器,传播有害内容或攻击目标。以下是一些防范措施:
|
||||
|
||||
1. **字符归一化(Normalization)**:将输入的文本进行字符归一化处理,将不同形式的 Unicode 字符统一成同一种形式,从而减少相似字符的影响。Unicode 规范定义了几种不同的归一化形式(Normalization Forms),比如 NFC、NFD、NFKC、NFKD,可以根据具体需求选择合适的归一化方式。
|
||||
2. **白名单验证**:限制用户输入只能包含特定的字符集合,而不是接受任意字符。可以定义一个白名单,只允许合法字符通过过滤器。
|
||||
3. **规则匹配**:建立一套严格的规则来检测和匹配潜在的相似字符攻击。这些规则可以基于字符的视觉相似性、Unicode 编码的相似性等。
|
||||
4. **黑名单过滤**:维护一个黑名单,包含已知的相似字符及其对应的正常字符。当检测到输入中包含黑名单中的字符时,可以将其替换或过滤掉。
|
||||
5. **用户教育**:向用户提供教育,让他们意识到利用相似字符来规避过滤器是不道德的行为,并鼓励他们使用正常的字符输入。
|
||||
6. **多种检测手段结合**:使用多种不同的技术和方法结合起来,提高检测的准确性和鲁棒性,从而有效地防止相似字符攻击。
|
||||
|
||||
综合使用以上策略,可以在敏感词检测中有效地防止相似字符攻击。然而,需要注意的是,安全性是一个持续的过程,需要不断地更新和改进防御措施,以适应不断变化的威胁和攻击手法。
|
||||
|
||||
**NFKC和NFKD的区别**
|
||||
|
||||
NFKC 和 NFKD 是 Unicode 字符串的两种归一化形式,它们之间的主要区别在于归一化的方式和处理范围:
|
||||
|
||||
1. **NFKC(Normalization Form KC)**:
|
||||
- 这种形式是 Unicode 归一化的一种形式,其中“K”表示兼容(compatibility)。
|
||||
- NFKC 形式会尽可能地将字符转换为兼容的形式,以便更容易地比较和匹配字符串。它执行的归一化操作包括将一些特殊字符转换为等效的普通字符,比如把全角标点转换成半角标点,把特殊的组合字符转换为对应的单一字符,等等。
|
||||
- NFKC 形式会保留字符的兼容性,因此在某些情况下可能会导致字符的损失或变化,但通常会更适合用于搜索、比较和匹配等操作。
|
||||
|
||||
2. **NFKD(Normalization Form KD)**:
|
||||
- 这种形式也是 Unicode 归一化的一种形式,其中“K”表示兼容(compatibility),“D”表示分解(decomposition)。
|
||||
- NFKD 形式会将字符分解为其组成部分,即将组合字符拆分为基字符和重音。这种形式更进一步,对于某些特殊字符,会将其转换为更基本的形式。
|
||||
- NFKD 形式会尽量消除字符的兼容性,即使在某些情况下会导致字符的丢失或变化。这种形式适用于一些特定场景,如文本标准化、索引化等。
|
||||
|
||||
总的来说,NFKC 和 NFKD 形式在处理 Unicode 字符串时,NFKC 更注重于保留字符的兼容性和整体可读性,而 NFKD 则更注重于字符的分解和简化。如果你需要进行搜索、比较或匹配操作,那么 NFKC 形式可能更适合;而如果你需要进行文本标准化或分析等操作,那么 NFKD 形式可能更为合适。
|
||||
|
||||
## Go代码实现
|
||||
|
||||
**归一化处理**
|
||||
```go
|
||||
import (
|
||||
"fmt"
|
||||
"golang.org/x/text/unicode/norm"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// 原始字符串
|
||||
original := "㋅"
|
||||
targetStr := "6月"
|
||||
fmt.Println("原始字符串:", original)
|
||||
fmt.Println("目标字符串:", targetStr)
|
||||
|
||||
// NFC 形式(由组合字符组成)
|
||||
nfc := norm.NFC.String(original)
|
||||
fmt.Println("NFC 形式:", nfc)
|
||||
|
||||
// NFD 形式(由基字符和重音分开)
|
||||
nfd := norm.NFD.String(original)
|
||||
fmt.Println("NFD 形式:", nfd)
|
||||
|
||||
// 【推荐】 NFKC 形式(合成后的形式,且兼容 ASCII)
|
||||
nfkc := norm.NFKC.String(original)
|
||||
fmt.Println("NFKC 形式:", nfkc)
|
||||
|
||||
// NFKD 形式(分解后的形式,且兼容 ASCII)
|
||||
nfkd := norm.NFKD.String(original)
|
||||
fmt.Println("NFKD 形式:", nfkd)
|
||||
|
||||
// 判断目标字符串
|
||||
res0 := original == targetStr
|
||||
fmt.Println("原始和目标字符串比较", res0)
|
||||
|
||||
res1 := nfkc == targetStr
|
||||
fmt.Println("NFKC字符串比较", res1)
|
||||
|
||||
res2 := nfkd == targetStr
|
||||
fmt.Println("NFKD字符串比较", res2)
|
||||
}
|
||||
```
|
||||
56
common/utils/go-sensitive-word-1.3.3/docs/zero-width.md
Normal file
56
common/utils/go-sensitive-word-1.3.3/docs/zero-width.md
Normal file
@@ -0,0 +1,56 @@
|
||||
# 零宽字符攻击
|
||||
|
||||
在Go语言中,防止零宽字符攻击可以通过一些方法来实现。零宽字符攻击通常是通过在字符串中插入隐藏的零宽字符来欺骗系统,例如在认证字符串中插入零宽空格来绕过验证等。以下是一些防止零宽字符攻击的方法:
|
||||
|
||||
- 验证输入字符串:在接受用户输入的地方,进行输入验证,确保字符串中不包含任何不必要的或可疑的字符。可以使用正则表达式或简单的字符检查来过滤或拒绝包含零宽字符的字符串。
|
||||
- 规范化字符串:在处理输入字符串之前,可以使用Unicode规范化函数将字符串标准化为特定形式,以移除任何不必要的或隐藏的字符。
|
||||
- 使用字节处理而不是字符串:在某些情况下,将字符串视为字节序列可能更安全。通过将字符串转换为字节切片并以字节为单位进行处理,可以避免字符串中的隐藏字符问题。
|
||||
|
||||
```go
|
||||
// IsZeroWidth 是否存在零宽字符
|
||||
func IsZeroWidth(s string) bool {
|
||||
re := regexp.MustCompile(`[\p{Cf}\\u200B]`)
|
||||
return re.MatchString(s)
|
||||
}
|
||||
|
||||
// RemoveZeroWidth 移除零宽字符
|
||||
func RemoveZeroWidth(s string) string {
|
||||
re := regexp.MustCompile(`[\p{Cf}\\u200B]`)
|
||||
return re.ReplaceAllString(s, "")
|
||||
}
|
||||
```
|
||||
|
||||
```go
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
const (
|
||||
str1 = "马斯克"
|
||||
str2Zero = "马斯克"
|
||||
str3Zero = "马\\u200B斯\\u200B克"
|
||||
)
|
||||
|
||||
func TestIsZeroWidth(t *testing.T) {
|
||||
res1 := IsZeroWidth(str1)
|
||||
fmt.Println("res1 结果:", res1) // false
|
||||
|
||||
res2 := IsZeroWidth(str2Zero)
|
||||
fmt.Println("res2 结果:", res2) // true
|
||||
|
||||
res3 := IsZeroWidth(str3Zero)
|
||||
fmt.Println("res3 结果:", res3) // true
|
||||
}
|
||||
|
||||
func TestRemoveIsZeroWidth(t *testing.T) {
|
||||
res1 := RemoveZeroWidth(str1)
|
||||
fmt.Println("res1 结果:", res1) // 马斯克
|
||||
|
||||
res2 := RemoveZeroWidth(str3Zero)
|
||||
fmt.Println("res2 结果:", res2) // 马斯克
|
||||
|
||||
res3 := res1 == res2
|
||||
fmt.Println("res1 和 res2 比较的结果:", res3)
|
||||
}
|
||||
```
|
||||
84
common/utils/go-sensitive-word-1.3.3/examples/demo.go
Normal file
84
common/utils/go-sensitive-word-1.3.3/examples/demo.go
Normal file
@@ -0,0 +1,84 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
sensitive "github.com/zmexing/go-sensitive-word"
|
||||
)
|
||||
|
||||
func main() {
|
||||
filter, err := sensitive.NewFilter(
|
||||
sensitive.StoreOption{Type: sensitive.StoreMemory}, // 基于内存
|
||||
sensitive.FilterOption{Type: sensitive.FilterDfa}, // 基于DFA算法
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
log.Fatalf("敏感词服务启动失败, err:%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 加载敏感词库
|
||||
err = filter.LoadDictEmbed(
|
||||
sensitive.DictCovid19,
|
||||
sensitive.DictGFWAdditional,
|
||||
sensitive.DictOther,
|
||||
sensitive.DictReactionary,
|
||||
sensitive.DictAdvertisement,
|
||||
sensitive.DictPolitical,
|
||||
sensitive.DictViolence,
|
||||
sensitive.DictPeopleLife,
|
||||
sensitive.DictGunExplosion,
|
||||
sensitive.DictNeteaseFE,
|
||||
sensitive.DictSexual,
|
||||
sensitive.DictPornography,
|
||||
sensitive.DictAdditional,
|
||||
sensitive.DictCorruption,
|
||||
sensitive.DictTemporaryTencent,
|
||||
sensitive.DictIllegalURL,
|
||||
)
|
||||
if err != nil {
|
||||
log.Fatalf("加载词库发生了错误, err:%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 动态添加自定义敏感词
|
||||
err = filter.Store.AddWord("李世民", "秦始皇")
|
||||
if err != nil {
|
||||
log.Fatalf("添加敏感词发生了错误, err:%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 动态自定义敏感词白名单
|
||||
err = filter.Store.DelWord("武汉海鲜市场", "武汉")
|
||||
if err != nil {
|
||||
log.Fatalf("删除敏感词发生了错误, err:%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
sensitiveText := "李世民和老祖秦始皇的是忘年交,他们两个相约一起去武汉海鲜市场玩耍"
|
||||
|
||||
// 是否有敏感词
|
||||
res1 := filter.IsSensitive(sensitiveText)
|
||||
fmt.Printf("res1: %v \n", res1)
|
||||
|
||||
// 找到一个敏感词
|
||||
res2 := filter.FindOne(sensitiveText)
|
||||
fmt.Printf("res2: %v \n", res2)
|
||||
|
||||
// 找到所有敏感词
|
||||
res3 := filter.FindAll(sensitiveText)
|
||||
fmt.Printf("res3: %v \n", res3)
|
||||
|
||||
// 找到所有敏感词及出现次数
|
||||
res4 := filter.FindAllCount(sensitiveText)
|
||||
fmt.Printf("res4: %v \n", res4)
|
||||
|
||||
// 和谐敏感词
|
||||
res5 := filter.Replace(sensitiveText, '*')
|
||||
fmt.Printf("res5: %v \n", res5)
|
||||
|
||||
// 过滤铭感词
|
||||
res6 := filter.Remove(sensitiveText)
|
||||
fmt.Printf("res6: %v \n", res6)
|
||||
}
|
||||
293
common/utils/go-sensitive-word-1.3.3/filter/dfa.go
Normal file
293
common/utils/go-sensitive-word-1.3.3/filter/dfa.go
Normal file
@@ -0,0 +1,293 @@
|
||||
package filter
|
||||
|
||||
// DFA 树节点结构
|
||||
type dfaNode struct {
|
||||
children map[rune]*dfaNode // 子节点
|
||||
isLeaf bool // 是否为词尾
|
||||
}
|
||||
|
||||
// DfaModel 是基于 DFA 的敏感词匹配器
|
||||
func newDfaNode() *dfaNode {
|
||||
return &dfaNode{
|
||||
children: make(map[rune]*dfaNode),
|
||||
isLeaf: false,
|
||||
}
|
||||
}
|
||||
|
||||
type DfaModel struct {
|
||||
root *dfaNode
|
||||
}
|
||||
|
||||
func NewDfaModel() *DfaModel {
|
||||
return &DfaModel{
|
||||
root: newDfaNode(),
|
||||
}
|
||||
}
|
||||
|
||||
// 添加多个词
|
||||
func (m *DfaModel) AddWords(words ...string) {
|
||||
for _, word := range words {
|
||||
m.AddWord(word)
|
||||
}
|
||||
}
|
||||
|
||||
// 添加单个词到 DFA 树中
|
||||
func (m *DfaModel) AddWord(word string) {
|
||||
now := m.root
|
||||
runes := []rune(word)
|
||||
|
||||
for _, r := range runes {
|
||||
if next, ok := now.children[r]; ok {
|
||||
now = next
|
||||
} else {
|
||||
next = newDfaNode()
|
||||
now.children[r] = next
|
||||
now = next
|
||||
}
|
||||
}
|
||||
|
||||
now.isLeaf = true
|
||||
}
|
||||
|
||||
// 删除多个词
|
||||
func (m *DfaModel) DelWords(words ...string) {
|
||||
for _, word := range words {
|
||||
m.DelWord(word)
|
||||
}
|
||||
}
|
||||
|
||||
// 删除单个词(仅支持叶子节点剪枝)
|
||||
func (m *DfaModel) DelWord(word string) {
|
||||
var lastLeaf *dfaNode
|
||||
var lastLeafNextRune rune
|
||||
now := m.root
|
||||
runes := []rune(word)
|
||||
|
||||
for _, r := range runes {
|
||||
if next, ok := now.children[r]; !ok {
|
||||
return
|
||||
} else {
|
||||
if now.isLeaf {
|
||||
lastLeaf = now
|
||||
lastLeafNextRune = r
|
||||
}
|
||||
now = next
|
||||
}
|
||||
}
|
||||
|
||||
// 确保找到的词确实是叶子节点
|
||||
if !now.isLeaf {
|
||||
return
|
||||
}
|
||||
|
||||
if lastLeaf != nil {
|
||||
// 没有其他分支,删除从 lastLeaf 到目标节点的路径
|
||||
delete(lastLeaf.children, lastLeafNextRune)
|
||||
} else {
|
||||
// 有其他分支,只取消叶子标记
|
||||
now.isLeaf = false
|
||||
}
|
||||
}
|
||||
|
||||
// 监听新增和删除通道
|
||||
func (m *DfaModel) Listen(addChan, delChan <-chan string) {
|
||||
go func() {
|
||||
for word := range addChan {
|
||||
m.AddWord(word)
|
||||
}
|
||||
}()
|
||||
|
||||
go func() {
|
||||
for word := range delChan {
|
||||
m.DelWord(word)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
// 查找文本中所有敏感词
|
||||
func (m *DfaModel) FindAll(text string) []string {
|
||||
var matches []string // stores words that match in dict
|
||||
var found bool // if current rune in node's map
|
||||
var now *dfaNode // current node
|
||||
|
||||
start := 0
|
||||
parent := m.root
|
||||
runes := []rune(text)
|
||||
length := len(runes)
|
||||
|
||||
for pos := 0; pos < length; pos++ {
|
||||
now, found = parent.children[runes[pos]]
|
||||
|
||||
if !found {
|
||||
parent = m.root
|
||||
pos = start
|
||||
start++
|
||||
continue
|
||||
}
|
||||
|
||||
if now.isLeaf && start <= pos {
|
||||
matches = append(matches, string(runes[start:pos+1]))
|
||||
}
|
||||
|
||||
if pos == length-1 {
|
||||
parent = m.root
|
||||
pos = start
|
||||
start++
|
||||
continue
|
||||
}
|
||||
|
||||
parent = now
|
||||
}
|
||||
|
||||
var res []string
|
||||
set := make(map[string]struct{})
|
||||
|
||||
for _, word := range matches {
|
||||
if _, ok := set[word]; !ok {
|
||||
set[word] = struct{}{}
|
||||
res = append(res, word)
|
||||
}
|
||||
}
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
// 查找所有敏感词及其出现次数
|
||||
func (m *DfaModel) FindAllCount(text string) map[string]int {
|
||||
res := make(map[string]int)
|
||||
var found bool
|
||||
var now *dfaNode
|
||||
|
||||
start := 0
|
||||
parent := m.root
|
||||
runes := []rune(text)
|
||||
length := len(runes)
|
||||
|
||||
for pos := 0; pos < length; pos++ {
|
||||
now, found = parent.children[runes[pos]]
|
||||
|
||||
if !found {
|
||||
parent = m.root
|
||||
pos = start
|
||||
start++
|
||||
continue
|
||||
}
|
||||
|
||||
if now.isLeaf && start <= pos {
|
||||
res[string(runes[start:pos+1])]++
|
||||
}
|
||||
|
||||
if pos == length-1 {
|
||||
parent = m.root
|
||||
pos = start
|
||||
start++
|
||||
continue
|
||||
}
|
||||
|
||||
parent = now
|
||||
}
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
// 查找一个敏感词(命中第一个即返回)
|
||||
func (m *DfaModel) FindOne(text string) string {
|
||||
var found bool
|
||||
var now *dfaNode
|
||||
|
||||
start := 0
|
||||
parent := m.root
|
||||
runes := []rune(text)
|
||||
length := len(runes)
|
||||
|
||||
for pos := 0; pos < length; pos++ {
|
||||
now, found = parent.children[runes[pos]]
|
||||
|
||||
if !found || (!now.isLeaf && pos == length-1) {
|
||||
parent = m.root
|
||||
pos = start
|
||||
start++
|
||||
continue
|
||||
}
|
||||
|
||||
if now.isLeaf && start <= pos {
|
||||
return string(runes[start : pos+1])
|
||||
}
|
||||
|
||||
parent = now
|
||||
}
|
||||
|
||||
return ""
|
||||
}
|
||||
|
||||
// 判断文本中是否包含敏感词
|
||||
func (m *DfaModel) IsSensitive(text string) bool {
|
||||
return m.FindOne(text) != ""
|
||||
}
|
||||
|
||||
// 将敏感词替换为指定字符(如 *)
|
||||
func (m *DfaModel) Replace(text string, repl rune) string {
|
||||
var found bool
|
||||
var now *dfaNode
|
||||
|
||||
start := 0
|
||||
parent := m.root
|
||||
runes := []rune(text)
|
||||
length := len(runes)
|
||||
|
||||
for pos := 0; pos < length; pos++ {
|
||||
now, found = parent.children[runes[pos]]
|
||||
|
||||
if !found || (!now.isLeaf && pos == length-1) {
|
||||
parent = m.root
|
||||
pos = start
|
||||
start++
|
||||
continue
|
||||
}
|
||||
|
||||
if now.isLeaf && start <= pos {
|
||||
for i := start; i <= pos; i++ {
|
||||
runes[i] = repl
|
||||
}
|
||||
}
|
||||
|
||||
parent = now
|
||||
}
|
||||
|
||||
return string(runes)
|
||||
}
|
||||
|
||||
// 将敏感词从文本中完全移除
|
||||
func (m *DfaModel) Remove(text string) string {
|
||||
var found bool
|
||||
var now *dfaNode
|
||||
|
||||
start := 0 // 从文本的第几个文字开始匹配
|
||||
parent := m.root
|
||||
runes := []rune(text)
|
||||
length := len(runes)
|
||||
filtered := make([]rune, 0, length)
|
||||
|
||||
for pos := 0; pos < length; pos++ {
|
||||
now, found = parent.children[runes[pos]]
|
||||
|
||||
if !found || (!now.isLeaf && pos == length-1) {
|
||||
filtered = append(filtered, runes[start])
|
||||
parent = m.root
|
||||
pos = start
|
||||
start++
|
||||
continue
|
||||
}
|
||||
|
||||
if now.isLeaf {
|
||||
start = pos + 1
|
||||
parent = m.root
|
||||
} else {
|
||||
parent = now
|
||||
}
|
||||
}
|
||||
|
||||
filtered = append(filtered, runes[start:]...)
|
||||
|
||||
return string(filtered)
|
||||
}
|
||||
21
common/utils/go-sensitive-word-1.3.3/filter/filter.go
Normal file
21
common/utils/go-sensitive-word-1.3.3/filter/filter.go
Normal file
@@ -0,0 +1,21 @@
|
||||
package filter
|
||||
|
||||
type (
|
||||
Filter interface {
|
||||
// FindAll 找到所有敏感词
|
||||
FindAll(text string) []string
|
||||
// FindAllCount 找到所有敏感词及出现次数
|
||||
FindAllCount(text string) map[string]int
|
||||
// FindOne 找到一个敏感词
|
||||
FindOne(text string) string
|
||||
// IsSensitive 是否有敏感词
|
||||
IsSensitive(text string) bool
|
||||
// Replace 和谐敏感词
|
||||
Replace(text string, repl rune) string
|
||||
// Remove 过滤铭感词
|
||||
Remove(text string) string
|
||||
}
|
||||
)
|
||||
|
||||
// 接口实现验证
|
||||
var _ Filter = (*DfaModel)(nil)
|
||||
30
common/utils/go-sensitive-word-1.3.3/go.mod
Normal file
30
common/utils/go-sensitive-word-1.3.3/go.mod
Normal file
@@ -0,0 +1,30 @@
|
||||
module github.com/zmexing/go-sensitive-word
|
||||
|
||||
go 1.20
|
||||
|
||||
require (
|
||||
github.com/imroc/req/v3 v3.43.3
|
||||
github.com/orcaman/concurrent-map/v2 v2.0.1
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/andybalholm/brotli v1.1.0 // indirect
|
||||
github.com/cloudflare/circl v1.3.7 // indirect
|
||||
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect
|
||||
github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7 // indirect
|
||||
github.com/hashicorp/errwrap v1.1.0 // indirect
|
||||
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
||||
github.com/klauspost/compress v1.17.7 // indirect
|
||||
github.com/onsi/ginkgo/v2 v2.16.0 // indirect
|
||||
github.com/quic-go/qpack v0.4.0 // indirect
|
||||
github.com/quic-go/quic-go v0.41.0 // indirect
|
||||
github.com/refraction-networking/utls v1.6.3 // indirect
|
||||
go.uber.org/mock v0.4.0 // indirect
|
||||
golang.org/x/crypto v0.21.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 // indirect
|
||||
golang.org/x/mod v0.16.0 // indirect
|
||||
golang.org/x/net v0.22.0 // indirect
|
||||
golang.org/x/sys v0.18.0 // indirect
|
||||
golang.org/x/text v0.14.0 // indirect
|
||||
golang.org/x/tools v0.19.0 // indirect
|
||||
)
|
||||
65
common/utils/go-sensitive-word-1.3.3/go.sum
Normal file
65
common/utils/go-sensitive-word-1.3.3/go.sum
Normal file
@@ -0,0 +1,65 @@
|
||||
github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M=
|
||||
github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY=
|
||||
github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU=
|
||||
github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
|
||||
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
|
||||
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
|
||||
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
|
||||
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
|
||||
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7 h1:y3N7Bm7Y9/CtpiVkw/ZWj6lSlDF3F74SfKwfTCer72Q=
|
||||
github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
|
||||
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
|
||||
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
|
||||
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
|
||||
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
|
||||
github.com/imroc/req/v3 v3.43.3 h1:WdZhpUev9THtuwEZsW2LOYacl12fm7IkB7OgACv40+k=
|
||||
github.com/imroc/req/v3 v3.43.3/go.mod h1:SQIz5iYop16MJxbo8ib+4LnostGCok8NQf8ToyQc2xA=
|
||||
github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg=
|
||||
github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
|
||||
github.com/onsi/ginkgo/v2 v2.16.0 h1:7q1w9frJDzninhXxjZd+Y/x54XNjG/UlRLIYPZafsPM=
|
||||
github.com/onsi/ginkgo/v2 v2.16.0/go.mod h1:llBI3WDLL9Z6taip6f33H76YcWtJv+7R3HigUjbIBOs=
|
||||
github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8=
|
||||
github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ=
|
||||
github.com/orcaman/concurrent-map/v2 v2.0.1 h1:jOJ5Pg2w1oeB6PeDurIYf6k9PQ+aTITr/6lP/L/zp6c=
|
||||
github.com/orcaman/concurrent-map/v2 v2.0.1/go.mod h1:9Eq3TG2oBe5FirmYWQfYO5iH1q0Jv47PLaNK++uCdOM=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/quic-go/qpack v0.4.0 h1:Cr9BXA1sQS2SmDUWjSofMPNKmvF6IiIfDRmgU0w1ZCo=
|
||||
github.com/quic-go/qpack v0.4.0/go.mod h1:UZVnYIfi5GRk+zI9UMaCPsmZ2xKJP7XBUvVyT1Knj9A=
|
||||
github.com/quic-go/quic-go v0.41.0 h1:aD8MmHfgqTURWNJy48IYFg2OnxwHT3JL7ahGs73lb4k=
|
||||
github.com/quic-go/quic-go v0.41.0/go.mod h1:qCkNjqczPEvgsOnxZ0eCD14lv+B2LHlFAB++CNOh9hA=
|
||||
github.com/refraction-networking/utls v1.6.3 h1:MFOfRN35sSx6K5AZNIoESsBuBxS2LCgRilRIdHb6fDc=
|
||||
github.com/refraction-networking/utls v1.6.3/go.mod h1:yil9+7qSl+gBwJqztoQseO6Pr3h62pQoY1lXiNR/FPs=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
|
||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU=
|
||||
go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc=
|
||||
golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
|
||||
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
|
||||
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 h1:LfspQV/FYTatPTr/3HzIcmiUFH7PGP+OQ6mgDYo3yuQ=
|
||||
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc=
|
||||
golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic=
|
||||
golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
||||
golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc=
|
||||
golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
|
||||
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
|
||||
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||
golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw=
|
||||
golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc=
|
||||
google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
|
||||
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
42
common/utils/go-sensitive-word-1.3.3/manager.go
Normal file
42
common/utils/go-sensitive-word-1.3.3/manager.go
Normal file
@@ -0,0 +1,42 @@
|
||||
package go_sensitive_word
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"github.com/zmexing/go-sensitive-word/filter"
|
||||
"github.com/zmexing/go-sensitive-word/store"
|
||||
)
|
||||
|
||||
// Manager 是敏感词过滤系统的核心结构,整合了词库存储和过滤算法
|
||||
type Manager struct {
|
||||
store.Store // // 词库存储接口(支持内存、本地文件、远程等)
|
||||
filter.Filter // // 敏感词匹配算法接口(如 DFA)
|
||||
}
|
||||
|
||||
// NewFilter 初始化过滤器和词库存储
|
||||
// 参数:storeOption 指定存储方式,filterOption 指定过滤算法
|
||||
func NewFilter(storeOption StoreOption, filterOption FilterOption) (*Manager, error) {
|
||||
var filterStore store.Store
|
||||
var myFilter filter.Filter
|
||||
|
||||
switch storeOption.Type {
|
||||
case StoreMemory: // 使用内存词库
|
||||
filterStore = store.NewMemoryModel()
|
||||
default:
|
||||
return nil, errors.New("invalid store type")
|
||||
}
|
||||
|
||||
switch filterOption.Type {
|
||||
case FilterDfa: // 使用 DFA 算法
|
||||
dfaModel := filter.NewDfaModel()
|
||||
// 启动监听协程,实时接收新增/删除词的通知
|
||||
go dfaModel.Listen(filterStore.GetAddChan(), filterStore.GetDelChan())
|
||||
myFilter = dfaModel
|
||||
default:
|
||||
return nil, errors.New("invalid filter type")
|
||||
}
|
||||
|
||||
return &Manager{
|
||||
Store: filterStore,
|
||||
Filter: myFilter,
|
||||
}, nil
|
||||
}
|
||||
155
common/utils/go-sensitive-word-1.3.3/manager_test.go
Normal file
155
common/utils/go-sensitive-word-1.3.3/manager_test.go
Normal file
@@ -0,0 +1,155 @@
|
||||
package go_sensitive_word
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// 敏感词检测
|
||||
func TestFilter(t *testing.T) {
|
||||
filter, err := NewFilter(
|
||||
StoreOption{Type: StoreMemory},
|
||||
FilterOption{Type: FilterDfa},
|
||||
)
|
||||
if err != nil {
|
||||
log.Fatalf("敏感词服务启动失败, err:%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 加载敏感词库
|
||||
err = filter.LoadDictEmbed(
|
||||
DictCovid19,
|
||||
DictOther,
|
||||
DictReactionary,
|
||||
DictViolence,
|
||||
DictPeopleLife,
|
||||
DictPornography,
|
||||
DictAdditional,
|
||||
DictCorruption,
|
||||
DictTemporaryTencent,
|
||||
)
|
||||
if err != nil {
|
||||
log.Fatalf("加载词库发生了错误, err:%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 动态自定义敏感词
|
||||
err = filter.Store.AddWord("测试1", "测试2", "成小王")
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
sensitiveText := "成小王微笑着对毒品销售说,我认为台湾国的人有点意思"
|
||||
|
||||
// 是否有敏感词
|
||||
res1 := filter.IsSensitive(sensitiveText)
|
||||
fmt.Printf("res1: %v \n", res1)
|
||||
|
||||
// 找到一个敏感词
|
||||
res2 := filter.FindOne(sensitiveText)
|
||||
fmt.Printf("res2: %v \n", res2)
|
||||
|
||||
// 找到所有敏感词
|
||||
res3 := filter.FindAll(sensitiveText)
|
||||
fmt.Printf("res3: %v \n", res3)
|
||||
|
||||
// 找到所有敏感词及出现次数
|
||||
res4 := filter.FindAllCount(sensitiveText)
|
||||
fmt.Printf("res4: %v \n", res4)
|
||||
|
||||
// 和谐敏感词
|
||||
res5 := filter.Replace(sensitiveText, '*')
|
||||
fmt.Printf("res5: %v \n", res5)
|
||||
|
||||
// 过滤铭感词
|
||||
res6 := filter.Remove(sensitiveText)
|
||||
fmt.Printf("res6: %v \n", res6)
|
||||
}
|
||||
|
||||
// 压力测试
|
||||
func BenchmarkIsSensitive(b *testing.B) {
|
||||
filter, err := NewFilter(
|
||||
StoreOption{Type: StoreMemory},
|
||||
FilterOption{Type: FilterDfa},
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
log.Fatalf("敏感词服务启动失败, err:%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 加载敏感词库
|
||||
err = filter.LoadDictEmbed(
|
||||
DictCovid19,
|
||||
DictOther,
|
||||
DictReactionary,
|
||||
DictViolence,
|
||||
DictPeopleLife,
|
||||
DictPornography,
|
||||
DictAdditional,
|
||||
DictCorruption,
|
||||
DictTemporaryTencent,
|
||||
)
|
||||
if err != nil {
|
||||
log.Fatalf("加载词库发生了错误, err:%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
err = filter.Store.AddWord("测试1", "测试2")
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
sensitiveText := "小明微笑着对毒品销售说,我认为台湾国的人有点意思"
|
||||
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
_ = filter.IsSensitive(sensitiveText)
|
||||
}
|
||||
}
|
||||
|
||||
// 压力测试
|
||||
func BenchmarkReplace(b *testing.B) {
|
||||
filter, err := NewFilter(
|
||||
StoreOption{Type: StoreMemory},
|
||||
FilterOption{Type: FilterDfa},
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
log.Fatalf("敏感词服务启动失败, err:%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// 加载敏感词库
|
||||
err = filter.LoadDictEmbed(
|
||||
DictCovid19,
|
||||
DictOther,
|
||||
DictReactionary,
|
||||
DictViolence,
|
||||
DictPeopleLife,
|
||||
DictPornography,
|
||||
DictAdditional,
|
||||
DictCorruption,
|
||||
DictTemporaryTencent,
|
||||
)
|
||||
if err != nil {
|
||||
log.Fatalf("加载词库发生了错误, err:%v", err)
|
||||
return
|
||||
}
|
||||
|
||||
err = filter.Store.AddWord("测试1", "测试2")
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
|
||||
sensitiveText := "小明微笑着对毒品销售说,我认为台湾国的人有点意思"
|
||||
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
_ = filter.Replace(sensitiveText, '*')
|
||||
}
|
||||
}
|
||||
69
common/utils/go-sensitive-word-1.3.3/options.go
Normal file
69
common/utils/go-sensitive-word-1.3.3/options.go
Normal file
@@ -0,0 +1,69 @@
|
||||
package go_sensitive_word
|
||||
|
||||
import _ "embed"
|
||||
|
||||
// StoreMemory 类型常量定义
|
||||
// 当前仅支持内存存储(StoreMemory),后续可扩展为 Redis、文件存储等。
|
||||
const (
|
||||
StoreMemory = iota // 内存模式词库(默认)
|
||||
)
|
||||
|
||||
// FilterDfa 类型常量定义
|
||||
// 当前仅支持 DFA 算法(FilterDfa),后续可支持 Trie、AC自动机、正则等。
|
||||
const (
|
||||
FilterDfa = iota // DFA 敏感词过滤算法(默认)
|
||||
)
|
||||
|
||||
// StoreOption 定义了词库存储的配置选项
|
||||
// Type 字段用于指定词库的存储实现方式,如内存、Redis、文件等。
|
||||
type StoreOption struct {
|
||||
Type uint32 // 存储类型标识,例如 StoreMemory
|
||||
}
|
||||
|
||||
// FilterOption 定义了敏感词过滤器的配置选项
|
||||
// Type 字段用于指定过滤算法的实现方式,如 DFA、Trie、正则等。
|
||||
type FilterOption struct {
|
||||
Type uint32 // 过滤器类型标识,例如 FilterDfa
|
||||
}
|
||||
|
||||
// 内置敏感词词库(通过 go:embed 嵌入编译时)
|
||||
// 这些变量可直接用于调用 LoadDictEmbed 加载内置词库内容,无需读取本地文件。
|
||||
// 可按需选择加载不同类别的敏感词,例如政治类、暴恐类、色情类、贪腐类等。
|
||||
//
|
||||
// 使用示例:
|
||||
//
|
||||
// err := manager.LoadDictEmbed(DictCovid19, DictPornography)
|
||||
var (
|
||||
//go:embed text/COVID-19词库.txt
|
||||
DictCovid19 string
|
||||
//go:embed text/GFW补充词库.txt
|
||||
DictGFWAdditional string
|
||||
//go:embed text/其他词库.txt
|
||||
DictOther string
|
||||
//go:embed text/反动词库.txt
|
||||
DictReactionary string
|
||||
//go:embed text/广告类型.txt
|
||||
DictAdvertisement string
|
||||
//go:embed text/政治类型.txt
|
||||
DictPolitical string
|
||||
//go:embed text/暴恐词库.txt
|
||||
DictViolence string
|
||||
//go:embed text/民生词库.txt
|
||||
DictPeopleLife string
|
||||
//go:embed text/涉枪涉爆.txt
|
||||
DictGunExplosion string
|
||||
//go:embed text/网易前端过滤敏感词库.txt
|
||||
DictNeteaseFE string
|
||||
//go:embed text/色情类型.txt
|
||||
DictSexual string
|
||||
//go:embed text/色情词库.txt
|
||||
DictPornography string
|
||||
//go:embed text/补充词库.txt
|
||||
DictAdditional string
|
||||
//go:embed text/贪腐词库.txt
|
||||
DictCorruption string
|
||||
//go:embed text/零时-Tencent.txt
|
||||
DictTemporaryTencent string
|
||||
//go:embed text/非法网址.txt
|
||||
DictIllegalURL string
|
||||
)
|
||||
165
common/utils/go-sensitive-word-1.3.3/store/memory.go
Normal file
165
common/utils/go-sensitive-word-1.3.3/store/memory.go
Normal file
@@ -0,0 +1,165 @@
|
||||
package store
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"errors"
|
||||
"github.com/imroc/req/v3"
|
||||
cmap "github.com/orcaman/concurrent-map/v2"
|
||||
"io"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// MemoryModel 使用并发 map 实现的内存词库
|
||||
type MemoryModel struct {
|
||||
store cmap.ConcurrentMap[string, struct{}]
|
||||
addChan chan string
|
||||
delChan chan string
|
||||
}
|
||||
|
||||
// NewMemoryModel 创建新的内存模型
|
||||
func NewMemoryModel() *MemoryModel {
|
||||
return &MemoryModel{
|
||||
store: cmap.New[struct{}](),
|
||||
addChan: make(chan string),
|
||||
delChan: make(chan string),
|
||||
}
|
||||
}
|
||||
|
||||
// 从本地路径加载词库文件
|
||||
func (m *MemoryModel) LoadDictPath(paths ...string) error {
|
||||
for _, path := range paths {
|
||||
err := func(path string) error {
|
||||
f, err := os.Open(path)
|
||||
defer func(f *os.File) {
|
||||
_ = f.Close()
|
||||
}(f)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return m.LoadDict(f)
|
||||
}(path)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// 加载嵌入式文本词库(go:embed)
|
||||
func (m *MemoryModel) LoadDictEmbed(contents ...string) error {
|
||||
for _, con := range contents {
|
||||
reader := strings.NewReader(con)
|
||||
if err := m.LoadDict(reader); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// 从远程 HTTP 地址加载词库
|
||||
func (m *MemoryModel) LoadDictHttp(urls ...string) error {
|
||||
for _, url := range urls {
|
||||
err := func(url string) error {
|
||||
httpRes, err := req.Get(url)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if httpRes == nil {
|
||||
return errors.New("nil http response")
|
||||
}
|
||||
if httpRes.StatusCode != http.StatusOK {
|
||||
return errors.New(httpRes.GetStatus())
|
||||
}
|
||||
|
||||
defer func(Body io.ReadCloser) {
|
||||
_ = Body.Close()
|
||||
}(httpRes.Body)
|
||||
|
||||
return m.LoadDict(httpRes.Body)
|
||||
}(url)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// 读取词库(按行解析)
|
||||
func (m *MemoryModel) LoadDict(reader io.Reader) error {
|
||||
buf := bufio.NewReader(reader)
|
||||
for {
|
||||
line, _, err := buf.ReadLine()
|
||||
if err != nil {
|
||||
if err != io.EOF {
|
||||
return err
|
||||
}
|
||||
break
|
||||
}
|
||||
|
||||
m.store.Set(string(line), struct{}{})
|
||||
m.addChan <- string(line)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// 返回所有敏感词的读取通道(可用于初始化加载)
|
||||
func (m *MemoryModel) ReadChan() <-chan string {
|
||||
ch := make(chan string)
|
||||
|
||||
go func() {
|
||||
for key := range m.store.Items() {
|
||||
ch <- key
|
||||
}
|
||||
close(ch)
|
||||
}()
|
||||
|
||||
return ch
|
||||
}
|
||||
|
||||
// 获取所有敏感词(字符串数组)
|
||||
func (m *MemoryModel) ReadString() []string {
|
||||
res := make([]string, 0, m.store.Count())
|
||||
|
||||
for key := range m.store.Items() {
|
||||
res = append(res, key)
|
||||
}
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
// 获取新增词通道
|
||||
func (m *MemoryModel) GetAddChan() <-chan string {
|
||||
return m.addChan
|
||||
}
|
||||
|
||||
// 获取删除词通道
|
||||
func (m *MemoryModel) GetDelChan() <-chan string {
|
||||
return m.delChan
|
||||
}
|
||||
|
||||
// 添加自定义敏感词
|
||||
func (m *MemoryModel) AddWord(words ...string) error {
|
||||
for _, word := range words {
|
||||
m.store.Set(word, struct{}{})
|
||||
m.addChan <- word
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// 删除敏感词(敏感词加白名单)
|
||||
func (m *MemoryModel) DelWord(words ...string) error {
|
||||
for _, word := range words {
|
||||
m.store.Remove(word)
|
||||
m.delChan <- word
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
31
common/utils/go-sensitive-word-1.3.3/store/store.go
Normal file
31
common/utils/go-sensitive-word-1.3.3/store/store.go
Normal file
@@ -0,0 +1,31 @@
|
||||
package store
|
||||
|
||||
import "io"
|
||||
|
||||
type (
|
||||
Store interface {
|
||||
// LoadDictPath 从指定的本地路径加载词库文件(可传多个路径)
|
||||
LoadDictPath(path ...string) error
|
||||
// LoadDictEmbed (推荐)加载嵌入式词库内容(如 go:embed 提供的字符串)
|
||||
LoadDictEmbed(contents ...string) error
|
||||
// LoadDictHttp 从远程 URL 加载词库内容(支持多个 URL)
|
||||
LoadDictHttp(url ...string) error
|
||||
// LoadDict 从 io.Reader 加载词库内容(按行读取)
|
||||
LoadDict(reader io.Reader) error
|
||||
// ReadChan 返回一个通道,逐个输出当前存储中的所有敏感词(可用于异步加载到过滤器)
|
||||
ReadChan() <-chan string
|
||||
// ReadString 以字符串数组形式返回当前所有敏感词
|
||||
ReadString() []string
|
||||
// GetAddChan 获取新增敏感词的事件通道(用于实时监听词库变更)
|
||||
GetAddChan() <-chan string
|
||||
// GetDelChan 获取删除敏感词的事件通道(用于实时监听词库变更)
|
||||
GetDelChan() <-chan string
|
||||
// AddWord 添加一个或多个敏感词
|
||||
AddWord(words ...string) error
|
||||
// DelWord 删除一个或多个敏感词
|
||||
DelWord(words ...string) error
|
||||
}
|
||||
)
|
||||
|
||||
// 接口实现验证
|
||||
var _ Store = (*MemoryModel)(nil)
|
||||
76
common/utils/go-sensitive-word-1.3.3/text/COVID-19词库.txt
Normal file
76
common/utils/go-sensitive-word-1.3.3/text/COVID-19词库.txt
Normal file
@@ -0,0 +1,76 @@
|
||||
武汉不明肺炎
|
||||
武汉海鲜市场
|
||||
沙士变异
|
||||
爆發sars疫情
|
||||
武汉卫生委员会
|
||||
p4病毒实验室
|
||||
病毒感染
|
||||
疫情事件
|
||||
肺炎病人
|
||||
武汉流行肺炎
|
||||
非典性肺炎
|
||||
习近平到武汉
|
||||
某人亲自
|
||||
雷神山
|
||||
总书记
|
||||
总书记
|
||||
红十字会
|
||||
疫情
|
||||
肺炎
|
||||
習近平
|
||||
中央
|
||||
疫情
|
||||
政府
|
||||
負面
|
||||
疫情
|
||||
習主席
|
||||
凝聚力
|
||||
疫情蔓延
|
||||
武汉
|
||||
李克强
|
||||
肺炎
|
||||
总理
|
||||
北京
|
||||
武漢
|
||||
李克強
|
||||
扒一扒武汉病毒所
|
||||
所长的成功史
|
||||
地方官+疫情+中央+隱瞞
|
||||
舉行+批評中國+兩會期間+隱瞞
|
||||
武漢+中共+危機+北京
|
||||
共产党+肺炎+表现+统治
|
||||
疫情+红会+4+政府+湖北
|
||||
中国共产党+最大的威胁+这个时代
|
||||
武漢+明明+病毒+人傳人
|
||||
美国疾控中心+冠状病毒
|
||||
菲律宾总统府感谢中国捐赠菲律宾
|
||||
全面接管+10号疫情不好转+解放军
|
||||
網上教學+大力+推進
|
||||
封城+部隊
|
||||
政府+做出+测序+病毒
|
||||
为辅+西医+冠状病毒
|
||||
省委书记+通报+专家组+病毒
|
||||
断崖式下跌+疫情防控
|
||||
發起罷工+五大訴求+員工陣線
|
||||
香港+林鄭+呼籲+病毒
|
||||
香港+港府+衞生防護+港人
|
||||
大陸+台灣+病毒+外交部
|
||||
口罩+台灣+出口+國家
|
||||
口罩+台灣+政府+中國大陸
|
||||
澳門+政府+戴口罩
|
||||
武漢肺炎疫情失控
|
||||
死亡病例+肺炎+死亡人數
|
||||
武漢+感染+十幾萬
|
||||
上海+背景+药物+病毒
|
||||
毒城+武漢
|
||||
武汉+发生+人传人+病毒
|
||||
肺炎+疾病预防控制+病毒+医学期刊
|
||||
有关+疾病控制+旅行限制+病毒
|
||||
疫情+颜色革命+李文亮
|
||||
聲音+人傳人+李文亮
|
||||
疫情+病毒+李文亮+中央
|
||||
冠状病毒+人传人+李文亮
|
||||
监察委+确诊+李文亮
|
||||
武漢+光復
|
||||
湖北+五大诉求
|
||||
武汉+五大诉求
|
||||
6414
common/utils/go-sensitive-word-1.3.3/text/GFW补充词库.txt
Normal file
6414
common/utils/go-sensitive-word-1.3.3/text/GFW补充词库.txt
Normal file
File diff suppressed because it is too large
Load Diff
158
common/utils/go-sensitive-word-1.3.3/text/其他词库.txt
Normal file
158
common/utils/go-sensitive-word-1.3.3/text/其他词库.txt
Normal file
@@ -0,0 +1,158 @@
|
||||
穴海
|
||||
协警
|
||||
纳米比亚
|
||||
专业调查
|
||||
有华龙
|
||||
jq的来
|
||||
电信路
|
||||
党鞭
|
||||
第一夫人
|
||||
黄巨
|
||||
荡尽天下
|
||||
家元自称玉皇大帝
|
||||
主席李世民
|
||||
何祚庥
|
||||
刘刚
|
||||
不要沉默
|
||||
后勤集团
|
||||
食堂涨价
|
||||
发国难财
|
||||
浪漫邂逅
|
||||
红满堂
|
||||
张小洋
|
||||
炸学校
|
||||
子宫
|
||||
叫晶晶的女孩
|
||||
回派
|
||||
社会黑暗
|
||||
国之母
|
||||
国母
|
||||
国姆
|
||||
东方微点
|
||||
震惊全球
|
||||
nowto
|
||||
chengdu
|
||||
徐明
|
||||
六月飞雪
|
||||
暴力虐待
|
||||
暴力袭击
|
||||
天府广场
|
||||
粮荒
|
||||
洗脑班
|
||||
李愚蠢
|
||||
中国猪
|
||||
台湾猪
|
||||
进化不完全的生命体
|
||||
震死他们
|
||||
|
||||
10010
|
||||
10086
|
||||
10159
|
||||
13423205670
|
||||
13725516608
|
||||
13875448369
|
||||
15112886328
|
||||
189
|
||||
6-4tianwang
|
||||
64
|
||||
68170802
|
||||
6a6.net
|
||||
7.31
|
||||
7.310
|
||||
89-64cdjp
|
||||
8945212
|
||||
23条
|
||||
259o
|
||||
381929279
|
||||
3P
|
||||
4-Jun
|
||||
AV
|
||||
BJ
|
||||
CBD
|
||||
CCTV
|
||||
CDMA
|
||||
DICK
|
||||
Dick
|
||||
FLG
|
||||
FOCUSC
|
||||
FUCK
|
||||
Fuck
|
||||
GAMEMASTER
|
||||
GCD
|
||||
GameMaster
|
||||
IP17908
|
||||
KEY_TEXT
|
||||
NMD
|
||||
QQb
|
||||
SM
|
||||
Soccer01.com
|
||||
TMD
|
||||
UltraSurf
|
||||
bignews
|
||||
Bitch
|
||||
boxun
|
||||
Chinaliberal
|
||||
chinamz
|
||||
Chinesenewsnet
|
||||
cnd
|
||||
Creaders
|
||||
dafa
|
||||
Dajiyuan
|
||||
df'd
|
||||
Dfdz
|
||||
die
|
||||
dpp
|
||||
Freechina
|
||||
freedom
|
||||
Freenet
|
||||
fuck
|
||||
fuck your mother
|
||||
hongzhi
|
||||
hrichina
|
||||
huanet
|
||||
hypermart.net
|
||||
incest
|
||||
jiangdongriji
|
||||
l2590803027
|
||||
lihongzhi
|
||||
ma
|
||||
making
|
||||
minghui
|
||||
minghuinews
|
||||
nacb
|
||||
na?ve
|
||||
nmis
|
||||
paper64
|
||||
peacehall
|
||||
piao
|
||||
playboy
|
||||
renminbao
|
||||
renmingbao
|
||||
rfa
|
||||
safeweb
|
||||
sex
|
||||
shit
|
||||
simple
|
||||
svdc
|
||||
taip
|
||||
tibetalk
|
||||
triangle
|
||||
triangleboy
|
||||
txwq.net
|
||||
unixbox
|
||||
ustibet
|
||||
voa
|
||||
voachinese
|
||||
wangce
|
||||
wstaiji
|
||||
www
|
||||
xinsheng
|
||||
yuming
|
||||
yy通讯录
|
||||
zhengjian
|
||||
zhengjianwang
|
||||
zhenshanren
|
||||
zhuanfalu
|
||||
zhuanfalun
|
||||
八九
|
||||
八老
|
||||
557
common/utils/go-sensitive-word-1.3.3/text/反动词库.txt
Normal file
557
common/utils/go-sensitive-word-1.3.3/text/反动词库.txt
Normal file
@@ -0,0 +1,557 @@
|
||||
腐败中国
|
||||
三个呆婊
|
||||
你办事我放心
|
||||
社会主义灭亡
|
||||
打倒中国
|
||||
打倒共产党
|
||||
打倒共产主义
|
||||
打倒胡锦涛
|
||||
打倒江泽民
|
||||
打倒江主席
|
||||
打倒李鹏
|
||||
打倒罗干
|
||||
打倒温家宝
|
||||
打倒中共
|
||||
打倒朱镕
|
||||
抵制共产党
|
||||
抵制共产主义
|
||||
抵制胡锦涛
|
||||
抵制江泽民
|
||||
抵制江主席
|
||||
抵制李鹏
|
||||
抵制罗干
|
||||
抵制温家宝
|
||||
抵制中共
|
||||
抵制朱镕基
|
||||
灭亡中国
|
||||
亡党亡国
|
||||
粉碎四人帮
|
||||
激流中国
|
||||
特供
|
||||
特贡
|
||||
特共
|
||||
zf大楼
|
||||
殃视
|
||||
贪污腐败
|
||||
强制拆除
|
||||
形式主义
|
||||
政治风波
|
||||
太子党
|
||||
上海帮
|
||||
北京帮
|
||||
清华帮
|
||||
红色贵族
|
||||
权贵集团
|
||||
河蟹社会
|
||||
喝血社会
|
||||
九风
|
||||
9风
|
||||
十七大
|
||||
十7大
|
||||
17da
|
||||
九学
|
||||
9学
|
||||
四风
|
||||
4风
|
||||
双规
|
||||
南街村
|
||||
最淫官员
|
||||
警匪
|
||||
官匪
|
||||
独夫民贼
|
||||
官商勾结
|
||||
城管暴力执法
|
||||
强制捐款
|
||||
毒豺
|
||||
一党执政
|
||||
一党专制
|
||||
一党专政
|
||||
专制政权
|
||||
宪法法院
|
||||
胡平
|
||||
苏晓康
|
||||
贺卫方
|
||||
谭作人
|
||||
焦国标
|
||||
万润南
|
||||
张志新
|
||||
辛灝年
|
||||
高勤荣
|
||||
王炳章
|
||||
高智晟
|
||||
司马璐
|
||||
刘晓竹
|
||||
刘宾雁
|
||||
魏京生
|
||||
寻找林昭的灵魂
|
||||
别梦成灰
|
||||
谁是新中国
|
||||
讨伐中宣部
|
||||
异议人士
|
||||
民运人士
|
||||
启蒙派
|
||||
选国家主席
|
||||
民一主
|
||||
min主
|
||||
民竹
|
||||
民珠
|
||||
民猪
|
||||
chinesedemocracy
|
||||
大赦国际
|
||||
国际特赦
|
||||
da选
|
||||
投公
|
||||
公头
|
||||
宪政
|
||||
平反
|
||||
党章
|
||||
维权
|
||||
昝爱宗
|
||||
宪章
|
||||
08宪
|
||||
08xz
|
||||
抿主
|
||||
敏主
|
||||
人拳
|
||||
人木又
|
||||
人quan
|
||||
renquan
|
||||
中国人权
|
||||
中国新民党
|
||||
群体事件
|
||||
群体性事件
|
||||
上中央
|
||||
去中央
|
||||
讨说法
|
||||
请愿
|
||||
请命
|
||||
公开信
|
||||
联名上书
|
||||
万人大签名
|
||||
万人骚动
|
||||
截访
|
||||
上访
|
||||
shangfang
|
||||
信访
|
||||
访民
|
||||
集合
|
||||
集会
|
||||
组织集体
|
||||
静坐
|
||||
静zuo
|
||||
jing坐
|
||||
示威
|
||||
示wei
|
||||
游行
|
||||
you行
|
||||
油行
|
||||
游xing
|
||||
youxing
|
||||
官逼民反
|
||||
反party
|
||||
反共
|
||||
抗议
|
||||
亢议
|
||||
抵制
|
||||
低制
|
||||
底制
|
||||
di制
|
||||
抵zhi
|
||||
dizhi
|
||||
boycott
|
||||
血书
|
||||
焚烧中国国旗
|
||||
baoluan
|
||||
流血冲突
|
||||
出现暴动
|
||||
发生暴动
|
||||
引起暴动
|
||||
baodong
|
||||
灭共
|
||||
杀毙
|
||||
罢工
|
||||
霸工
|
||||
罢考
|
||||
罢餐
|
||||
霸餐
|
||||
罢参
|
||||
罢饭
|
||||
罢吃
|
||||
罢食
|
||||
罢课
|
||||
罢ke
|
||||
霸课
|
||||
ba课
|
||||
罢教
|
||||
罢学
|
||||
罢运
|
||||
网特
|
||||
网评员
|
||||
网络评论员
|
||||
五毛党
|
||||
五毛们
|
||||
5毛党
|
||||
戒严
|
||||
jieyan
|
||||
jie严
|
||||
戒yan
|
||||
8的平方事件
|
||||
知道64
|
||||
八九年
|
||||
贰拾年
|
||||
2o年
|
||||
20和谐年
|
||||
贰拾周年
|
||||
六四
|
||||
六河蟹四
|
||||
六百度四
|
||||
六和谐四
|
||||
陆四
|
||||
陆肆
|
||||
198964
|
||||
5月35
|
||||
89年春夏之交
|
||||
64惨案
|
||||
64时期
|
||||
64运动
|
||||
4事件
|
||||
四事件
|
||||
北京风波
|
||||
学潮
|
||||
学chao
|
||||
xuechao
|
||||
学百度潮
|
||||
门安天
|
||||
天按门
|
||||
坦克压大学生
|
||||
民主女神
|
||||
历史的伤口
|
||||
高自联
|
||||
北高联
|
||||
血洗京城
|
||||
四二六社论
|
||||
王丹
|
||||
柴玲
|
||||
沈彤
|
||||
封从德
|
||||
王超华
|
||||
王维林
|
||||
吾尔开希
|
||||
吾尔开西
|
||||
侯德健
|
||||
阎明复
|
||||
方励之
|
||||
蒋捷连
|
||||
丁子霖
|
||||
辛灏年
|
||||
蒋彦永
|
||||
严家其
|
||||
陈一咨
|
||||
中华局域网
|
||||
党的喉舌
|
||||
互联网审查
|
||||
当局严密封锁
|
||||
新闻封锁
|
||||
封锁消息
|
||||
爱国者同盟
|
||||
关闭所有论坛
|
||||
网络封锁
|
||||
金盾工程
|
||||
gfw
|
||||
无界浏览
|
||||
无界网络
|
||||
自由门
|
||||
何清涟
|
||||
中国的陷阱
|
||||
汪兆钧
|
||||
记者无疆界
|
||||
境外媒体
|
||||
维基百科
|
||||
纽约时报
|
||||
bbc中文网
|
||||
华盛顿邮报
|
||||
世界日报
|
||||
东森新闻网
|
||||
东森电视
|
||||
星岛日报
|
||||
wikipedia
|
||||
youtube
|
||||
googleblogger
|
||||
美国广播公司
|
||||
英国金融时报
|
||||
自由亚洲
|
||||
自由时报
|
||||
中国时报
|
||||
反分裂
|
||||
威胁论
|
||||
左翼联盟
|
||||
钓鱼岛
|
||||
保钓组织
|
||||
主权
|
||||
弓单
|
||||
火乍
|
||||
木仓
|
||||
石肖
|
||||
核蛋
|
||||
步qiang
|
||||
bao炸
|
||||
爆zha
|
||||
baozha
|
||||
zha药
|
||||
zha弹
|
||||
炸dan
|
||||
炸yao
|
||||
zhadan
|
||||
zhayao
|
||||
hmtd
|
||||
三硝基甲苯
|
||||
六氟化铀
|
||||
炸药配方
|
||||
弹药配方
|
||||
炸弹配方
|
||||
皮箱炸弹
|
||||
火药配方
|
||||
人体炸弹
|
||||
人肉炸弹
|
||||
解放军
|
||||
兵力部署
|
||||
军转
|
||||
军事社
|
||||
8341部队
|
||||
第21集团军
|
||||
七大军区
|
||||
7大军区
|
||||
北京军区
|
||||
沈阳军区
|
||||
济南军区
|
||||
成都军区
|
||||
广州军区
|
||||
南京军区
|
||||
兰州军区
|
||||
颜色革命
|
||||
规模冲突
|
||||
塔利班
|
||||
基地组织
|
||||
恐怖分子
|
||||
恐怖份子
|
||||
三股势力
|
||||
印尼屠华
|
||||
印尼事件
|
||||
蒋公纪念歌
|
||||
马英九
|
||||
mayingjiu
|
||||
李天羽
|
||||
苏贞昌
|
||||
林文漪
|
||||
陈水扁
|
||||
陈s扁
|
||||
陈随便
|
||||
阿扁
|
||||
a扁
|
||||
告全国同胞书
|
||||
台百度湾
|
||||
台完
|
||||
台wan
|
||||
taiwan
|
||||
台弯
|
||||
湾台
|
||||
台湾国
|
||||
台湾共和国
|
||||
台军
|
||||
台独
|
||||
台毒
|
||||
台du
|
||||
taidu
|
||||
twdl
|
||||
一中一台
|
||||
打台湾
|
||||
两岸战争
|
||||
攻占台湾
|
||||
支持台湾
|
||||
进攻台湾
|
||||
占领台湾
|
||||
统一台湾
|
||||
收复台湾
|
||||
登陆台湾
|
||||
解放台湾
|
||||
解放tw
|
||||
解决台湾
|
||||
光复民国
|
||||
台湾独立
|
||||
台湾问题
|
||||
台海问题
|
||||
台海危机
|
||||
台海统一
|
||||
台海大战
|
||||
台海战争
|
||||
台海局势
|
||||
入联
|
||||
入耳关
|
||||
中华联邦
|
||||
国民党
|
||||
x民党
|
||||
民进党
|
||||
青天白日
|
||||
闹独立
|
||||
duli
|
||||
fenlie
|
||||
日本万岁
|
||||
小泽一郎
|
||||
劣等民族
|
||||
汉人
|
||||
汉维
|
||||
维汉
|
||||
维吾
|
||||
吾尔
|
||||
热比娅
|
||||
伊力哈木
|
||||
疆独
|
||||
东突厥斯坦解放组织
|
||||
东突解放组织
|
||||
蒙古分裂分子
|
||||
列确
|
||||
阿旺晋美
|
||||
藏人
|
||||
臧人
|
||||
zang人
|
||||
藏民
|
||||
藏m
|
||||
达赖
|
||||
赖达
|
||||
dalai
|
||||
哒赖
|
||||
dl喇嘛
|
||||
丹增嘉措
|
||||
打砸抢
|
||||
西独
|
||||
藏独
|
||||
葬独
|
||||
臧独
|
||||
藏毒
|
||||
藏du
|
||||
zangdu
|
||||
支持zd
|
||||
藏暴乱
|
||||
藏青会
|
||||
雪山狮子旗
|
||||
拉萨
|
||||
啦萨
|
||||
啦沙
|
||||
啦撒
|
||||
拉sa
|
||||
lasa
|
||||
la萨
|
||||
西藏
|
||||
藏西
|
||||
藏春阁
|
||||
藏獨
|
||||
藏独
|
||||
藏独立
|
||||
藏妇会
|
||||
藏青会
|
||||
藏字石
|
||||
xizang
|
||||
xi藏
|
||||
x藏
|
||||
西z
|
||||
tibet
|
||||
希葬
|
||||
希藏
|
||||
硒藏
|
||||
稀藏
|
||||
西脏
|
||||
西奘
|
||||
西葬
|
||||
西臧
|
||||
援藏
|
||||
bjork
|
||||
王千源
|
||||
安拉
|
||||
回教
|
||||
回族
|
||||
回回
|
||||
回民
|
||||
穆斯林
|
||||
穆罕穆德
|
||||
穆罕默德
|
||||
默罕默德
|
||||
伊斯兰
|
||||
圣战组织
|
||||
清真
|
||||
清zhen
|
||||
qingzhen
|
||||
真主
|
||||
阿拉伯
|
||||
高丽棒子
|
||||
韩国狗
|
||||
满洲第三帝国
|
||||
满狗
|
||||
鞑子
|
||||
江丑闻
|
||||
江嫡系
|
||||
江毒
|
||||
江独裁
|
||||
江蛤蟆
|
||||
江核心
|
||||
江黑心
|
||||
江胡内斗
|
||||
江祸心
|
||||
江家帮
|
||||
江绵恒
|
||||
江派和胡派
|
||||
江派人马
|
||||
江泉集团
|
||||
江人马
|
||||
江三条腿
|
||||
江氏集团
|
||||
江氏家族
|
||||
江氏政治局
|
||||
江氏政治委员
|
||||
江梳头
|
||||
江太上
|
||||
江戏子
|
||||
江系人
|
||||
江系人马
|
||||
江宰民
|
||||
江贼
|
||||
江贼民
|
||||
江主席
|
||||
麻果丸
|
||||
麻将透
|
||||
麻醉弹
|
||||
麻醉狗
|
||||
麻醉枪
|
||||
麻醉槍
|
||||
麻醉药
|
||||
麻醉藥
|
||||
台独
|
||||
台湾版假币
|
||||
台湾独立
|
||||
台湾国
|
||||
台湾应该独立
|
||||
台湾有权独立
|
||||
天灭中共
|
||||
中共帮凶
|
||||
中共保命
|
||||
中共裁
|
||||
中共党文化
|
||||
中共腐败
|
||||
中共的血旗
|
||||
中共的罪恶
|
||||
中共帝国
|
||||
中共独裁
|
||||
中共封锁
|
||||
中共封网
|
||||
中共腐败
|
||||
中共黑
|
||||
中共黑帮
|
||||
中共解体
|
||||
中共近期权力斗争
|
||||
中共恐惧
|
||||
中共权力斗争
|
||||
中共任用
|
||||
中共退党
|
||||
中共洗脑
|
||||
中共邪教
|
||||
中共政治游戏
|
||||
中共邪毒素
|
||||
123
common/utils/go-sensitive-word-1.3.3/text/广告类型.txt
Normal file
123
common/utils/go-sensitive-word-1.3.3/text/广告类型.txt
Normal file
@@ -0,0 +1,123 @@
|
||||
兼职
|
||||
招聘
|
||||
网络
|
||||
QQ
|
||||
招聘
|
||||
有意者
|
||||
到货
|
||||
本店
|
||||
代购
|
||||
扣扣
|
||||
客服
|
||||
微店
|
||||
兼职
|
||||
兼值
|
||||
淘宝
|
||||
小姐
|
||||
妓女
|
||||
包夜
|
||||
3P
|
||||
LY
|
||||
JS
|
||||
狼友
|
||||
技师
|
||||
推油
|
||||
胸推
|
||||
BT
|
||||
毒龙
|
||||
口爆
|
||||
兼职
|
||||
楼凤
|
||||
足交
|
||||
口暴
|
||||
口交
|
||||
全套
|
||||
SM
|
||||
桑拿
|
||||
吞精
|
||||
咪咪
|
||||
婊子
|
||||
乳方
|
||||
操逼
|
||||
全职
|
||||
性伴侣
|
||||
网购
|
||||
网络工作
|
||||
代理
|
||||
专业代理
|
||||
帮忙点一下
|
||||
帮忙点下
|
||||
请点击进入
|
||||
详情请进入
|
||||
私人侦探
|
||||
私家侦探
|
||||
针孔摄象
|
||||
调查婚外情
|
||||
信用卡提现
|
||||
无抵押贷款
|
||||
广告代理
|
||||
原音铃声
|
||||
借腹生子
|
||||
找个妈妈
|
||||
找个爸爸
|
||||
代孕妈妈
|
||||
代生孩子
|
||||
代开发票
|
||||
腾讯客服电话
|
||||
销售热线
|
||||
免费订购热线
|
||||
低价出售
|
||||
款到发货
|
||||
回复可见
|
||||
连锁加盟
|
||||
加盟连锁
|
||||
免费二级域名
|
||||
免费使用
|
||||
免费索取
|
||||
蚁力神
|
||||
婴儿汤
|
||||
售肾
|
||||
刻章办
|
||||
买小车
|
||||
套牌车
|
||||
玛雅网
|
||||
电脑传讯
|
||||
视频来源
|
||||
下载速度
|
||||
高清在线
|
||||
全集在线
|
||||
在线播放
|
||||
txt下载
|
||||
六位qq
|
||||
6位qq
|
||||
位的qq
|
||||
个qb
|
||||
送qb
|
||||
用刀横向切腹
|
||||
完全自杀手册
|
||||
四海帮
|
||||
足球投注
|
||||
地下钱庄
|
||||
中国复兴党
|
||||
阿波罗网
|
||||
曾道人
|
||||
六合彩
|
||||
改卷内幕
|
||||
替考试
|
||||
隐形耳机
|
||||
出售答案
|
||||
考中答案
|
||||
答an
|
||||
da案
|
||||
资金周转
|
||||
救市
|
||||
股市圈钱
|
||||
崩盘
|
||||
资金短缺
|
||||
证监会
|
||||
质押贷款
|
||||
小额贷款
|
||||
周小川
|
||||
刘明康
|
||||
尚福林
|
||||
孔丹
|
||||
326
common/utils/go-sensitive-word-1.3.3/text/政治类型.txt
Normal file
326
common/utils/go-sensitive-word-1.3.3/text/政治类型.txt
Normal file
@@ -0,0 +1,326 @@
|
||||
习近平
|
||||
平近习
|
||||
xjp
|
||||
习太子
|
||||
习明泽
|
||||
老习
|
||||
温家宝
|
||||
温加宝
|
||||
温x
|
||||
温jia宝
|
||||
温宝宝
|
||||
温加饱
|
||||
温加保
|
||||
张培莉
|
||||
温云松
|
||||
温如春
|
||||
温jb
|
||||
胡温
|
||||
胡x
|
||||
胡jt
|
||||
胡boss
|
||||
胡总
|
||||
胡王八
|
||||
hujintao
|
||||
胡jintao
|
||||
胡j涛
|
||||
胡惊涛
|
||||
胡景涛
|
||||
胡紧掏
|
||||
湖紧掏
|
||||
胡紧套
|
||||
锦涛
|
||||
hjt
|
||||
胡派
|
||||
胡主席
|
||||
刘永清
|
||||
胡海峰
|
||||
胡海清
|
||||
江泽民
|
||||
民泽江
|
||||
江胡
|
||||
江哥
|
||||
江主席
|
||||
江书记
|
||||
江浙闽
|
||||
江沢民
|
||||
江浙民
|
||||
择民
|
||||
则民
|
||||
茳泽民
|
||||
zemin
|
||||
ze民
|
||||
老江
|
||||
老j
|
||||
江core
|
||||
江x
|
||||
江派
|
||||
江zm
|
||||
jzm
|
||||
江戏子
|
||||
江蛤蟆
|
||||
江某某
|
||||
江贼
|
||||
江猪
|
||||
江氏集团
|
||||
江绵恒
|
||||
江绵康
|
||||
王冶坪
|
||||
江泽慧
|
||||
邓小平
|
||||
平小邓
|
||||
xiao平
|
||||
邓xp
|
||||
邓晓平
|
||||
邓朴方
|
||||
邓榕
|
||||
邓质方
|
||||
毛泽东
|
||||
猫泽东
|
||||
猫则东
|
||||
猫贼洞
|
||||
毛zd
|
||||
毛zx
|
||||
z东
|
||||
ze东
|
||||
泽d
|
||||
zedong
|
||||
毛太祖
|
||||
毛相
|
||||
主席画像
|
||||
改革历程
|
||||
朱镕基
|
||||
朱容基
|
||||
朱镕鸡
|
||||
朱容鸡
|
||||
朱云来
|
||||
李鹏
|
||||
李peng
|
||||
里鹏
|
||||
李月月鸟
|
||||
李小鹏
|
||||
李小琳
|
||||
华主席
|
||||
华国
|
||||
国锋
|
||||
国峰
|
||||
锋同志
|
||||
白春礼
|
||||
薄熙来
|
||||
薄一波
|
||||
蔡赴朝
|
||||
蔡武
|
||||
曹刚川
|
||||
常万全
|
||||
陈炳德
|
||||
陈德铭
|
||||
陈建国
|
||||
陈良宇
|
||||
陈绍基
|
||||
陈同海
|
||||
陈至立
|
||||
戴秉国
|
||||
丁一平
|
||||
董建华
|
||||
杜德印
|
||||
杜世成
|
||||
傅锐
|
||||
郭伯雄
|
||||
郭金龙
|
||||
贺国强
|
||||
胡春华
|
||||
耀邦
|
||||
华建敏
|
||||
黄华华
|
||||
黄丽满
|
||||
黄兴国
|
||||
回良玉
|
||||
贾庆林
|
||||
贾廷安
|
||||
靖志远
|
||||
李长春
|
||||
李春城
|
||||
李建国
|
||||
李克强
|
||||
李岚清
|
||||
李沛瑶
|
||||
李荣融
|
||||
李瑞环
|
||||
李铁映
|
||||
李先念
|
||||
李学举
|
||||
李源潮
|
||||
栗智
|
||||
梁光烈
|
||||
廖锡龙
|
||||
林树森
|
||||
林炎志
|
||||
林左鸣
|
||||
令计划
|
||||
柳斌杰
|
||||
刘奇葆
|
||||
刘少奇
|
||||
刘延东
|
||||
刘云山
|
||||
刘志军
|
||||
龙新民
|
||||
路甬祥
|
||||
罗箭
|
||||
吕祖善
|
||||
马飚
|
||||
马恺
|
||||
孟建柱
|
||||
欧广源
|
||||
强卫
|
||||
沈跃跃
|
||||
宋平顺
|
||||
粟戎生
|
||||
苏树林
|
||||
孙家正
|
||||
铁凝
|
||||
屠光绍
|
||||
王东明
|
||||
汪东兴
|
||||
王鸿举
|
||||
王沪宁
|
||||
王乐泉
|
||||
王洛林
|
||||
王岐山
|
||||
王胜俊
|
||||
王太华
|
||||
王学军
|
||||
王兆国
|
||||
王振华
|
||||
吴邦国
|
||||
吴定富
|
||||
吴官正
|
||||
无官正
|
||||
吴胜利
|
||||
吴仪
|
||||
奚国华
|
||||
习仲勋
|
||||
徐才厚
|
||||
许其亮
|
||||
徐绍史
|
||||
杨洁篪
|
||||
叶剑英
|
||||
由喜贵
|
||||
于幼军
|
||||
俞正声
|
||||
袁纯清
|
||||
曾培炎
|
||||
曾庆红
|
||||
曾宪梓
|
||||
曾荫权
|
||||
张德江
|
||||
张定发
|
||||
张高丽
|
||||
张立昌
|
||||
张荣坤
|
||||
张志国
|
||||
赵洪祝
|
||||
紫阳
|
||||
周生贤
|
||||
周永康
|
||||
朱海仑
|
||||
中南海
|
||||
大陆当局
|
||||
中国当局
|
||||
北京当局
|
||||
共产党
|
||||
党产共
|
||||
共贪党
|
||||
阿共
|
||||
产党共
|
||||
公产党
|
||||
工产党
|
||||
共c党
|
||||
共x党
|
||||
共铲
|
||||
供产
|
||||
共惨
|
||||
供铲党
|
||||
供铲谠
|
||||
供铲裆
|
||||
共残党
|
||||
共残主义
|
||||
共产主义的幽灵
|
||||
拱铲
|
||||
老共
|
||||
中共
|
||||
中珙
|
||||
中gong
|
||||
gc党
|
||||
贡挡
|
||||
gong党
|
||||
g产
|
||||
狗产蛋
|
||||
共残裆
|
||||
恶党
|
||||
邪党
|
||||
共产专制
|
||||
共产王朝
|
||||
裆中央
|
||||
土共
|
||||
土g
|
||||
共狗
|
||||
g匪
|
||||
共匪
|
||||
仇共
|
||||
政府
|
||||
症腐
|
||||
政腐
|
||||
政付
|
||||
正府
|
||||
政俯
|
||||
政f
|
||||
zhengfu
|
||||
政zhi
|
||||
挡中央
|
||||
档中央
|
||||
中央领导
|
||||
中国zf
|
||||
中央zf
|
||||
国wu院
|
||||
中华帝国
|
||||
gong和
|
||||
大陆官方
|
||||
北京政权
|
||||
江泽民
|
||||
胡锦涛
|
||||
温家宝
|
||||
习近平
|
||||
习仲勋
|
||||
贺国强
|
||||
贺子珍
|
||||
周永康
|
||||
李长春
|
||||
李德生
|
||||
王岐山
|
||||
姚依林
|
||||
回良玉
|
||||
李源潮
|
||||
李干成
|
||||
戴秉国
|
||||
黄镇
|
||||
刘延东
|
||||
刘瑞龙
|
||||
俞正声
|
||||
黄敬
|
||||
薄熙
|
||||
薄一波
|
||||
周小川
|
||||
周建南
|
||||
温云松
|
||||
徐明
|
||||
江泽慧
|
||||
江绵恒
|
||||
江绵康
|
||||
李小鹏
|
||||
李鹏
|
||||
李小琳
|
||||
朱云来
|
||||
朱容基
|
||||
法轮功
|
||||
李洪志
|
||||
新疆骚乱
|
||||
178
common/utils/go-sensitive-word-1.3.3/text/暴恐词库.txt
Normal file
178
common/utils/go-sensitive-word-1.3.3/text/暴恐词库.txt
Normal file
@@ -0,0 +1,178 @@
|
||||
福音会
|
||||
中国教徒
|
||||
统一教
|
||||
观音法门
|
||||
清海无上师
|
||||
盘古
|
||||
李洪志
|
||||
志洪李
|
||||
李宏志
|
||||
轮功
|
||||
法轮
|
||||
轮法功
|
||||
三去车仑
|
||||
氵去车仑
|
||||
发论工
|
||||
法x功
|
||||
法o功
|
||||
法0功
|
||||
法一轮一功
|
||||
轮子功
|
||||
车仑工力
|
||||
法lun
|
||||
fa轮
|
||||
法lg
|
||||
flg
|
||||
fl功
|
||||
falungong
|
||||
大法弟子
|
||||
大纪元
|
||||
dajiyuan
|
||||
明慧网
|
||||
明慧周报
|
||||
正见网
|
||||
新唐人
|
||||
伪火
|
||||
退党
|
||||
tuidang
|
||||
退dang
|
||||
超越红墙
|
||||
自fen
|
||||
真善忍
|
||||
九评
|
||||
9评
|
||||
9ping
|
||||
九ping
|
||||
jiuping
|
||||
藏字石
|
||||
集体自杀
|
||||
自sha
|
||||
zi杀
|
||||
suicide
|
||||
titor
|
||||
逢8必灾
|
||||
逢八必灾
|
||||
逢9必乱
|
||||
逢九必乱
|
||||
朱瑟里诺
|
||||
根达亚文明
|
||||
诺查丹玛斯
|
||||
人类灭亡进程表
|
||||
按照马雅历法
|
||||
推背图
|
||||
推bei图
|
||||
济世灵文
|
||||
诸世纪
|
||||
电狗
|
||||
电话定位器
|
||||
电话拦截器
|
||||
电话窃听
|
||||
电话监
|
||||
电话交友
|
||||
电话追杀系统
|
||||
电击枪
|
||||
电鸡
|
||||
电警棒
|
||||
枪出售
|
||||
枪的制
|
||||
枪货到
|
||||
枪决女犯
|
||||
枪模
|
||||
枪手
|
||||
枪销售
|
||||
枪械制
|
||||
枪子弹
|
||||
售步枪
|
||||
售纯度
|
||||
售单管
|
||||
售弹簧刀
|
||||
售防身
|
||||
售狗子
|
||||
售虎头
|
||||
售火药
|
||||
售假币
|
||||
售健卫
|
||||
售军用
|
||||
售猎枪
|
||||
售氯胺
|
||||
售麻醉
|
||||
售枪支
|
||||
售热武
|
||||
售三棱
|
||||
售手枪
|
||||
售五四
|
||||
售一元硬
|
||||
售子弹
|
||||
售左轮
|
||||
亚砷(酸)酐
|
||||
亚砷酸钾
|
||||
亚砷酸钠
|
||||
亚硒酸
|
||||
亚硒酸二钠
|
||||
亚硒酸镁
|
||||
亚硒酸钠
|
||||
亚硒酸氢钠
|
||||
亚硝酸乙酯
|
||||
亚硝酰乙氧
|
||||
氧化二丁基锡
|
||||
氧化汞
|
||||
氧化铊
|
||||
氧化亚铊
|
||||
氧氯化磷
|
||||
原装弹
|
||||
原子弹方法
|
||||
原子弹清单
|
||||
安眠酮
|
||||
代血浆
|
||||
普萘洛尔
|
||||
呋塞米
|
||||
西布曲明
|
||||
testosterone
|
||||
胰岛素样生长因子
|
||||
促红细胞生成素
|
||||
地西泮
|
||||
尼可刹米
|
||||
甲睾酮
|
||||
adrenaline
|
||||
erythropoietin
|
||||
地奈德
|
||||
莫达非尼
|
||||
氯噻嗪
|
||||
苯巴比妥
|
||||
促性腺激素
|
||||
泼尼松
|
||||
麻黄草
|
||||
雄烯二醇
|
||||
地塞米松
|
||||
tamoxifen
|
||||
strychnine
|
||||
androst
|
||||
新型毒品
|
||||
杜冷丁
|
||||
兴奋剂
|
||||
mdma
|
||||
海洛因
|
||||
海luo因
|
||||
heroin
|
||||
diamorphine
|
||||
diacetylmorphine
|
||||
鸦片
|
||||
阿芙蓉
|
||||
咖啡因
|
||||
cocain
|
||||
三唑仑
|
||||
美沙酮
|
||||
麻古
|
||||
k粉
|
||||
凯他敏
|
||||
ketamine
|
||||
冰毒
|
||||
苯丙胺
|
||||
cannabis
|
||||
大麻
|
||||
爱他死
|
||||
氯胺酮
|
||||
benzodiazepines
|
||||
甲基安非他明
|
||||
吗啡
|
||||
安非他命
|
||||
571
common/utils/go-sensitive-word-1.3.3/text/民生词库.txt
Normal file
571
common/utils/go-sensitive-word-1.3.3/text/民生词库.txt
Normal file
@@ -0,0 +1,571 @@
|
||||
打人
|
||||
打人
|
||||
拆迁
|
||||
拆迁
|
||||
纠纷
|
||||
纠纷
|
||||
盗窃
|
||||
盗窃
|
||||
安眠酮
|
||||
代药物毒品类:血浆
|
||||
普萘洛尔
|
||||
呋塞米
|
||||
西布曲明
|
||||
testosterone
|
||||
胰岛素样生长因子
|
||||
促红细胞生成素
|
||||
地西泮
|
||||
尼可刹米
|
||||
甲睾酮
|
||||
adrenaline
|
||||
erythropoietin
|
||||
地奈德
|
||||
莫达非尼
|
||||
氯噻嗪
|
||||
苯巴比妥
|
||||
促性腺激素
|
||||
泼尼松
|
||||
麻黄草
|
||||
雄烯二醇
|
||||
地塞米松
|
||||
tamoxifen
|
||||
strychnine
|
||||
androst
|
||||
新型毒品
|
||||
杜冷丁
|
||||
兴奋剂
|
||||
mdma
|
||||
海洛因
|
||||
海luo因
|
||||
heroin
|
||||
diamorphine
|
||||
diacetylmorphine
|
||||
鸦片
|
||||
阿芙蓉
|
||||
咖啡因
|
||||
cocain
|
||||
三唑仑
|
||||
美沙酮
|
||||
麻古
|
||||
k粉
|
||||
凯他敏
|
||||
ketamine
|
||||
冰毒
|
||||
苯丙胺
|
||||
cannabis
|
||||
大麻
|
||||
爱他死
|
||||
氯胺酮
|
||||
benzodiazepines
|
||||
甲基安非他明
|
||||
安非他命
|
||||
吗啡
|
||||
morphine
|
||||
摇头丸
|
||||
迷药
|
||||
乖乖粉
|
||||
narcotic
|
||||
麻醉药
|
||||
精神药品
|
||||
专业代理
|
||||
帮忙点一下
|
||||
帮忙点下
|
||||
请点击进入
|
||||
详情请进入
|
||||
私人侦探
|
||||
私家侦探
|
||||
针孔摄象
|
||||
调查婚外情
|
||||
信用卡提现
|
||||
无抵押贷款
|
||||
广告代理
|
||||
原音铃声
|
||||
借腹生子
|
||||
找个妈妈
|
||||
找个爸爸
|
||||
代孕妈妈
|
||||
代生孩子
|
||||
代开发票
|
||||
腾讯客服电话
|
||||
销售热线
|
||||
免费订购热线
|
||||
低价出售
|
||||
款到发货
|
||||
回复可见
|
||||
连锁加盟
|
||||
加盟连锁
|
||||
免费二级域名
|
||||
免费使用
|
||||
免费索取
|
||||
蚁力神
|
||||
婴儿汤
|
||||
售肾
|
||||
刻章办
|
||||
买小车
|
||||
套牌车
|
||||
玛雅网
|
||||
电脑传讯
|
||||
视频来源
|
||||
下载速度
|
||||
高清在线
|
||||
全集在线
|
||||
在线播放
|
||||
txt下载
|
||||
六位qq
|
||||
6位qq
|
||||
位的qq
|
||||
个qb
|
||||
送qb
|
||||
用刀横向切腹
|
||||
完全自杀手册
|
||||
四海帮
|
||||
足球投注
|
||||
地下钱庄
|
||||
中国复兴党
|
||||
阿波罗网
|
||||
曾道人
|
||||
六合彩
|
||||
改卷内幕
|
||||
替考试
|
||||
隐形耳机
|
||||
出售答案
|
||||
考中答案
|
||||
答an
|
||||
da案
|
||||
资金周转
|
||||
救市
|
||||
股市圈钱
|
||||
崩盘
|
||||
资金短缺
|
||||
证监会
|
||||
质押贷款
|
||||
小额贷款
|
||||
周小川
|
||||
刘明康
|
||||
尚福林
|
||||
孔丹
|
||||
汉芯造假
|
||||
杨树宽
|
||||
中印边界谈判结果
|
||||
喂奶门
|
||||
摸nai门
|
||||
酒瓶门
|
||||
脱裤门
|
||||
75事件
|
||||
乌鲁木齐
|
||||
新疆骚乱
|
||||
针刺
|
||||
打针
|
||||
食堂涨价
|
||||
饭菜涨价
|
||||
h1n1
|
||||
瘟疫爆发
|
||||
yangjia
|
||||
y佳
|
||||
yang佳
|
||||
杨佳
|
||||
杨j
|
||||
袭警
|
||||
杀警
|
||||
武侯祠
|
||||
川b26931
|
||||
贺立旗
|
||||
周正毅
|
||||
px项目
|
||||
骂四川
|
||||
家l福
|
||||
家le福
|
||||
加了服
|
||||
麦当劳被砸
|
||||
豆腐渣
|
||||
这不是天灾
|
||||
龙小霞
|
||||
震其国土
|
||||
yuce
|
||||
提前预测
|
||||
地震预测
|
||||
隐瞒地震
|
||||
李四光预测
|
||||
蟾蜍迁徙
|
||||
地震来得更猛烈
|
||||
八级地震毫无预报
|
||||
踩踏事故
|
||||
聂树斌
|
||||
万里大造林
|
||||
陈相贵
|
||||
张丹红
|
||||
尹方明
|
||||
李树菲
|
||||
王奉友
|
||||
零八奥运艰
|
||||
惨奥
|
||||
奥晕
|
||||
凹晕
|
||||
懊运
|
||||
懊孕
|
||||
奥孕
|
||||
奥你妈的运
|
||||
反奥
|
||||
628事件
|
||||
weng安
|
||||
wengan
|
||||
翁安
|
||||
瓮安事件
|
||||
化工厂爆炸
|
||||
讨回工资
|
||||
代办发票
|
||||
代办各
|
||||
代办文
|
||||
代办学
|
||||
代办制
|
||||
代辦
|
||||
代表烦
|
||||
代开发票
|
||||
代開
|
||||
代考
|
||||
代理发票
|
||||
代理票据
|
||||
代您考
|
||||
代讨债
|
||||
代写毕
|
||||
代写论文
|
||||
代孕
|
||||
代追债
|
||||
考后付款
|
||||
考机构
|
||||
考考邓
|
||||
考联盟
|
||||
考前答案
|
||||
考前付
|
||||
考前密卷
|
||||
考前预测
|
||||
考试,答案
|
||||
考试,作弊器
|
||||
考试包过
|
||||
考试保
|
||||
考试答案
|
||||
考试机构
|
||||
考试联盟
|
||||
考试枪
|
||||
考试作弊
|
||||
考试作弊器
|
||||
考研考中
|
||||
考中答案
|
||||
透视功能
|
||||
透视镜
|
||||
透视扑
|
||||
透视器
|
||||
透视眼睛
|
||||
透视眼镜
|
||||
透视药
|
||||
透视仪
|
||||
打死经过
|
||||
打死人
|
||||
打砸办公
|
||||
打砸抢
|
||||
安眠酮
|
||||
代血浆
|
||||
普萘洛尔
|
||||
呋塞米
|
||||
西布曲明
|
||||
testosterone
|
||||
胰岛素样生长因子
|
||||
促红细胞生成素
|
||||
地西泮
|
||||
尼可刹米
|
||||
甲睾酮
|
||||
adrenaline
|
||||
erythropoietin
|
||||
地奈德
|
||||
莫达非尼
|
||||
氯噻嗪
|
||||
苯巴比妥
|
||||
促性腺激素
|
||||
泼尼松
|
||||
麻黄草
|
||||
雄烯二醇
|
||||
地塞米松
|
||||
tamoxifen
|
||||
strychnine
|
||||
androst
|
||||
新型毒品
|
||||
杜冷丁
|
||||
兴奋剂
|
||||
mdma
|
||||
海洛因
|
||||
海luo因
|
||||
heroin
|
||||
diamorphine
|
||||
diacetylmorphine
|
||||
鸦片
|
||||
阿芙蓉
|
||||
咖啡因
|
||||
cocain
|
||||
三唑仑
|
||||
美沙酮
|
||||
麻古
|
||||
k粉
|
||||
凯他敏
|
||||
ketamine
|
||||
冰毒
|
||||
苯丙胺
|
||||
cannabis
|
||||
大麻
|
||||
爱他死
|
||||
氯胺酮
|
||||
benzodiazepines
|
||||
甲基安非他明
|
||||
安非他命
|
||||
吗啡
|
||||
KC短信
|
||||
KC嘉年华
|
||||
短信广告
|
||||
短信群发
|
||||
短信群发器
|
||||
小6灵通
|
||||
短信商务广告
|
||||
段录定
|
||||
无界浏览
|
||||
无界浏览器
|
||||
无界
|
||||
无网界
|
||||
无网界浏览
|
||||
无帮国
|
||||
KC提示
|
||||
KC网站
|
||||
UP8新势力
|
||||
白皮书
|
||||
UP新势力
|
||||
移民
|
||||
易达网络卡
|
||||
安魂网
|
||||
罢工
|
||||
罢课
|
||||
纽崔莱七折
|
||||
手机复制
|
||||
手机铃声
|
||||
网关
|
||||
神通加持法
|
||||
全1球通
|
||||
如6意通
|
||||
清仓
|
||||
灵动卡
|
||||
答案卫星接收机
|
||||
高薪养廉
|
||||
考后付款
|
||||
佳静安定片
|
||||
航空母舰
|
||||
航空售票
|
||||
号码百事通
|
||||
考前发放
|
||||
成本价
|
||||
诚信通手机商城
|
||||
高利贷
|
||||
联4通
|
||||
黑庄
|
||||
黑手党
|
||||
黑车
|
||||
联通贵宾卡
|
||||
联总
|
||||
联总这声传单
|
||||
联总之声传单
|
||||
高息贷款
|
||||
高干子弟
|
||||
恭喜你的号码
|
||||
恭喜您的号码
|
||||
高干子女
|
||||
各个银行全称
|
||||
各种发票
|
||||
高官
|
||||
高官互调
|
||||
高官子女
|
||||
喝一送一
|
||||
卡号
|
||||
复制
|
||||
监听王
|
||||
传单
|
||||
旦科
|
||||
钓鱼岛
|
||||
钓鱼台
|
||||
当官靠后台
|
||||
党校安插亲信
|
||||
传九促三
|
||||
客户端非法字符
|
||||
刻章
|
||||
大麻树脂
|
||||
大麻油
|
||||
大法
|
||||
大法弟子
|
||||
dpp大法
|
||||
fa lun
|
||||
falu
|
||||
发抡
|
||||
发抡功
|
||||
洗脑
|
||||
下法轮
|
||||
发轮
|
||||
发伦
|
||||
发伦功
|
||||
发仑
|
||||
发沦
|
||||
发纶
|
||||
发论
|
||||
发论功
|
||||
发论公
|
||||
发正念
|
||||
发囵
|
||||
发愣
|
||||
发瞟
|
||||
罚抡
|
||||
罚伦
|
||||
罚仑
|
||||
罚沦
|
||||
罚纶
|
||||
罚囵
|
||||
筏抡
|
||||
筏轮
|
||||
筏伦
|
||||
筏仑
|
||||
筏沦
|
||||
筏纶
|
||||
筏论
|
||||
筏囵
|
||||
伐抡
|
||||
伐轮
|
||||
伐伦
|
||||
伐仑
|
||||
伐沦
|
||||
伐论
|
||||
伐囵
|
||||
乏抡
|
||||
乏轮
|
||||
乏伦
|
||||
乏仑
|
||||
乏沦
|
||||
乏纶
|
||||
乏论
|
||||
乏囵
|
||||
阀抡
|
||||
阀伦
|
||||
阀仑
|
||||
阀沦
|
||||
阀纶
|
||||
阀论
|
||||
阀囵
|
||||
法 轮 功
|
||||
法*功
|
||||
法.轮.功
|
||||
法L功
|
||||
法lun功
|
||||
法功
|
||||
法会
|
||||
法抡
|
||||
法抡功
|
||||
法轮
|
||||
法轮大法
|
||||
法轮佛法
|
||||
法轮功
|
||||
法伦
|
||||
法仑
|
||||
法沦
|
||||
法纶
|
||||
法论
|
||||
法十轮十功
|
||||
法西斯
|
||||
法院
|
||||
法正
|
||||
法谪
|
||||
法谪功
|
||||
法輪
|
||||
法囵
|
||||
法愣
|
||||
珐.輪功
|
||||
珐抡
|
||||
珐轮
|
||||
珐伦
|
||||
珐仑
|
||||
珐沦
|
||||
五不
|
||||
五不争鸣论坛
|
||||
五出三进
|
||||
五套功法
|
||||
邝锦文
|
||||
垡抡
|
||||
垡轮
|
||||
垡伦
|
||||
垡仑
|
||||
垡沦
|
||||
垡纶
|
||||
垡论
|
||||
垡囵
|
||||
茳澤民
|
||||
荭志
|
||||
闳志
|
||||
闵维方
|
||||
氵去
|
||||
氵去车仑工力
|
||||
转法轮
|
||||
砝抡
|
||||
砝轮
|
||||
砝伦
|
||||
砝仑
|
||||
砝沦
|
||||
砝纶
|
||||
真、善、忍
|
||||
真理教
|
||||
真善美
|
||||
真善忍
|
||||
砝论
|
||||
砝囵
|
||||
泓志
|
||||
屙民
|
||||
珐纶
|
||||
珐论
|
||||
珐囵
|
||||
falun
|
||||
Falundafa
|
||||
fa轮
|
||||
Flg
|
||||
弟子
|
||||
地下教会
|
||||
炼功
|
||||
梦网洪志
|
||||
轮大
|
||||
抡功
|
||||
轮功
|
||||
伦功
|
||||
摩门教
|
||||
三水法轮
|
||||
三唑仑
|
||||
天皇
|
||||
天怒
|
||||
天葬
|
||||
车臣
|
||||
达赖
|
||||
功法
|
||||
讲法
|
||||
基督
|
||||
基督教
|
||||
护法
|
||||
回教
|
||||
教徒
|
||||
功友
|
||||
大师
|
||||
达赖喇嘛
|
||||
虹志
|
||||
鸿志
|
||||
洪传
|
||||
贯通两极法
|
||||
光祖
|
||||
洪吟
|
||||
洪哲胜
|
||||
洪志
|
||||
宏法
|
||||
观世音
|
||||
宏志
|
||||
弘志
|
||||
古兰经
|
||||
红志
|
||||
车库
|
||||
经文
|
||||
车仑
|
||||
437
common/utils/go-sensitive-word-1.3.3/text/涉枪涉爆.txt
Normal file
437
common/utils/go-sensitive-word-1.3.3/text/涉枪涉爆.txt
Normal file
@@ -0,0 +1,437 @@
|
||||
出售雷管
|
||||
炸药
|
||||
炸药
|
||||
出售炸药
|
||||
出售炸药 电话
|
||||
制作火药配方
|
||||
炸药出售
|
||||
出售雷管炸药
|
||||
火药配方
|
||||
在家里做原子弹
|
||||
硝酸甘油炸弹制作
|
||||
TNT 炸弹的制作
|
||||
硝铵炸药配方
|
||||
硝酸甘油制作
|
||||
炸弹配方
|
||||
简易炸药
|
||||
火药制作简易炸弹
|
||||
炸弹制作
|
||||
硝酸甘油
|
||||
硝酸甘油炸弹制作方法
|
||||
手把手教你做炸弹
|
||||
恐怖分子傻瓜手册
|
||||
氢弹手工制作方法
|
||||
起爆器
|
||||
自制燃烧弹
|
||||
燃烧弹
|
||||
弹药制造方法
|
||||
液体炸药配方
|
||||
炸药配方与制作
|
||||
自制炸药配方
|
||||
tnt炸药成分
|
||||
炸药的制作
|
||||
tnt炸药配方
|
||||
各种炸药配方大全
|
||||
炸药的成分
|
||||
燃烧弹的制作方
|
||||
黑火药的配方
|
||||
黑火药的制作
|
||||
黑火药比例
|
||||
燃烧弹 制作
|
||||
黑火药配方比例
|
||||
黑火药的成分
|
||||
原子弹配方
|
||||
原子弹DIY教程
|
||||
C4炸药
|
||||
雷管出售
|
||||
制作硝化甘油
|
||||
DIY核弹
|
||||
核弹制作方法
|
||||
原子弹制作手册
|
||||
简易原子弹教程
|
||||
黑火药配方
|
||||
自制炸药方法
|
||||
教你怎么用土办法做武器
|
||||
莫洛托夫鸡尾酒的配方
|
||||
zz炸弹的制作方法
|
||||
C4炸药的成分
|
||||
炸药制造生产工艺
|
||||
原子弹制造完全手册
|
||||
「红烧兔子」大餐
|
||||
汽车炸弹制作
|
||||
人体炸弹制作流程
|
||||
炸弹制作从入门
|
||||
鸡尾酒炸弹制作
|
||||
集束炸弹制作
|
||||
硝酸铵的简便制取方法
|
||||
莫洛托夫燃烧弹
|
||||
塑胶炸弹
|
||||
用火药混合塑料
|
||||
高性能爆炸物质混合
|
||||
原子弹 制作方法
|
||||
手教你制作原子弹
|
||||
轻型巡航导弹的制作
|
||||
黑索金的制造过程
|
||||
Zha药制造进程
|
||||
购买自爆材料
|
||||
可塑炸弹制作方法
|
||||
C4塑胶炸药
|
||||
水浴法制TNT
|
||||
简易核弹头的制造
|
||||
高爆炸药的基本配方
|
||||
如何制硝化甘油
|
||||
燃烧剂的简易制备
|
||||
简易大威力炸弹
|
||||
炸弹制作入门
|
||||
硝酸甘油炸药制作
|
||||
基本配方是硝酸甘
|
||||
燃烧剂的简易制作
|
||||
制作性能优良的燃烧弹
|
||||
酸甘油炸药
|
||||
简易导弹制作
|
||||
核弹头的制造
|
||||
可塑炸弹制作
|
||||
炸药硝酸甘油制法
|
||||
原子弹制作方法
|
||||
火药的配方
|
||||
手教你做原子弹
|
||||
怎么用土办法做武器
|
||||
手把手教你制作原子弹
|
||||
燃烧弹的制作方法
|
||||
怎么自制燃烧弹
|
||||
TNT炸弹制作
|
||||
高爆炸药基本配方
|
||||
爆破和杀伤燃烧弹
|
||||
炸弹制作从入门到精
|
||||
写的炸弹制作教程
|
||||
原子弹制作 方法
|
||||
教你制作原子弹
|
||||
下硝化甘油的制作方法
|
||||
DIY原子弹
|
||||
原子弹制作
|
||||
炸药及其制造方法
|
||||
ATOM弹制造
|
||||
三分钟教你原子弹
|
||||
火药原理
|
||||
简易炸弹
|
||||
简易燃烧弹
|
||||
土炸药成份
|
||||
你怎么用土办法做武器
|
||||
燃烧弹制作
|
||||
燃烧瓶的制作方法
|
||||
炸弹制作手册 硫酸
|
||||
原子弹制作方法DIY
|
||||
汽油三分之一白糖混合
|
||||
炸药的制作配方
|
||||
燃烧弹的制作方
|
||||
炸药的配方
|
||||
如何自制燃烧弹
|
||||
标准炸弹教程
|
||||
黑火药和硝酸钾农药混合
|
||||
恐怖分子自己制造炸弹
|
||||
手柄制作炸弹引爆器
|
||||
制作炸弹首先要
|
||||
燃烧瓶制作
|
||||
出售炸药QQ
|
||||
出售气枪
|
||||
出售气枪 QQ
|
||||
出售气枪 电话
|
||||
出售手枪
|
||||
出售手枪 QQ
|
||||
出售手枪 电话
|
||||
出售猎枪
|
||||
出售猎枪 QQ
|
||||
出售猎枪 电话
|
||||
出售汽枪
|
||||
出售步枪
|
||||
出售狙击枪
|
||||
出售手狗
|
||||
出售气狗
|
||||
出售猎狗
|
||||
【手枪出售】联系电话
|
||||
64式手枪出售
|
||||
92式手枪出售
|
||||
出售:高仿真枪
|
||||
出售54式手枪
|
||||
出售M1911
|
||||
出售各类猎狗
|
||||
出售国产军用54手枪
|
||||
出售火枪 –游戏
|
||||
出售进口金属枪模
|
||||
出售仿真枪
|
||||
出售麻醉枪免收任何定金
|
||||
出售手枪=货到付款
|
||||
出售外国枪模
|
||||
出售袖珍手枪
|
||||
娥眉气枪出售
|
||||
防身手枪QQ
|
||||
防身武器手枪
|
||||
仿真枪QQ
|
||||
钢珠枪小口径步枪
|
||||
高压狗QQ
|
||||
高压气枪,气枪子弹
|
||||
高压气枪|电狗专卖
|
||||
高压气枪|气枪货到付款
|
||||
高压气枪专卖店
|
||||
各类军用枪
|
||||
各类军用枪支
|
||||
各式气枪出售
|
||||
工字牌气枪出售专卖
|
||||
气枪
|
||||
工字汽狗麻醉枪
|
||||
供应军用手枪
|
||||
供应汽枪
|
||||
购买枪支QQ
|
||||
国产汽狗专卖|气枪货
|
||||
集团出售手枪
|
||||
集团出售手枪气枪
|
||||
进口气枪,气枪子弹
|
||||
军用54出售
|
||||
军用77出售
|
||||
军用手枪钢珠枪
|
||||
里有汽枪出售
|
||||
猎枪出售/枪
|
||||
猎枪仿真枪QQ
|
||||
猎枪麻醉枪钢珠枪
|
||||
猎枪哪里有卖
|
||||
猎枪手枪买卖
|
||||
猎枪销售手枪销售气枪
|
||||
猎枪专卖店
|
||||
猎枪子弹底火专卖
|
||||
麻醉枪出售可验货
|
||||
麻醉枪猎枪军用
|
||||
买卖54狗
|
||||
买卖64狗
|
||||
买卖警察枪支
|
||||
买卖军狗
|
||||
买卖军用枪支
|
||||
卖64手枪
|
||||
卖92手枪
|
||||
卖钢珠枪QQ
|
||||
哪里能买到自制手枪
|
||||
哪里有钢珠枪
|
||||
哪里有连发猎枪买卖
|
||||
哪里有卖双管猎
|
||||
哪里有气枪卖
|
||||
哪里有枪出售
|
||||
哪里有真枪出售
|
||||
哪里有真枪卖买
|
||||
哪能买到真枪
|
||||
期出售手枪气枪猎
|
||||
气狗 高压气枪
|
||||
气狗出售 进口气狗
|
||||
气枪专卖网
|
||||
气枪/出售/专卖网
|
||||
气枪/猎枪/钢珠枪
|
||||
气枪仿真枪出售
|
||||
气枪购买|气枪组装
|
||||
气枪货到付款,汽狗出售
|
||||
气枪价格 仿真气枪
|
||||
气枪价格,气枪专卖店
|
||||
气枪看货加QQ
|
||||
气枪联系QQ
|
||||
气枪猎枪麻醉枪
|
||||
气枪迷魂药
|
||||
汽狗高压汽枪
|
||||
铅弹 上海工字气枪
|
||||
全金属仿真枪专卖
|
||||
热武器QQ
|
||||
三箭气枪出售
|
||||
手枪气* 枪猎
|
||||
手槍买卖自制手枪
|
||||
售枪购买手枪
|
||||
售手枪QQ
|
||||
司马仿真枪模型QQ
|
||||
淘宝气枪货到付款
|
||||
提供气狗专卖店
|
||||
提供专业及时的气狗
|
||||
秃鹰气枪货到付款
|
||||
锡峰气枪出售
|
||||
仙鹤气枪出售
|
||||
销售/专卖/买卖77式手枪
|
||||
销售电手狗
|
||||
销售气手狗
|
||||
销售小口径步枪
|
||||
销售运动步枪
|
||||
小口径秃鹰沙漠
|
||||
有军用枪支出售
|
||||
长期出 售手枪
|
||||
折叠狗QQ
|
||||
转让 猎枪
|
||||
子弹货到付款
|
||||
自制手枪哪里买
|
||||
自制手枪哪里有卖
|
||||
阻击枪/汽枪/高压气枪
|
||||
组装手枪
|
||||
最新销售汽狗
|
||||
出售警用手铐|仿真枪
|
||||
猎枪|真枪
|
||||
手枪|阻击枪
|
||||
弓弩专营
|
||||
弓弩专卖网货到付款
|
||||
弓弩专卖网
|
||||
弓弩专卖货到付款
|
||||
弓弩专卖店网
|
||||
弓弩专卖店
|
||||
弓弩专卖
|
||||
弓弩制作
|
||||
弓弩直销
|
||||
弓弩有限公司
|
||||
弓弩营销中心
|
||||
弓弩一百专卖店
|
||||
弓弩销售
|
||||
弓弩网
|
||||
弓弩网
|
||||
弓弩图纸
|
||||
弓弩特许经销
|
||||
弓弩狩猎网
|
||||
自制手弩
|
||||
追风弓弩麻醉箭专卖
|
||||
专业弓弩网
|
||||
中国战神军用弓弩
|
||||
中国弩弓专卖
|
||||
中国弓弩专卖网
|
||||
中国弓弩直销
|
||||
中国弓弩网
|
||||
中国弓弩狩猎网
|
||||
中国弓驽网
|
||||
制作简易弓弩
|
||||
郑州弓弩专卖
|
||||
赵氏弓弩专卖网
|
||||
赵氏弓弩专卖店
|
||||
赵氏弓弩专卖
|
||||
赵氏弓弩销售
|
||||
小型弓弩专卖店
|
||||
小猎人弓弩网
|
||||
狩猎器材弓弩专卖
|
||||
狩猎器材弓弩
|
||||
狩猎弓弩专卖网
|
||||
狩猎弓弩专卖
|
||||
狩猎弓弩麻醉箭
|
||||
手枪式折叠三用弩
|
||||
三利达弓弩专卖网
|
||||
三利达弓弩直营
|
||||
三利达弓弩配件
|
||||
三步倒药箭批发
|
||||
三步倒弩箭专卖
|
||||
三步倒麻醉弩箭销售
|
||||
三步倒麻醉箭专卖
|
||||
三步倒麻醉箭
|
||||
三步倒捕狗药
|
||||
军用弓弩专卖网
|
||||
军用弓弩专卖店
|
||||
军用弓弩批发
|
||||
军用弓弩公司
|
||||
供应三利达弓弩麻醉箭
|
||||
供应三步倒麻醉箭
|
||||
供应秦氏弓弩
|
||||
供应弩用麻醉箭
|
||||
供应弩捕狗箭
|
||||
供应麻醉箭三步倒
|
||||
供应麻醉箭批发
|
||||
供应麻醉箭
|
||||
供应军用弩折叠弩
|
||||
供应军用弓弩专卖
|
||||
供应精品弓弩
|
||||
供应弓弩麻醉箭
|
||||
供应弓弩
|
||||
供应钢珠弓弩
|
||||
弓弩商城专卖
|
||||
弓弩商城
|
||||
弓弩亲兄弟货到付款
|
||||
弓弩批发
|
||||
弓弩免定金货到付款
|
||||
弓弩麻醉箭
|
||||
弓弩麻醉镖
|
||||
弓弩论坛
|
||||
钢珠弓弩专卖网
|
||||
钢珠弓弩专卖店
|
||||
打狗弓弩三步倒
|
||||
麻醉弓弩专卖店
|
||||
出售军刀
|
||||
出售军刺
|
||||
出售弹簧刀
|
||||
出售三棱刀
|
||||
出售跳刀
|
||||
军刀网
|
||||
南方军刀网
|
||||
户外军刀网
|
||||
三棱军刺专卖
|
||||
出售开山刀军刺
|
||||
西点军刀网
|
||||
军刀专 卖
|
||||
戈博军刀
|
||||
阿兰德龙户外
|
||||
出售军品军刀
|
||||
勃朗宁军刀
|
||||
军刀军品网
|
||||
阿兰得龙野营刀具网
|
||||
出售军刺军刀
|
||||
警用刀具出售
|
||||
折刀专卖网
|
||||
阳江军品军刀网
|
||||
野营刀专卖
|
||||
砍刀精品折刀专卖
|
||||
匕首蝴蝶甩刀专卖
|
||||
军刀专卖军刺
|
||||
军刀专卖刀具批发
|
||||
军刀图片砍刀
|
||||
军刀网军刀专卖
|
||||
军刀价格军用刀具
|
||||
军品军刺网
|
||||
军刀军刺甩棍
|
||||
阳江刀具批发网
|
||||
北方先锋军刀
|
||||
正品军刺出售
|
||||
野营军刀出售
|
||||
开山刀砍刀出售
|
||||
仿品军刺出售
|
||||
军刀直刀专卖
|
||||
手工猎刀专卖
|
||||
自动跳刀专卖
|
||||
军刀电棍销售
|
||||
军刀甩棍销售
|
||||
美国军刀出售
|
||||
极端武力折刀
|
||||
防卫棍刀户外刀具
|
||||
阿兰德龙野营刀
|
||||
仿品军刺网
|
||||
野营砍刀户外军刀
|
||||
手工猎刀户外刀具
|
||||
中国户外刀具网
|
||||
西点军品军刀网
|
||||
野营开山刀军刺
|
||||
三利达弓弩军刀
|
||||
尼泊尔军刀出售
|
||||
防卫野营砍刀出售
|
||||
防卫著名军刀出售
|
||||
防卫棍刀出售
|
||||
防卫甩棍出售
|
||||
防卫电棍出售
|
||||
军刺野营砍刀出售
|
||||
著名精品折刀出售
|
||||
战术军刀出售
|
||||
刺刀专卖网
|
||||
户外军刀出售
|
||||
阳江刀具直销网
|
||||
冷钢刀具直销网
|
||||
防卫刀具直销网
|
||||
极端武力直销网
|
||||
刀具直销网
|
||||
军刀直销网
|
||||
直刀匕首直销网
|
||||
军刀匕首直销网
|
||||
折刀砍刀军品网
|
||||
野营刀具军品网
|
||||
阳江刀具军品网
|
||||
冷钢刀具军品网
|
||||
防卫刀具军品网
|
||||
极端武力军品网
|
||||
军用刀具军品网
|
||||
军刀直刀军品网
|
||||
折刀砍刀专卖
|
||||
野营刀具专卖
|
||||
阳江刀具专卖
|
||||
冷钢刀具专卖
|
||||
防卫刀具专卖
|
||||
出售美军现役军刀
|
||||
7746
common/utils/go-sensitive-word-1.3.3/text/网易前端过滤敏感词库.txt
Normal file
7746
common/utils/go-sensitive-word-1.3.3/text/网易前端过滤敏感词库.txt
Normal file
File diff suppressed because it is too large
Load Diff
304
common/utils/go-sensitive-word-1.3.3/text/色情类型.txt
Normal file
304
common/utils/go-sensitive-word-1.3.3/text/色情类型.txt
Normal file
@@ -0,0 +1,304 @@
|
||||
爱液
|
||||
按摩棒
|
||||
拔出来
|
||||
爆草
|
||||
包二奶
|
||||
暴干
|
||||
暴奸
|
||||
暴乳
|
||||
爆乳
|
||||
暴淫
|
||||
被操
|
||||
被插
|
||||
被干
|
||||
逼奸
|
||||
仓井空
|
||||
插暴
|
||||
操逼
|
||||
操黑
|
||||
操烂
|
||||
肏你
|
||||
肏死
|
||||
操死
|
||||
操我
|
||||
厕奴
|
||||
插比
|
||||
插b
|
||||
插逼
|
||||
插进
|
||||
插你
|
||||
插我
|
||||
插阴
|
||||
潮吹
|
||||
潮喷
|
||||
成人电影
|
||||
成人论坛
|
||||
成人色情
|
||||
成人网站
|
||||
成人文学
|
||||
成人小说
|
||||
艳情小说
|
||||
成人游戏
|
||||
吃精
|
||||
抽插
|
||||
春药
|
||||
大波
|
||||
大力抽送
|
||||
大乳
|
||||
荡妇
|
||||
荡女
|
||||
盗撮
|
||||
发浪
|
||||
放尿
|
||||
肥逼
|
||||
粉穴
|
||||
风月大陆
|
||||
干死你
|
||||
干穴
|
||||
肛交
|
||||
肛门
|
||||
龟头
|
||||
裹本
|
||||
国产av
|
||||
好嫩
|
||||
豪乳
|
||||
黑逼
|
||||
后庭
|
||||
后穴
|
||||
虎骑
|
||||
换妻俱乐部
|
||||
黄片
|
||||
几吧
|
||||
鸡吧
|
||||
鸡巴
|
||||
鸡奸
|
||||
妓女
|
||||
奸情
|
||||
叫床
|
||||
脚交
|
||||
精液
|
||||
就去日
|
||||
巨屌
|
||||
菊花洞
|
||||
菊门
|
||||
巨奶
|
||||
巨乳
|
||||
菊穴
|
||||
开苞
|
||||
口爆
|
||||
口活
|
||||
口交
|
||||
口射
|
||||
口淫
|
||||
裤袜
|
||||
狂操
|
||||
狂插
|
||||
浪逼
|
||||
浪妇
|
||||
浪叫
|
||||
浪女
|
||||
狼友
|
||||
聊性
|
||||
凌辱
|
||||
漏乳
|
||||
露b
|
||||
乱交
|
||||
乱伦
|
||||
轮暴
|
||||
轮操
|
||||
轮奸
|
||||
裸陪
|
||||
买春
|
||||
美逼
|
||||
美少妇
|
||||
美乳
|
||||
美腿
|
||||
美穴
|
||||
美幼
|
||||
秘唇
|
||||
迷奸
|
||||
密穴
|
||||
蜜穴
|
||||
蜜液
|
||||
摸奶
|
||||
摸胸
|
||||
母奸
|
||||
奈美
|
||||
奶子
|
||||
男奴
|
||||
内射
|
||||
嫩逼
|
||||
嫩女
|
||||
嫩穴
|
||||
捏弄
|
||||
女优
|
||||
炮友
|
||||
砲友
|
||||
喷精
|
||||
屁眼
|
||||
前凸后翘
|
||||
强jian
|
||||
强暴
|
||||
强奸处女
|
||||
情趣用品
|
||||
情色
|
||||
拳交
|
||||
全裸
|
||||
群交
|
||||
人妻
|
||||
人兽
|
||||
日逼
|
||||
日烂
|
||||
肉棒
|
||||
肉逼
|
||||
肉唇
|
||||
肉洞
|
||||
肉缝
|
||||
肉棍
|
||||
肉茎
|
||||
肉具
|
||||
揉乳
|
||||
肉穴
|
||||
肉欲
|
||||
乳爆
|
||||
乳房
|
||||
乳沟
|
||||
乳交
|
||||
乳头
|
||||
骚逼
|
||||
骚比
|
||||
骚女
|
||||
骚水
|
||||
骚穴
|
||||
色逼
|
||||
色界
|
||||
色猫
|
||||
色盟
|
||||
色情网站
|
||||
色区
|
||||
色色
|
||||
色诱
|
||||
色欲
|
||||
色b
|
||||
少年阿宾
|
||||
射爽
|
||||
射颜
|
||||
食精
|
||||
释欲
|
||||
兽奸
|
||||
兽交
|
||||
手淫
|
||||
兽欲
|
||||
熟妇
|
||||
熟母
|
||||
熟女
|
||||
爽片
|
||||
双臀
|
||||
死逼
|
||||
丝袜
|
||||
丝诱
|
||||
松岛枫
|
||||
酥痒
|
||||
汤加丽
|
||||
套弄
|
||||
体奸
|
||||
体位
|
||||
舔脚
|
||||
舔阴
|
||||
调教
|
||||
偷欢
|
||||
推油
|
||||
脱内裤
|
||||
文做
|
||||
舞女
|
||||
无修正
|
||||
吸精
|
||||
夏川纯
|
||||
相奸
|
||||
小逼
|
||||
校鸡
|
||||
小穴
|
||||
小xue
|
||||
性感妖娆
|
||||
性感诱惑
|
||||
性虎
|
||||
性饥渴
|
||||
性技巧
|
||||
性交
|
||||
性奴
|
||||
性虐
|
||||
性息
|
||||
性欲
|
||||
胸推
|
||||
穴口
|
||||
穴图
|
||||
亚情
|
||||
颜射
|
||||
阳具
|
||||
杨思敏
|
||||
要射了
|
||||
夜勤病栋
|
||||
一本道
|
||||
一夜欢
|
||||
一夜情
|
||||
一ye情
|
||||
阴部
|
||||
淫虫
|
||||
阴唇
|
||||
淫荡
|
||||
阴道
|
||||
淫电影
|
||||
阴阜
|
||||
淫妇
|
||||
淫河
|
||||
阴核
|
||||
阴户
|
||||
淫贱
|
||||
淫叫
|
||||
淫教师
|
||||
阴茎
|
||||
阴精
|
||||
淫浪
|
||||
淫媚
|
||||
淫糜
|
||||
淫魔
|
||||
淫母
|
||||
淫女
|
||||
淫虐
|
||||
淫妻
|
||||
淫情
|
||||
淫色
|
||||
淫声浪语
|
||||
淫兽学园
|
||||
淫书
|
||||
淫术炼金士
|
||||
淫水
|
||||
淫娃
|
||||
淫威
|
||||
淫亵
|
||||
淫样
|
||||
淫液
|
||||
淫照
|
||||
阴b
|
||||
应召
|
||||
幼交
|
||||
欲火
|
||||
欲女
|
||||
玉乳
|
||||
玉穴
|
||||
援交
|
||||
原味内衣
|
||||
援助交际
|
||||
招鸡
|
||||
招妓
|
||||
抓胸
|
||||
自慰
|
||||
作爱
|
||||
a片
|
||||
fuck
|
||||
gay片
|
||||
g点
|
||||
h动画
|
||||
h动漫
|
||||
失身粉
|
||||
淫荡自慰器
|
||||
929
common/utils/go-sensitive-word-1.3.3/text/色情词库.txt
Normal file
929
common/utils/go-sensitive-word-1.3.3/text/色情词库.txt
Normal file
@@ -0,0 +1,929 @@
|
||||
爱女人
|
||||
爱液
|
||||
按摩棒
|
||||
拔出来
|
||||
爆草
|
||||
包二奶
|
||||
暴干
|
||||
暴奸
|
||||
暴乳
|
||||
爆乳
|
||||
暴淫
|
||||
屄
|
||||
被插
|
||||
被操
|
||||
被干
|
||||
逼奸
|
||||
仓井空
|
||||
插暴
|
||||
操逼
|
||||
操黑
|
||||
操烂
|
||||
肏你
|
||||
肏死
|
||||
操死
|
||||
操我
|
||||
厕奴
|
||||
插比
|
||||
插b
|
||||
插逼
|
||||
插进
|
||||
插你
|
||||
插我
|
||||
插阴
|
||||
潮吹
|
||||
潮喷
|
||||
成人dv
|
||||
成人电影
|
||||
成人论坛
|
||||
成人小说
|
||||
成人电
|
||||
成人电影
|
||||
成人卡通
|
||||
成人聊
|
||||
成人片
|
||||
成人视
|
||||
成人图
|
||||
成人文
|
||||
成人小
|
||||
成人电影
|
||||
成人论坛
|
||||
成人色情
|
||||
成人网站
|
||||
成人文学
|
||||
成人小说
|
||||
艳情小说
|
||||
成人游戏
|
||||
吃精
|
||||
赤裸
|
||||
抽插
|
||||
扌由插
|
||||
抽一插
|
||||
春药
|
||||
大波
|
||||
大力抽送
|
||||
大乳
|
||||
荡妇
|
||||
荡女
|
||||
盗撮
|
||||
多人轮
|
||||
发浪
|
||||
放尿
|
||||
肥逼
|
||||
粉穴
|
||||
封面女郎
|
||||
风月大陆
|
||||
干死你
|
||||
干穴
|
||||
肛交
|
||||
肛门
|
||||
龟头
|
||||
裹本
|
||||
国产av
|
||||
好嫩
|
||||
豪乳
|
||||
黑逼
|
||||
后庭
|
||||
后穴
|
||||
虎骑
|
||||
花花公子
|
||||
换妻俱乐部
|
||||
黄片
|
||||
几吧
|
||||
鸡吧
|
||||
鸡巴
|
||||
鸡奸
|
||||
寂寞男
|
||||
寂寞女
|
||||
妓女
|
||||
激情
|
||||
集体淫
|
||||
奸情
|
||||
叫床
|
||||
脚交
|
||||
金鳞岂是池中物
|
||||
金麟岂是池中物
|
||||
精液
|
||||
就去日
|
||||
巨屌
|
||||
菊花洞
|
||||
菊门
|
||||
巨奶
|
||||
巨乳
|
||||
菊穴
|
||||
开苞
|
||||
口爆
|
||||
口活
|
||||
口交
|
||||
口射
|
||||
口淫
|
||||
裤袜
|
||||
狂操
|
||||
狂插
|
||||
浪逼
|
||||
浪妇
|
||||
浪叫
|
||||
浪女
|
||||
狼友
|
||||
聊性
|
||||
流淫
|
||||
铃木麻
|
||||
凌辱
|
||||
漏乳
|
||||
露b
|
||||
乱交
|
||||
乱伦
|
||||
轮暴
|
||||
轮操
|
||||
轮奸
|
||||
裸陪
|
||||
买春
|
||||
美逼
|
||||
美少妇
|
||||
美乳
|
||||
美腿
|
||||
美穴
|
||||
美幼
|
||||
秘唇
|
||||
迷奸
|
||||
密穴
|
||||
蜜穴
|
||||
蜜液
|
||||
摸奶
|
||||
摸胸
|
||||
母奸
|
||||
奈美
|
||||
奶子
|
||||
男奴
|
||||
内射
|
||||
嫩逼
|
||||
嫩女
|
||||
嫩穴
|
||||
捏弄
|
||||
女优
|
||||
炮友
|
||||
砲友
|
||||
喷精
|
||||
屁眼
|
||||
品香堂
|
||||
前凸后翘
|
||||
强jian
|
||||
强暴
|
||||
强奸处女
|
||||
情趣用品
|
||||
情色
|
||||
拳交
|
||||
全裸
|
||||
群交
|
||||
惹火身材
|
||||
人妻
|
||||
人兽
|
||||
日逼
|
||||
日烂
|
||||
肉棒
|
||||
肉逼
|
||||
肉唇
|
||||
肉洞
|
||||
肉缝
|
||||
肉棍
|
||||
肉茎
|
||||
肉具
|
||||
揉乳
|
||||
肉穴
|
||||
肉欲
|
||||
乳爆
|
||||
乳房
|
||||
乳沟
|
||||
乳交
|
||||
乳头
|
||||
三级片
|
||||
骚逼
|
||||
骚比
|
||||
骚女
|
||||
骚水
|
||||
骚穴
|
||||
色逼
|
||||
色界
|
||||
色猫
|
||||
色盟
|
||||
色情网站
|
||||
色区
|
||||
色色
|
||||
色诱
|
||||
色欲
|
||||
色b
|
||||
少年阿宾
|
||||
少修正
|
||||
射爽
|
||||
射颜
|
||||
食精
|
||||
释欲
|
||||
兽奸
|
||||
兽交
|
||||
手淫
|
||||
兽欲
|
||||
熟妇
|
||||
熟母
|
||||
熟女
|
||||
爽片
|
||||
爽死我了
|
||||
双臀
|
||||
死逼
|
||||
丝袜
|
||||
丝诱
|
||||
松岛枫
|
||||
酥痒
|
||||
汤加丽
|
||||
套弄
|
||||
体奸
|
||||
体位
|
||||
舔脚
|
||||
舔阴
|
||||
调教
|
||||
偷欢
|
||||
偷拍
|
||||
推油
|
||||
脱内裤
|
||||
文做
|
||||
我就色
|
||||
无码
|
||||
舞女
|
||||
无修正
|
||||
吸精
|
||||
夏川纯
|
||||
相奸
|
||||
小逼
|
||||
校鸡
|
||||
小穴
|
||||
小xue
|
||||
写真
|
||||
性感妖娆
|
||||
性感诱惑
|
||||
性虎
|
||||
性饥渴
|
||||
性技巧
|
||||
性交
|
||||
性奴
|
||||
性虐
|
||||
性息
|
||||
性欲
|
||||
胸推
|
||||
穴口
|
||||
学生妹
|
||||
穴图
|
||||
亚情
|
||||
颜射
|
||||
阳具
|
||||
杨思敏
|
||||
要射了
|
||||
夜勤病栋
|
||||
一本道
|
||||
一夜欢
|
||||
一夜情
|
||||
一ye情
|
||||
阴部
|
||||
淫虫
|
||||
阴唇
|
||||
淫荡
|
||||
阴道
|
||||
淫电影
|
||||
阴阜
|
||||
淫妇
|
||||
淫河
|
||||
阴核
|
||||
阴户
|
||||
淫贱
|
||||
淫叫
|
||||
淫教师
|
||||
阴茎
|
||||
阴精
|
||||
淫浪
|
||||
淫媚
|
||||
淫糜
|
||||
淫魔
|
||||
淫母
|
||||
淫女
|
||||
淫虐
|
||||
淫妻
|
||||
淫情
|
||||
淫色
|
||||
淫声浪语
|
||||
淫兽学园
|
||||
淫书
|
||||
淫术炼金士
|
||||
淫水
|
||||
淫娃
|
||||
淫威
|
||||
淫亵
|
||||
淫样
|
||||
淫液
|
||||
淫照
|
||||
阴b
|
||||
应召
|
||||
幼交
|
||||
幼男
|
||||
幼女
|
||||
欲火
|
||||
欲女
|
||||
玉女心经
|
||||
玉蒲团
|
||||
玉乳
|
||||
欲仙欲死
|
||||
玉穴
|
||||
援交
|
||||
原味内衣
|
||||
援助交际
|
||||
张筱雨
|
||||
招鸡
|
||||
招妓
|
||||
中年美妇
|
||||
抓胸
|
||||
自拍
|
||||
自慰
|
||||
作爱
|
||||
18禁
|
||||
99bb
|
||||
a4u
|
||||
a4y
|
||||
adult
|
||||
amateur
|
||||
anal
|
||||
a片
|
||||
fuck
|
||||
gay片
|
||||
g点
|
||||
g片
|
||||
hardcore
|
||||
h动画
|
||||
h动漫
|
||||
incest
|
||||
porn
|
||||
secom
|
||||
sexinsex
|
||||
sm女王
|
||||
xiao77
|
||||
xing伴侣
|
||||
tokyohot
|
||||
yin荡
|
||||
贱人
|
||||
装b
|
||||
大sb
|
||||
傻逼
|
||||
傻b
|
||||
煞逼
|
||||
煞笔
|
||||
刹笔
|
||||
傻比
|
||||
沙比
|
||||
欠干
|
||||
婊子养的
|
||||
我日你
|
||||
我操
|
||||
我草
|
||||
卧艹
|
||||
卧槽
|
||||
爆你菊
|
||||
艹你
|
||||
cao你
|
||||
你他妈
|
||||
真他妈
|
||||
别他吗
|
||||
草你吗
|
||||
草你丫
|
||||
操你妈
|
||||
擦你妈
|
||||
操你娘
|
||||
操他妈
|
||||
日你妈
|
||||
干你妈
|
||||
干你娘
|
||||
娘西皮
|
||||
狗操
|
||||
狗草
|
||||
狗杂种
|
||||
狗日的
|
||||
操你祖宗
|
||||
操你全家
|
||||
操你大爷
|
||||
妈逼
|
||||
你麻痹
|
||||
麻痹的
|
||||
妈了个逼
|
||||
马勒
|
||||
狗娘养
|
||||
贱比
|
||||
贱b
|
||||
下贱
|
||||
死全家
|
||||
全家死光
|
||||
全家不得好死
|
||||
全家死绝
|
||||
白痴
|
||||
无耻
|
||||
sb
|
||||
杀b
|
||||
你吗b
|
||||
你妈的
|
||||
婊子
|
||||
贱货
|
||||
人渣
|
||||
混蛋
|
||||
媚外
|
||||
和弦
|
||||
兼职
|
||||
限量
|
||||
铃声
|
||||
性伴侣
|
||||
男公关
|
||||
火辣
|
||||
精子
|
||||
射精
|
||||
诱奸
|
||||
强奸
|
||||
做爱
|
||||
性爱
|
||||
发生关系
|
||||
按摩
|
||||
快感
|
||||
处男
|
||||
猛男
|
||||
少妇
|
||||
屌
|
||||
屁股
|
||||
下体
|
||||
a片
|
||||
内裤
|
||||
浑圆
|
||||
咪咪
|
||||
发情
|
||||
刺激
|
||||
白嫩
|
||||
粉嫩
|
||||
兽性
|
||||
风骚
|
||||
呻吟
|
||||
sm
|
||||
阉割
|
||||
高潮
|
||||
裸露
|
||||
不穿
|
||||
一丝不挂
|
||||
脱光
|
||||
干你
|
||||
干死
|
||||
我干
|
||||
裙中性运动
|
||||
乱奸
|
||||
乱伦
|
||||
乱伦类
|
||||
乱伦小
|
||||
伦理大
|
||||
伦理电影
|
||||
伦理毛
|
||||
伦理片
|
||||
裸聊
|
||||
裸聊网
|
||||
裸体写真
|
||||
裸舞视
|
||||
裸照
|
||||
美女裸体
|
||||
美女写真
|
||||
美女上门
|
||||
美艳少妇
|
||||
妹按摩
|
||||
妹上门
|
||||
迷幻药
|
||||
迷幻藥
|
||||
迷昏口
|
||||
迷昏药
|
||||
迷昏藥
|
||||
迷魂香
|
||||
迷魂药
|
||||
迷魂藥
|
||||
迷奸粉
|
||||
迷奸药
|
||||
迷情粉
|
||||
迷情水
|
||||
迷情药
|
||||
迷药
|
||||
迷藥
|
||||
谜奸药
|
||||
骚妇
|
||||
骚货
|
||||
骚浪
|
||||
骚女
|
||||
骚嘴
|
||||
色电影
|
||||
色妹妹
|
||||
色情表演
|
||||
色情电影
|
||||
色情服务
|
||||
色情图片
|
||||
色情小说
|
||||
色情影片
|
||||
色情表演
|
||||
色情电影
|
||||
色情服务
|
||||
色情片
|
||||
色视频
|
||||
色小说
|
||||
性伴侣
|
||||
性服务
|
||||
性福情
|
||||
性感少
|
||||
性伙伴
|
||||
性交
|
||||
性交视频
|
||||
性交图片
|
||||
性奴
|
||||
性奴集中营
|
||||
性虐
|
||||
阴唇
|
||||
阴道
|
||||
阴蒂
|
||||
阴户
|
||||
阴间来电
|
||||
阴茎
|
||||
阴茎增大
|
||||
阴茎助勃
|
||||
阴毛
|
||||
陰唇
|
||||
陰道
|
||||
陰戶
|
||||
淫荡
|
||||
淫荡美女
|
||||
淫荡视频
|
||||
淫荡照片
|
||||
淫乱
|
||||
淫靡
|
||||
淫魔
|
||||
淫魔舞
|
||||
淫女
|
||||
淫情女
|
||||
淫肉
|
||||
淫騷妹
|
||||
淫兽
|
||||
淫兽学
|
||||
淫水
|
||||
淫穴
|
||||
morphine
|
||||
摇头丸
|
||||
迷药
|
||||
乖乖粉
|
||||
narcotic
|
||||
麻醉药
|
||||
精神药品
|
||||
爱女人
|
||||
爱液
|
||||
按摩棒
|
||||
拔出来
|
||||
爆草
|
||||
包二奶
|
||||
暴干
|
||||
暴奸
|
||||
暴乳
|
||||
爆乳
|
||||
暴淫
|
||||
屄
|
||||
被操
|
||||
被插
|
||||
被干
|
||||
逼奸
|
||||
仓井空
|
||||
插暴
|
||||
操逼
|
||||
操黑
|
||||
操烂
|
||||
肏你
|
||||
肏死
|
||||
操死
|
||||
操我
|
||||
厕奴
|
||||
插比
|
||||
插b
|
||||
插逼
|
||||
插进
|
||||
插你
|
||||
插我
|
||||
插阴
|
||||
潮吹
|
||||
潮喷
|
||||
成人电影
|
||||
成人论坛
|
||||
成人色情
|
||||
成人网站
|
||||
成人文学
|
||||
成人小说
|
||||
艳情小说
|
||||
成人游戏
|
||||
吃精
|
||||
赤裸
|
||||
抽插
|
||||
扌由插
|
||||
抽一插
|
||||
春药
|
||||
大波
|
||||
大力抽送
|
||||
大乳
|
||||
荡妇
|
||||
荡女
|
||||
盗撮
|
||||
多人轮
|
||||
发浪
|
||||
放尿
|
||||
肥逼
|
||||
粉穴
|
||||
封面女郎
|
||||
风月大陆
|
||||
干死你
|
||||
干穴
|
||||
肛交
|
||||
肛门
|
||||
龟头
|
||||
裹本
|
||||
国产av
|
||||
好嫩
|
||||
豪乳
|
||||
黑逼
|
||||
后庭
|
||||
后穴
|
||||
虎骑
|
||||
花花公子
|
||||
换妻俱乐部
|
||||
黄片
|
||||
几吧
|
||||
鸡吧
|
||||
鸡巴
|
||||
鸡奸
|
||||
寂寞男
|
||||
寂寞女
|
||||
妓女
|
||||
激情
|
||||
集体淫
|
||||
奸情
|
||||
叫床
|
||||
脚交
|
||||
金鳞岂是池中物
|
||||
金麟岂是池中物
|
||||
精液
|
||||
就去日
|
||||
巨屌
|
||||
菊花洞
|
||||
菊门
|
||||
巨奶
|
||||
巨乳
|
||||
菊穴
|
||||
开苞
|
||||
口爆
|
||||
口活
|
||||
口交
|
||||
口射
|
||||
口淫
|
||||
裤袜
|
||||
狂操
|
||||
狂插
|
||||
浪逼
|
||||
浪妇
|
||||
浪叫
|
||||
浪女
|
||||
狼友
|
||||
聊性
|
||||
流淫
|
||||
铃木麻
|
||||
凌辱
|
||||
漏乳
|
||||
露b
|
||||
乱交
|
||||
乱伦
|
||||
轮暴
|
||||
轮操
|
||||
轮奸
|
||||
裸陪
|
||||
买春
|
||||
美逼
|
||||
美少妇
|
||||
美乳
|
||||
美腿
|
||||
美穴
|
||||
美幼
|
||||
秘唇
|
||||
迷奸
|
||||
密穴
|
||||
蜜穴
|
||||
蜜液
|
||||
摸奶
|
||||
摸胸
|
||||
母奸
|
||||
奈美
|
||||
奶子
|
||||
男奴
|
||||
内射
|
||||
嫩逼
|
||||
嫩女
|
||||
嫩穴
|
||||
捏弄
|
||||
女优
|
||||
炮友
|
||||
砲友
|
||||
喷精
|
||||
屁眼
|
||||
品香堂
|
||||
前凸后翘
|
||||
强jian
|
||||
强暴
|
||||
强奸处女
|
||||
情趣用品
|
||||
情色
|
||||
拳交
|
||||
全裸
|
||||
群交
|
||||
惹火身材
|
||||
人妻
|
||||
人兽
|
||||
日逼
|
||||
日烂
|
||||
肉棒
|
||||
肉逼
|
||||
肉唇
|
||||
肉洞
|
||||
肉缝
|
||||
肉棍
|
||||
肉茎
|
||||
肉具
|
||||
揉乳
|
||||
肉穴
|
||||
肉欲
|
||||
乳爆
|
||||
乳房
|
||||
乳沟
|
||||
乳交
|
||||
乳头
|
||||
三级片
|
||||
骚逼
|
||||
骚比
|
||||
骚女
|
||||
骚水
|
||||
骚穴
|
||||
色逼
|
||||
色界
|
||||
色猫
|
||||
色盟
|
||||
色情网站
|
||||
色区
|
||||
色色
|
||||
色诱
|
||||
色欲
|
||||
色b
|
||||
少年阿宾
|
||||
少修正
|
||||
射爽
|
||||
射颜
|
||||
食精
|
||||
释欲
|
||||
兽奸
|
||||
兽交
|
||||
手淫
|
||||
兽欲
|
||||
熟妇
|
||||
熟母
|
||||
熟女
|
||||
爽片
|
||||
爽死我了
|
||||
双臀
|
||||
死逼
|
||||
丝袜
|
||||
丝诱
|
||||
松岛枫
|
||||
酥痒
|
||||
汤加丽
|
||||
套弄
|
||||
体奸
|
||||
体位
|
||||
舔脚
|
||||
舔阴
|
||||
调教
|
||||
偷欢
|
||||
偷拍
|
||||
推油
|
||||
脱内裤
|
||||
文做
|
||||
我就色
|
||||
无码
|
||||
舞女
|
||||
无修正
|
||||
吸精
|
||||
夏川纯
|
||||
相奸
|
||||
小逼
|
||||
校鸡
|
||||
小穴
|
||||
小xue
|
||||
写真
|
||||
性感妖娆
|
||||
性感诱惑
|
||||
性虎
|
||||
性饥渴
|
||||
性技巧
|
||||
性交
|
||||
性奴
|
||||
性虐
|
||||
性息
|
||||
性欲
|
||||
胸推
|
||||
穴口
|
||||
学生妹
|
||||
穴图
|
||||
亚情
|
||||
颜射
|
||||
阳具
|
||||
杨思敏
|
||||
要射了
|
||||
夜勤病栋
|
||||
一本道
|
||||
一夜欢
|
||||
一夜情
|
||||
一ye情
|
||||
阴部
|
||||
淫虫
|
||||
阴唇
|
||||
淫荡
|
||||
阴道
|
||||
淫电影
|
||||
阴阜
|
||||
淫妇
|
||||
淫河
|
||||
阴核
|
||||
阴户
|
||||
淫贱
|
||||
淫叫
|
||||
淫教师
|
||||
阴茎
|
||||
阴精
|
||||
淫浪
|
||||
淫媚
|
||||
淫糜
|
||||
淫魔
|
||||
淫母
|
||||
淫女
|
||||
淫虐
|
||||
淫妻
|
||||
淫情
|
||||
淫色
|
||||
淫声浪语
|
||||
淫兽学园
|
||||
淫书
|
||||
淫术炼金士
|
||||
淫水
|
||||
淫娃
|
||||
淫威
|
||||
淫亵
|
||||
淫样
|
||||
淫液
|
||||
淫照
|
||||
阴b
|
||||
应召
|
||||
幼交
|
||||
幼男
|
||||
幼女
|
||||
欲火
|
||||
欲女
|
||||
玉女心经
|
||||
玉蒲团
|
||||
玉乳
|
||||
欲仙欲死
|
||||
玉穴
|
||||
援交
|
||||
原味内衣
|
||||
援助交际
|
||||
张筱雨
|
||||
招鸡
|
||||
招妓
|
||||
中年美妇
|
||||
抓胸
|
||||
自拍
|
||||
自慰
|
||||
作爱
|
||||
18禁
|
||||
99bb
|
||||
a4u
|
||||
a4y
|
||||
adult
|
||||
amateur
|
||||
anal
|
||||
a片
|
||||
fuck
|
||||
gay片
|
||||
g点
|
||||
g片
|
||||
hardcore
|
||||
h动画
|
||||
h动漫
|
||||
incest
|
||||
porn
|
||||
secom
|
||||
sexinsex
|
||||
sm女王
|
||||
xiao77
|
||||
xing伴侣
|
||||
tokyohot
|
||||
yin荡
|
||||
1064
common/utils/go-sensitive-word-1.3.3/text/补充词库.txt
Normal file
1064
common/utils/go-sensitive-word-1.3.3/text/补充词库.txt
Normal file
File diff suppressed because it is too large
Load Diff
244
common/utils/go-sensitive-word-1.3.3/text/贪腐词库.txt
Normal file
244
common/utils/go-sensitive-word-1.3.3/text/贪腐词库.txt
Normal file
@@ -0,0 +1,244 @@
|
||||
腐败
|
||||
贪污
|
||||
gcd
|
||||
共贪党
|
||||
gongchandang
|
||||
阿共
|
||||
共一产一党
|
||||
产党共
|
||||
公产党
|
||||
工产党
|
||||
共c党
|
||||
共x党
|
||||
供产
|
||||
共铲
|
||||
共惨
|
||||
供铲党
|
||||
供铲谠
|
||||
供铲裆
|
||||
共残党
|
||||
共残主义
|
||||
共产主义的幽灵
|
||||
拱铲
|
||||
老共
|
||||
中珙
|
||||
中gong
|
||||
gc党
|
||||
贡挡
|
||||
gong党
|
||||
g产
|
||||
狗产蛋
|
||||
共残裆
|
||||
恶党
|
||||
邪党
|
||||
共产专制
|
||||
共产王朝
|
||||
裆中央
|
||||
土共
|
||||
土g
|
||||
共狗
|
||||
g匪
|
||||
共匪
|
||||
仇共
|
||||
共产党腐败
|
||||
共产党专制
|
||||
共产党的报应
|
||||
共产党的末日
|
||||
共产党专制
|
||||
communistparty
|
||||
症腐
|
||||
政腐
|
||||
政付
|
||||
正府
|
||||
政俯
|
||||
政f
|
||||
zhengfu
|
||||
政zhi
|
||||
挡中央
|
||||
档中央
|
||||
中国zf
|
||||
中央zf
|
||||
国wu院
|
||||
中华帝国
|
||||
gong和
|
||||
大陆官方
|
||||
北京政权
|
||||
刘志军
|
||||
张曙
|
||||
刘志军
|
||||
买别墅
|
||||
玩女人
|
||||
贪20亿
|
||||
许宗衡
|
||||
贪财物
|
||||
李启红
|
||||
贪腐财富
|
||||
落马
|
||||
高官名单
|
||||
陈希同
|
||||
贪污
|
||||
玩忽职守
|
||||
有期徒刑
|
||||
陈良宇
|
||||
受贿罪
|
||||
滥用职权
|
||||
有期徒刑
|
||||
没收个人财产
|
||||
成克杰
|
||||
死刑
|
||||
程维高
|
||||
严重违纪
|
||||
开除党籍
|
||||
撤销职务
|
||||
刘方仁
|
||||
无期徒刑
|
||||
倪献策
|
||||
徇私舞弊
|
||||
梁湘
|
||||
以权谋私
|
||||
撤职。
|
||||
李嘉廷
|
||||
死刑缓期
|
||||
张国光
|
||||
韩桂芝
|
||||
宋平顺
|
||||
自杀
|
||||
黄瑶
|
||||
双规
|
||||
陈绍基
|
||||
判处死刑
|
||||
剥夺政治权利终身
|
||||
没收个人全部财产
|
||||
石兆彬
|
||||
侯伍杰
|
||||
王昭耀
|
||||
剥夺政治权利
|
||||
杜世成
|
||||
沈图
|
||||
叛逃美国
|
||||
罗云光
|
||||
起诉
|
||||
张辛泰
|
||||
李效时
|
||||
边少斌
|
||||
徐鹏航
|
||||
违纪
|
||||
收受股票
|
||||
王乐毅
|
||||
李纪周
|
||||
郑光迪
|
||||
田凤山。
|
||||
邱晓华
|
||||
郑筱萸
|
||||
孙鹤龄
|
||||
蓝田造假案
|
||||
于幼军
|
||||
留党察看
|
||||
何洪达
|
||||
朱志刚
|
||||
杨汇泉
|
||||
官僚主义
|
||||
徐炳松
|
||||
托乎提沙比尔
|
||||
王宝森
|
||||
经济犯罪
|
||||
畏罪自杀。
|
||||
陈水文
|
||||
孟庆平
|
||||
胡长清
|
||||
朱川
|
||||
许运鸿
|
||||
丘广钟
|
||||
刘知炳
|
||||
丛福奎
|
||||
王怀忠
|
||||
巨额财产
|
||||
来源不明罪
|
||||
李达昌
|
||||
刘长贵
|
||||
王钟麓
|
||||
阿曼哈吉
|
||||
付晓光
|
||||
自动辞
|
||||
刘克田
|
||||
吕德彬
|
||||
刘维明
|
||||
双开
|
||||
刘志华
|
||||
孙瑜
|
||||
李堂堂
|
||||
韩福才 青海
|
||||
欧阳德 广东
|
||||
韦泽芳 海南
|
||||
铁英 北京
|
||||
辛业江 海南
|
||||
于飞 广东
|
||||
姜殿武 河北
|
||||
秦昌典 重庆
|
||||
范广举 黑龙江
|
||||
张凯广东
|
||||
王厚宏海南
|
||||
陈维席安徽
|
||||
王有杰河南
|
||||
王武龙江苏
|
||||
米凤君吉林
|
||||
宋勇辽宁
|
||||
张家盟浙江
|
||||
马烈孙宁夏
|
||||
黄纪诚北京
|
||||
常征贵州
|
||||
王式惠重庆
|
||||
周文吉
|
||||
王庆录广西
|
||||
潘广田山东
|
||||
朱作勇甘肃
|
||||
孙善武河南
|
||||
宋晨光江西
|
||||
梁春禄广西政协
|
||||
鲁家善 中国交通
|
||||
金德琴 中信
|
||||
李大强 神华
|
||||
吴文英 纺织
|
||||
查克明 华能
|
||||
朱小华光大
|
||||
高严 国家电力
|
||||
王雪冰
|
||||
林孔兴
|
||||
刘金宝
|
||||
张恩照
|
||||
陈同海
|
||||
康日新
|
||||
王益
|
||||
张春江
|
||||
洪清源
|
||||
平义杰
|
||||
李恩潮
|
||||
孙小虹
|
||||
陈忠
|
||||
慕绥新
|
||||
田凤岐
|
||||
麦崇楷
|
||||
柴王群
|
||||
吴振汉
|
||||
张秋阳
|
||||
徐衍东
|
||||
徐发 黑龙江
|
||||
张宗海
|
||||
丁鑫发
|
||||
徐国健
|
||||
李宝金
|
||||
单平
|
||||
段义和
|
||||
荆福生
|
||||
陈少勇
|
||||
黄松有
|
||||
皮黔生
|
||||
王华元
|
||||
王守业
|
||||
刘连昆
|
||||
孙晋美
|
||||
邵松高
|
||||
肖怀枢
|
||||
刘广智 空军
|
||||
姬胜德 总参
|
||||
廖伯年 北京
|
||||
53308
common/utils/go-sensitive-word-1.3.3/text/零时-Tencent.txt
Normal file
53308
common/utils/go-sensitive-word-1.3.3/text/零时-Tencent.txt
Normal file
File diff suppressed because it is too large
Load Diff
14595
common/utils/go-sensitive-word-1.3.3/text/非法网址.txt
Normal file
14595
common/utils/go-sensitive-word-1.3.3/text/非法网址.txt
Normal file
File diff suppressed because it is too large
Load Diff
64
common/utils/go-sensitive-word-1.3.3/tool.go
Normal file
64
common/utils/go-sensitive-word-1.3.3/tool.go
Normal file
@@ -0,0 +1,64 @@
|
||||
package go_sensitive_word
|
||||
|
||||
import "regexp"
|
||||
|
||||
// HasEmail 判断字符串中是否存在邮箱地址
|
||||
func HasEmail(s string) bool {
|
||||
emailRegex := regexp.MustCompile(`[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}`)
|
||||
return emailRegex.MatchString(s)
|
||||
}
|
||||
|
||||
// MaskEmail 将字符串中存在的邮箱地址替换成 "*"
|
||||
func MaskEmail(s string) string {
|
||||
emailRegex := regexp.MustCompile(`[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}`)
|
||||
masked := emailRegex.ReplaceAllStringFunc(s, func(email string) string {
|
||||
return "***"
|
||||
})
|
||||
return masked
|
||||
}
|
||||
|
||||
// HasURL 判断字符串中是否存在网址
|
||||
func HasURL(s string) bool {
|
||||
urlRegex := regexp.MustCompile(`https?://[^\s]+`)
|
||||
return urlRegex.MatchString(s)
|
||||
}
|
||||
|
||||
// MaskURL 将字符串中存在的网址替换成 "*"
|
||||
func MaskURL(s string) string {
|
||||
urlRegex := regexp.MustCompile(`https?://[^\s]+`)
|
||||
masked := urlRegex.ReplaceAllStringFunc(s, func(url string) string {
|
||||
return "***"
|
||||
})
|
||||
return masked
|
||||
}
|
||||
|
||||
// HasDigit 判断字符串中是否存在指定个数的数字(大于等于该数字)
|
||||
func HasDigit(s string, count int) bool {
|
||||
digitRegex := regexp.MustCompile(`\d`)
|
||||
matches := digitRegex.FindAllString(s, -1)
|
||||
return len(matches) >= count
|
||||
}
|
||||
|
||||
// MaskDigit 将字符串中存在的数字替换成 "*"
|
||||
func MaskDigit(s string) string {
|
||||
digitRegex := regexp.MustCompile(`\d`)
|
||||
masked := digitRegex.ReplaceAllStringFunc(s, func(digit string) string {
|
||||
return "*"
|
||||
})
|
||||
return masked
|
||||
}
|
||||
|
||||
// HasWechatID 判断字符串中是否存在微信号
|
||||
func HasWechatID(s string) bool {
|
||||
wechatRegex := regexp.MustCompile(`[a-zA-Z][a-zA-Z0-9_-]{5,19}`)
|
||||
return wechatRegex.MatchString(s)
|
||||
}
|
||||
|
||||
// MaskWechatID 将字符串中存在的微信号替换成 "*"
|
||||
func MaskWechatID(s string) string {
|
||||
wechatRegex := regexp.MustCompile(`[a-zA-Z][a-zA-Z0-9_-]{5,19}`)
|
||||
masked := wechatRegex.ReplaceAllStringFunc(s, func(wechatID string) string {
|
||||
return "***"
|
||||
})
|
||||
return masked
|
||||
}
|
||||
48
common/utils/go-sensitive-word-1.3.3/tool_test.go
Normal file
48
common/utils/go-sensitive-word-1.3.3/tool_test.go
Normal file
@@ -0,0 +1,48 @@
|
||||
package go_sensitive_word
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestEmail(t *testing.T) {
|
||||
input := "我的邮箱是example@example.com,你的是test@test.com。"
|
||||
|
||||
if HasEmail(input) {
|
||||
masked := MaskEmail(input)
|
||||
fmt.Println("替换后的字符串:", masked)
|
||||
} else {
|
||||
fmt.Println("字符串中不存在邮箱。")
|
||||
}
|
||||
}
|
||||
|
||||
func TestURL(t *testing.T) {
|
||||
input := "我的网址是http://example.com,你的是https://test.com。"
|
||||
|
||||
if HasURL(input) {
|
||||
masked := MaskURL(input)
|
||||
fmt.Println("替换后的字符串:", masked)
|
||||
} else {
|
||||
fmt.Println("字符串中不存在网址。")
|
||||
}
|
||||
}
|
||||
|
||||
func TestDigit(t *testing.T) {
|
||||
input := "我的手机号码是1234567890,你的是9876543210。"
|
||||
if HasDigit(input, 3) {
|
||||
masked := MaskDigit(input)
|
||||
fmt.Println("替换后的字符串:", masked)
|
||||
} else {
|
||||
fmt.Println("字符串中不存在指定个数的数字。")
|
||||
}
|
||||
}
|
||||
|
||||
func TestWechat(t *testing.T) {
|
||||
input := "我的是my_wechat123,你的微信是your-wechat-789。"
|
||||
if HasWechatID(input) {
|
||||
masked := MaskWechatID(input)
|
||||
fmt.Println("替换后的字符串:", masked)
|
||||
} else {
|
||||
fmt.Println("字符串中不存在微信号。")
|
||||
}
|
||||
}
|
||||
1
go.work
1
go.work
@@ -14,6 +14,7 @@ use (
|
||||
./common/utils/log
|
||||
./common/utils/sturc
|
||||
./common/utils/xml
|
||||
./common/utils/go-sensitive-word-1.3.3
|
||||
./logic
|
||||
./login
|
||||
./modules
|
||||
|
||||
@@ -2,6 +2,7 @@ package controller
|
||||
|
||||
import (
|
||||
"blazing/common/socket/errorcode"
|
||||
"blazing/cool"
|
||||
"blazing/logic/service"
|
||||
"blazing/logic/service/login"
|
||||
blservice "blazing/modules/blazing/service"
|
||||
@@ -10,6 +11,6 @@ import (
|
||||
// 处理命令: 1001
|
||||
func (h *Controller) CreatePlayer(data *login.CreatePlayerInboundInfo, c *service.Conn) (result *login.CreatePlayerOutInfo, err errorcode.ErrorCode) {
|
||||
|
||||
blservice.NewUserService(data.Head.UserID).Reg(data.Nickname, data.Color)
|
||||
blservice.NewUserService(data.Head.UserID).Reg(cool.Filter.Replace(data.Nickname, '*'), data.Color)
|
||||
return result, 0
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user