mirror of
https://github.com/houbb/sensitive-word.git
synced 2026-03-22 08:27:36 +08:00
[Feature] add for new
This commit is contained in:
88
README.md
88
README.md
@@ -1,6 +1,6 @@
|
||||
# sensitive-word
|
||||
|
||||
[sensitive-word](https://github.com/houbb/sensitive-word) 基于 DFA 算法实现的敏感词工具。
|
||||
[sensitive-word](https://github.com/houbb/sensitive-word) 基于 DFA 算法实现的高性能敏感词工具。
|
||||
|
||||
[](http://mvnrepository.com/artifact/com.github.houbb/sensitive-word)
|
||||
|
||||
@@ -10,21 +10,25 @@
|
||||
|
||||
实现一款好用敏感词工具。
|
||||
|
||||
基于 DFA 算法实现,目前敏感词库内容收录 18W+ 感觉过于臃肿。
|
||||
基于 DFA 算法实现,目前敏感词库内容收录 6W+(源文件 18W+,经过一次删减)。
|
||||
|
||||
后期将进行相关优化,降低字典的数量。
|
||||
后期将进行持续优化和补充敏感词库,并进一步提升算法的性能。
|
||||
|
||||
希望可以细化敏感词的分类,感觉工作量比较大,暂时没有太好的思路。
|
||||
希望可以细化敏感词的分类,感觉工作量比较大,暂时没有进行。
|
||||
|
||||
## 后期目标
|
||||
## 特性
|
||||
|
||||
- 持续扩容对应的敏感词(如合法的数据抓取)
|
||||
- 6W+ 词库,且不断优化更新
|
||||
|
||||
- 添加英文大小写忽略,全角半角忽略
|
||||
- 基于 DFA 算法,性能很好
|
||||
|
||||
- 中文添加拼音相关转换,添加繁简体转换忽略
|
||||
- 基于 fluent-api 实现,优雅方便
|
||||
|
||||
- 允许用户自定义敏感词和白名单
|
||||
- 支持敏感词的判断、返回、脱敏等常见操作
|
||||
|
||||
- 支持全角半角互换
|
||||
|
||||
- 支持英文大小写互换
|
||||
|
||||
# 快速开始
|
||||
|
||||
@@ -40,10 +44,22 @@
|
||||
<dependency>
|
||||
<groupId>com.github.houbb</groupId>
|
||||
<artifactId>sensitive-word</artifactId>
|
||||
<version>0.0.3</version>
|
||||
<version>0.0.4</version>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
## api 概览
|
||||
|
||||
`SensitiveWordBs` 作为敏感词的引导类,核心方法如下:
|
||||
|
||||
| 方法 | 参数 | 返回值| 说明 |
|
||||
|:---|:---|:---|:---|
|
||||
| newInstance() | 无 | 引导类 | 初始化引导类 |
|
||||
| contains(String) | 待验证的字符串 | 布尔值 | 验证字符串是否包含敏感词 |
|
||||
| findAll(String) | 待验证的字符串 | 字符串列表 | 返回字符串中所有敏感词 |
|
||||
| replace(String, char) | 使用指定的 char 替换敏感词 | 字符串 | 返回脱敏后的字符串 |
|
||||
| replace(String) | 使用 `*` 替换敏感词 | 字符串 | 返回脱敏后的字符串 |
|
||||
|
||||
## 使用实例
|
||||
|
||||
所有测试案例参见 [SensitiveWordBsTest](https://github.com/houbb/sensitive-word/blob/master/src/test/java/com/github/houbb/sensitive/word/bs/SensitiveWordBsTest.java)
|
||||
@@ -53,7 +69,7 @@
|
||||
```java
|
||||
final String text = "五星红旗迎风飘扬,毛主席的画像屹立在天安门前。";
|
||||
|
||||
Assert.assertTrue(SensitiveWordBs.getInstance().contains(text));
|
||||
Assert.assertTrue(SensitiveWordBs.newInstance().contains(text));
|
||||
```
|
||||
|
||||
### 返回第一个敏感词
|
||||
@@ -61,7 +77,7 @@ Assert.assertTrue(SensitiveWordBs.getInstance().contains(text));
|
||||
```java
|
||||
final String text = "五星红旗迎风飘扬,毛主席的画像屹立在天安门前。";
|
||||
|
||||
String word = SensitiveWordBs.getInstance().findFirst(text);
|
||||
String word = SensitiveWordBs.newInstance().findFirst(text);
|
||||
Assert.assertEquals("五星红旗", word);
|
||||
```
|
||||
|
||||
@@ -70,7 +86,7 @@ Assert.assertEquals("五星红旗", word);
|
||||
```java
|
||||
final String text = "五星红旗迎风飘扬,毛主席的画像屹立在天安门前。";
|
||||
|
||||
List<String> wordList = SensitiveWordBs.getInstance().findAll(text);
|
||||
List<String> wordList = SensitiveWordBs.newInstance().findAll(text);
|
||||
Assert.assertEquals("[五星红旗, 毛主席, 天安门]", wordList.toString());
|
||||
```
|
||||
|
||||
@@ -78,7 +94,7 @@ Assert.assertEquals("[五星红旗, 毛主席, 天安门]", wordList.toString())
|
||||
|
||||
```java
|
||||
final String text = "五星红旗迎风飘扬,毛主席的画像屹立在天安门前。";
|
||||
String result = SensitiveWordBs.getInstance().replace(text);
|
||||
String result = SensitiveWordBs.newInstance().replace(text);
|
||||
Assert.assertEquals("****迎风飘扬,***的画像屹立在***前。", result);
|
||||
```
|
||||
|
||||
@@ -86,6 +102,46 @@ Assert.assertEquals("****迎风飘扬,***的画像屹立在***前。", result)
|
||||
|
||||
```java
|
||||
final String text = "五星红旗迎风飘扬,毛主席的画像屹立在天安门前。";
|
||||
String result = SensitiveWordBs.getInstance().replace(text, '0');
|
||||
String result = SensitiveWordBs.newInstance().replace(text, '0');
|
||||
Assert.assertEquals("0000迎风飘扬,000的画像屹立在000前。", result);
|
||||
```
|
||||
```
|
||||
|
||||
# 更多特性
|
||||
|
||||
后续的诸多特性,主要是针对各种针对各种情况的处理,尽可能的提升敏感词命中率。
|
||||
|
||||
这是一场漫长的攻防之战。
|
||||
|
||||
## 忽略大小写
|
||||
|
||||
```java
|
||||
final String text = "fuCK the bad words.";
|
||||
|
||||
String word = SensitiveWordBs.newInstance().findFirst(text);
|
||||
Assert.assertEquals("fuCK", word);
|
||||
```
|
||||
|
||||
## 忽略半角圆角
|
||||
|
||||
```java
|
||||
final String text = "fuck the bad words.";
|
||||
|
||||
String word = SensitiveWordBs.newInstance().findFirst(text);
|
||||
Assert.assertEquals("fuck", word);
|
||||
```
|
||||
|
||||
# 后期 road-map
|
||||
|
||||
- 繁简体互换
|
||||
|
||||
- 重复词
|
||||
|
||||
- 停顿词
|
||||
|
||||
- 拼音互换
|
||||
|
||||
- 用户自定义敏感词和白名单
|
||||
|
||||
- 文字镜像翻转
|
||||
|
||||
- 敏感词标签支持
|
||||
Reference in New Issue
Block a user