code review:敏感词

This commit is contained in:
YunaiV 2023-10-19 23:25:17 +08:00
parent 630890d0ac
commit 14f006088a
4 changed files with 12 additions and 17 deletions

View File

@ -88,11 +88,11 @@ public interface SensitiveWordService {
List<String> validateText(String text, List<String> tags); List<String> validateText(String text, List<String> tags);
/** /**
* 判断文本是否合法 * 判断文本是否包含敏感词
* *
* @param text 文本 * @param text 文本
* @param tags 标签数组 * @param tags 标签数组
* @return 是否合法 true-合法 false-不合法 * @return 是否包含敏感词
*/ */
boolean isTextValid(String text, List<String> tags); boolean isTextValid(String text, List<String> tags);

View File

@ -258,7 +258,10 @@ public class SensitiveWordServiceImpl implements SensitiveWordService {
if (trie == null) { if (trie == null) {
continue; continue;
} }
return trie.isValid(text); // 如果有一个标签不合法则返回 false 不合法
if (!trie.isValid(text)) {
return false;
}
} }
return true; return true;
} }

View File

@ -30,9 +30,10 @@ public class SimpleTrie {
* @param strs 字符串数组 * @param strs 字符串数组
*/ */
public SimpleTrie(Collection<String> strs) { public SimpleTrie(Collection<String> strs) {
children = new HashMap<>(); // 排序优先使用较短的前缀
strs = CollUtil.sort(strs, String::compareTo);
// 构建树 // 构建树
strs = CollUtil.sort(strs, String::compareTo); // 排序优先使用较短的前缀 children = new HashMap<>();
for (String str : strs) { for (String str : strs) {
Map<Character, Object> child = children; Map<Character, Object> child = children;
// 遍历每个字符 // 遍历每个字符
@ -126,7 +127,7 @@ public class SimpleTrie {
* @param index 开始未知 * @param index 开始未知
* @param child 节点当前遍历到的 * @param child 节点当前遍历到的
* @param result 返回敏感词 * @param result 返回敏感词
* @return 是否无敏感词 true- false- * @return 是否有敏感词
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private static boolean recursionWithResult(String text, int index, Map<Character, Object> child, StringBuilder result) { private static boolean recursionWithResult(String text, int index, Map<Character, Object> child, StringBuilder result) {

View File

@ -239,7 +239,6 @@ public class SensitiveWordServiceImplTest extends BaseDbUnitTest {
testInitLocalCache(); testInitLocalCache();
// 准备参数 // 准备参数
String text = "你是傻瓜,你是笨蛋"; String text = "你是傻瓜,你是笨蛋";
// 调用 // 调用
List<String> result = sensitiveWordService.validateText(text, null); List<String> result = sensitiveWordService.validateText(text, null);
// 断言 // 断言
@ -247,7 +246,6 @@ public class SensitiveWordServiceImplTest extends BaseDbUnitTest {
// 准备参数 // 准备参数
String text2 = "你是傻瓜,你是笨蛋,你是白"; String text2 = "你是傻瓜,你是笨蛋,你是白";
// 调用 // 调用
List<String> result2 = sensitiveWordService.validateText(text2, null); List<String> result2 = sensitiveWordService.validateText(text2, null);
// 断言 // 断言
@ -259,7 +257,6 @@ public class SensitiveWordServiceImplTest extends BaseDbUnitTest {
testInitLocalCache(); testInitLocalCache();
// 准备参数 // 准备参数
String text = "你是傻瓜,你是笨蛋"; String text = "你是傻瓜,你是笨蛋";
// 调用 // 调用
List<String> result = sensitiveWordService.validateText(text, singletonList("论坛")); List<String> result = sensitiveWordService.validateText(text, singletonList("论坛"));
// 断言 // 断言
@ -268,12 +265,10 @@ public class SensitiveWordServiceImplTest extends BaseDbUnitTest {
// 准备参数 // 准备参数
String text2 = "你是白"; String text2 = "你是白";
// 调用 // 调用
List<String> result2 = sensitiveWordService.validateText(text2, singletonList("测试")); List<String> result2 = sensitiveWordService.validateText(text2, singletonList("测试"));
// 断言 // 断言
assertEquals(singletonList(""), result2); assertEquals(singletonList(""), result2);
} }
@Test @Test
@ -281,13 +276,11 @@ public class SensitiveWordServiceImplTest extends BaseDbUnitTest {
testInitLocalCache(); testInitLocalCache();
// 准备参数 // 准备参数
String text = "你是傻瓜,你是笨蛋"; String text = "你是傻瓜,你是笨蛋";
// 调用断言 // 调用断言
assertFalse(sensitiveWordService.isTextValid(text, null)); assertFalse(sensitiveWordService.isTextValid(text, null));
// 准备参数 // 准备参数
String text2 = "你是白"; String text2 = "你是白";
// 调用断言 // 调用断言
assertFalse(sensitiveWordService.isTextValid(text2, null)); assertFalse(sensitiveWordService.isTextValid(text2, null));
} }
@ -297,13 +290,11 @@ public class SensitiveWordServiceImplTest extends BaseDbUnitTest {
testInitLocalCache(); testInitLocalCache();
// 准备参数 // 准备参数
String text = "你是傻瓜,你是笨蛋"; String text = "你是傻瓜,你是笨蛋";
// 调用断言 // 调用断言
assertFalse(sensitiveWordService.isTextValid(text, singletonList("论坛"))); assertFalse(sensitiveWordService.isTextValid(text, singletonList("论坛")));
// 准备参数 // 准备参数
String text2 = "你是白"; String text2 = "你是白";
// 调用断言 // 调用断言
assertFalse(sensitiveWordService.isTextValid(text2, singletonList("测试"))); assertFalse(sensitiveWordService.isTextValid(text2, singletonList("测试")));
} }