JAVA和Nginx 教程大全

网站首页 > 精选教程 正文

Java开发工具敏感词过滤工具 sensitive-w

wys521 2024-12-14 11:24:19 精选教程 24 ℃ 0 评论

在Java开发中,敏感词过滤是一个常见的需求,特别是在处理用户输入、评论、聊天内容等场景时。你可以使用多种方法来实现敏感词过滤,包括但不限于使用正则表达式、字典树(Trie)、第三方库等。

### 1. 使用正则表达式

正则表达式是一种简单但性能较低的方法,适用于敏感词列表较小的情况。

import java.util.regex.Pattern;

public class SensitiveWordFilter {

private static final Pattern SENSITIVE_WORDS_PATTERN = Pattern.compile("\\b(敏感词1|敏感词2|敏感词3)\\b", Pattern.CASE_INSENSITIVE);

public static String filterSensitiveWords(String input) {

return SENSITIVE_WORDS_PATTERN.matcher(input).replaceAll("***");

}

public static void main(String[] args) {

String input = "这是一个包含敏感词1的句子。";

String filtered = filterSensitiveWords(input);

System.out.println(filtered); // 输出: 这是一个包含***的句子。

}

}



### 2. 使用字典树(Trie)

字典树(Trie)是一种高效的数据结构,适用于敏感词列表较大的情况。

import java.util.HashMap;

import java.util.Map;

public class SensitiveWordFilter {

private TrieNode root = new TrieNode();

public void addSensitiveWord(String word) {

TrieNode node = root;

for (char c : word.toCharArray()) {

node = node.getChildren().computeIfAbsent(c, k -> new TrieNode());

}

node.setEndOfWord(true);

}

public boolean containsSensitiveWord(String text) {

for (int i = 0; i < text.length(); i++) {

if (containsSensitiveWordFrom(text, i)) {

return true;

}

}

return false;

}

public String filterSensitiveWords(String text) {

StringBuilder result = new StringBuilder();

for (int i = 0; i < text.length(); i++) {

int j = i;

while (j < text.length() && containsSensitiveWordFrom(text, j)) {

j++;

}

if (j > i) {

result.append("***");

i = j - 1;

} else {

result.append(text.charAt(i));

}

}

return result.toString();

}

private boolean containsSensitiveWordFrom(String text, int start) {

TrieNode node = root;

for (int i = start; i < text.length(); i++) {

char c = text.charAt(i);

node = node.getChildren().get(c);

if (node == null) {

break;

}

if (node.isEndOfWord()) {

return true;

}

}

return false;

}

private static class TrieNode {

private Map<Character, TrieNode> children = new HashMap<>();

private boolean endOfWord = false;

public Map<Character, TrieNode> getChildren() {

return children;

}

public boolean isEndOfWord() {

return endOfWord;

}

public void setEndOfWord(boolean endOfWord) {

this.endOfWord = endOfWord;

}

}

public static void main(String[] args) {

SensitiveWordFilter filter = new SensitiveWordFilter();

filter.addSensitiveWord("敏感词1");

filter.addSensitiveWord("敏感词2");

String input = "这是一个包含敏感词1的句子。";

String filtered = filter.filterSensitiveWords(input);

System.out.println(filtered); // 输出: 这是一个包含***的句子。

}

}



### 3. 使用第三方库

有一些成熟的第三方库可以帮助你更方便地实现敏感词过滤,例如 `sensitive-word-filter`。

#### 添加依赖

如果你使用 Maven,可以在 `pom.xml` 中添加以下依赖:

<dependency>

<groupId>com.github.houbb</groupId>

<artifactId>sensitive-word-filter</artifactId>

<version>1.7.6</version>

</dependency>

#### 使用示例

import com.github.houbb.sensitive.word.api.ISensitiveCheck;

import com.github.houbb.sensitive.word.api.ISensitiveReplace;

import com.github.houbb.sensitive.word.core.check.impl.DefaultSensitiveCheck;

import com.github.houbb.sensitive.word.core.replace.impl.DefaultSensitiveReplace;

public class SensitiveWordFilterExample {

public static void main(String[] args) {

ISensitiveCheck sensitiveCheck = DefaultSensitiveCheck.newInstance();

ISensitiveReplace sensitiveReplace = DefaultSensitiveReplace.newInstance();

// 添加敏感词

sensitiveCheck.addWords("敏感词1", "敏感词2");

String input = "这是一个包含敏感词1的句子。";

boolean containsSensitiveWord = sensitiveCheck.contains(input);

String filtered = sensitiveReplace.replace(input);

System.out.println("是否包含敏感词: " + containsSensitiveWord); // 输出: 是否包含敏感词: true

System.out.println("过滤后的句子: " + filtered); // 输出: 过滤后的句子: 这是一个包含***的句子。

}

}

### 总结

- **正则表达式**:适合敏感词列表较小的情况。

- **字典树(Trie)**:适合敏感词列表较大的情况,性能较好。

- **第三方库**:使用成熟的第三方库可以简化开发工作,提高开发效率。

根据你的具体需求选择合适的方法。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表