mirror of
https://github.com/houbb/sensitive-word.git
synced 2026-03-22 08:27:36 +08:00
release branch 0.24.2
This commit is contained in:
@@ -398,4 +398,11 @@
|
|||||||
|
|
||||||
| 序号 | 变更类型 | 说明 | 时间 | 备注 |
|
| 序号 | 变更类型 | 说明 | 时间 | 备注 |
|
||||||
|:---|:-----|------------|:------------------|:---------------|
|
|:---|:-----|------------|:------------------|:---------------|
|
||||||
| 1 | F | 删除时添加同步锁优化 | 2025-2-2 15:30:26 | 涉及到接口调整 PR-100 |
|
| 1 | F | 删除时添加同步锁优化 | 2025-2-2 15:30:26 | 涉及到接口调整 PR-100 |
|
||||||
|
|
||||||
|
# release_0.24.2
|
||||||
|
|
||||||
|
| 序号 | 变更类型 | 说明 | 时间 | 备注 |
|
||||||
|
|:---|:-----|---------------------|:------------------|:-------------------|
|
||||||
|
| 1 | O | findFirst 真实实现,性能优化 | 2025-2-2 15:30:26 | PR-99 |
|
||||||
|
| 2 | O | 黑白名单遍历统一优化,性能优化 | 2025-2-2 15:30:26 | PR-99 涉及到原始结果返回值调整 |
|
||||||
11
README.md
11
README.md
@@ -58,9 +58,6 @@ v0.24.0 开始内置支持对敏感词的分类细化,不过工作量比较大
|
|||||||
|
|
||||||
[CHANGE_LOG.md](https://github.com/houbb/sensitive-word/blob/master/CHANGE_LOG.md)
|
[CHANGE_LOG.md](https://github.com/houbb/sensitive-word/blob/master/CHANGE_LOG.md)
|
||||||
|
|
||||||
### V0.23.0
|
|
||||||
|
|
||||||
- 结果条件拓展支持 wordTags 和 chains
|
|
||||||
|
|
||||||
### V0.24.0
|
### V0.24.0
|
||||||
|
|
||||||
@@ -70,6 +67,12 @@ v0.24.0 开始内置支持对敏感词的分类细化,不过工作量比较大
|
|||||||
|
|
||||||
- 删除时统一添加同步锁 sync
|
- 删除时统一添加同步锁 sync
|
||||||
|
|
||||||
|
### V0.24.2
|
||||||
|
|
||||||
|
- 统一黑白名单为一次遍历,性能优化
|
||||||
|
|
||||||
|
- 实现真实的 findFirst,性能优化
|
||||||
|
|
||||||
## 更多资料
|
## 更多资料
|
||||||
|
|
||||||
### 敏感词控台
|
### 敏感词控台
|
||||||
@@ -108,7 +111,7 @@ v0.24.0 开始内置支持对敏感词的分类细化,不过工作量比较大
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.houbb</groupId>
|
<groupId>com.github.houbb</groupId>
|
||||||
<artifactId>sensitive-word</artifactId>
|
<artifactId>sensitive-word</artifactId>
|
||||||
<version>0.24.1</version>
|
<version>0.24.2</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
2
pom.xml
2
pom.xml
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<groupId>com.github.houbb</groupId>
|
<groupId>com.github.houbb</groupId>
|
||||||
<artifactId>sensitive-word</artifactId>
|
<artifactId>sensitive-word</artifactId>
|
||||||
<version>0.24.1</version>
|
<version>0.24.2</version>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<!--============================== All Plugins START ==============================-->
|
<!--============================== All Plugins START ==============================-->
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ ECHO "============================= RELEASE START..."
|
|||||||
|
|
||||||
:: 版本号信息(需要手动指定)
|
:: 版本号信息(需要手动指定)
|
||||||
:::: 旧版本名称
|
:::: 旧版本名称
|
||||||
SET version=0.24.1
|
SET version=0.24.2
|
||||||
:::: 新版本名称
|
:::: 新版本名称
|
||||||
SET newVersion=0.25.0
|
SET newVersion=0.25.0
|
||||||
:::: 组织名称
|
:::: 组织名称
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ public interface IWordCheck {
|
|||||||
* @param context 执行上下文
|
* @param context 执行上下文
|
||||||
* @return 敏感信息对应的长度
|
* @return 敏感信息对应的长度
|
||||||
* @since 0.0.5
|
* @since 0.0.5
|
||||||
|
* @since 0.24.2 为了黑白名单统一,调整了对应的返回值
|
||||||
*/
|
*/
|
||||||
WordCheckResult sensitiveCheck(final int beginIndex,
|
WordCheckResult sensitiveCheck(final int beginIndex,
|
||||||
final InnerSensitiveWordContext context);
|
final InnerSensitiveWordContext context);
|
||||||
|
|||||||
@@ -1,32 +1,48 @@
|
|||||||
package com.github.houbb.sensitive.word.support.result;
|
package com.github.houbb.sensitive.word.support.result;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 说明:统一让黑白名单一次遍历,性能优化
|
||||||
|
*
|
||||||
|
* @since 0.24.2
|
||||||
|
*/
|
||||||
public class WordLengthResult {
|
public class WordLengthResult {
|
||||||
private int wordAllowLen;
|
/**
|
||||||
private int wordDenyLen;
|
* 白名单长度
|
||||||
|
*/
|
||||||
|
private int wordAllowLen;
|
||||||
|
/**
|
||||||
|
* 黑名单长度
|
||||||
|
*/
|
||||||
|
private int wordDenyLen;
|
||||||
|
|
||||||
|
public static WordLengthResult newInstance() {
|
||||||
private WordLengthResult(){}
|
|
||||||
|
|
||||||
public static WordLengthResult newInstance(){
|
|
||||||
return new WordLengthResult();
|
return new WordLengthResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int wordAllowLen() {
|
||||||
public int wordAllowLen(){
|
|
||||||
return this.wordAllowLen;
|
return this.wordAllowLen;
|
||||||
}
|
}
|
||||||
public WordLengthResult wordAllowLen(int wordAllowLen){
|
|
||||||
this.wordAllowLen=wordAllowLen;
|
public WordLengthResult wordAllowLen(int wordAllowLen) {
|
||||||
|
this.wordAllowLen = wordAllowLen;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int wordDenyLen(){
|
public int wordDenyLen() {
|
||||||
return this.wordDenyLen;
|
return this.wordDenyLen;
|
||||||
}
|
}
|
||||||
public WordLengthResult wordDenyLen(int wordDenyLen){
|
|
||||||
this.wordDenyLen=wordDenyLen;
|
public WordLengthResult wordDenyLen(int wordDenyLen) {
|
||||||
|
this.wordDenyLen = wordDenyLen;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "WordLengthResult{" +
|
||||||
|
"wordAllowLen=" + wordAllowLen +
|
||||||
|
", wordDenyLen=" + wordDenyLen +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,44 +72,37 @@ public class BenchmarkBasicTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* * 黑白名单一次遍历 优化前:300*他们在地铁口交易,查10000次,26183
|
* 黑白名单一次遍历 优化前:300*他们在地铁口交易,查10000次,26183
|
||||||
* * 黑白名单一次遍历 优化后:300*他们在地铁口交易,查10000次,15705
|
* 黑白名单一次遍历 优化后:300*他们在地铁口交易,查10000次,15705
|
||||||
*
|
* @since 0.24.2
|
||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void costTimeOneTraceTest() {
|
public void costTimeOneTraceTest() {
|
||||||
StringBuilder sb=new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
for(int i=0;i<300;i++){
|
for (int i = 0; i < 300; i++) {
|
||||||
sb.append("他们在地铁口交易").append(i);
|
sb.append("他们在地铁口交易").append(i);
|
||||||
}
|
}
|
||||||
String text = sb.toString();
|
String text = sb.toString();
|
||||||
|
|
||||||
// 1W 次
|
// 1W 次
|
||||||
long start = System.currentTimeMillis();
|
long start = System.currentTimeMillis();
|
||||||
SensitiveWordBs sensitiveWordBs = SensitiveWordBs.newInstance()
|
SensitiveWordBs sensitiveWordBs = SensitiveWordBs.newInstance().wordDeny(new IWordDeny() {
|
||||||
.wordDeny(new IWordDeny() {
|
@Override
|
||||||
@Override
|
public List<String> deny() {
|
||||||
public List<String> deny() {
|
return Collections.singletonList("口交");
|
||||||
return Collections.singletonList("口交");
|
}
|
||||||
}
|
}).wordAllow(new IWordAllow() {
|
||||||
})
|
@Override
|
||||||
.wordAllow(new IWordAllow() {
|
public List<String> allow() {
|
||||||
@Override
|
return Collections.singletonList("地铁口交易");
|
||||||
public List<String> allow() {
|
}
|
||||||
return Collections.singletonList("地铁口交易");
|
}).enableWordCheck(true).enableNumCheck(false).enableUrlCheck(false).enableEmailCheck(false).init();
|
||||||
}
|
|
||||||
})
|
|
||||||
.enableWordCheck(true)
|
|
||||||
.enableNumCheck(false)
|
|
||||||
.enableUrlCheck(false)
|
|
||||||
.enableEmailCheck(false)
|
|
||||||
.init();
|
|
||||||
|
|
||||||
for(int i = 0; i < 10000; i++) {
|
for (int i = 0; i < 10000; i++) {
|
||||||
sensitiveWordBs.findAll(text);
|
sensitiveWordBs.findAll(text);
|
||||||
}
|
}
|
||||||
long end = System.currentTimeMillis();
|
long end = System.currentTimeMillis();
|
||||||
System.out.println("------------------ COST: " + (end-start));
|
System.out.println("------------------ COST: " + (end - start));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user