1.4K+ Stars!开源的高性能敏感词工具

原创 小奇 爱编程爱技术 2024-01-19 08:00 发表于北京

每天给大家带来网站工具、开源社区项目、开源软件、安卓&IOS软件等黑科技!

小编不会主动加任何人好友,请认准【爱编程爱技术】公众号,谨防上当受骗,宝子要擦亮卡姿兰特大眼睛哦!

如果你们有什么好的建议,也可以在后台留言。
创作不易,希望大家给一点鼓励,把公众号设置为"星标",给文章点下""和"",谢谢大家!每日持续更新,望宝子们多多支持~

图片

大家都知道几乎每一个web应用或游戏设计中,都需要做敏感词的过滤以及转换。为了应对越来越多的敏感词,寻找一个高效率的敏感词过滤算法就摆在了各个程序员的面前。目前业内公认的效率最高的就是 DFA 算法。

小编今天为大家分享这个开源项目也是基于DFA 算法实现:sensitive-word,用于过滤敏感词的 Java 库。一款高性能的敏感词过滤工具,词库共收录了 6w+ 内容,支持自定义敏感词、白名单、替换策略、数字常见形式的互换、忽略重复词等功能。

该项目在 GitHub 上的star数更是一路飙升到了1.4k。

图片

🎨️ 最新版本的功能特性

  • 6W+ 词库,且不断优化更新

  • 基于 fluent-api 实现,使用优雅简洁

  • 基于 DFA 算法,性能为 7W+ QPS,应用无感

  • 支持敏感词的判断、返回、脱敏等常见操作

  • 支持常见的格式转换

  • 全角半角互换、英文大小写互换、数字常见形式的互换、中文繁简体互换、英文常见形式的互换、忽略重复词等

  • 支持敏感词检测、邮箱检测、数字检测、网址检测等

  • 支持自定义替换策略

  • 支持用户自定义敏感词和白名单

  • 支持数据的数据动态更新(用户自定义),实时生效

  • 支持敏感词的标签接口

  • 支持跳过一些特殊字符,让匹配更灵活

🌟 性能测试

1、测试环境为普通的笔记本

  • 处理器 12th Gen Intel(R) Core(TM) i7-1260P   2.10 GHz

  • 机带 RAM  16.0 GB (15.7 GB 可用)

  • 系统类型    64 位操作系统, 基于 x64 的处理器

2、测试数据:100+ 字符串,循环 10W 次。

图片

不同环境会有差异,但是比例基本稳定。

🧰 如何使用

项目的使用非常简单快捷,具体步骤如下:

1、环境依赖:

  • JDK1.7+

  • Maven 3.x+

2、在 pom 中引入依赖

<dependency>    <groupId>com.github.houbb</groupId>    <artifactId>sensitive-word</artifactId>    <version>[最新版本]</version></dependency>

3、判断是否包含敏感词

final String text = "五星红旗迎风飘扬,毛主席的画像屹立在天安门前。";
Assert.assertTrue(SensitiveWordHelper.contains(text));

🔥 其他用法

1、返回第一个敏感词

final String text = "五星红旗迎风飘扬,毛主席的画像屹立在天安门前。";
String word = SensitiveWordHelper.findFirst(text);

2、返回所有敏感词

final String text = "五星红旗迎风飘扬,毛主席的画像屹立在天安门前。";
List<String> wordList = SensitiveWordHelper.findAll(text);

3、默认的替换策略,将敏感换为 *

final String text = "五星红旗迎风飘扬,毛主席的画像屹立在天安门前。";String result = SensitiveWordHelper.replace(text);
//输出:****迎风飘扬,***的画像屹立在***前。

4、指定替换的内容

final String text = "五星红旗迎风飘扬,毛主席的画像屹立在天安门前。";String result = SensitiveWordHelper.replace(text, '0');
//输出: 0000迎风飘扬,000的画像屹立在000前。

5、邮箱检测

final String text = "楼主好人,邮箱 sensitiveword@xx.com";
List<String> wordList = SensitiveWordHelper.findAll(text);Assert.assertEquals("[sensitiveword@xx.com]", wordList.toString());

此外,项目还提供了一个 IWordResultHandler 结果处理类,可以对敏感词的结果进行处理,允许用户自定义。在使用的时候更加灵活。小伙伴们可以参考项目的主页文档自行尝试。

整体来说,使用起来还是很简单,如果你需要做一个过滤敏感词的功能,或者你自己准备造一个类似的,可以了解一下,避免重复造轮子,非常方便!

附项目的链接:

开源地址:

https://github.com/houbb/sensitive-word

往期推荐:

评论敏感词屏蔽功能可以通过以下步骤实现: 1. 在 MySQL 数据库中创建一个敏感词表,用于存储所有需要屏蔽的敏感词。 2. 在 Spring Boot 中使用 MyBatis 或 JPA 等框架,将敏感词表映射为一个实体类,并创建一个 DAO 层用于操作该表。 3. 在后端编写一个过滤器,用于过滤评论中的敏感词过滤器可以在评论提交到后端之前进行拦截,并根据敏感词表进行屏蔽。 4. 在前端使用 Vue3,通过 AJAX 请求将评论提交到后端,并接收后端返回的结果。如果评论中包含敏感词,前端可以弹出提示框进行提醒。 下面是一个简单的示例代码,仅供参考: MySQL敏感词表: ```sql CREATE TABLE `sensitive_words` ( `id` int(11) NOT NULL AUTO_INCREMENT, `word` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` Spring Boot 实体类: ```java @Entity @Table(name = "sensitive_words") public class SensitiveWord { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(name = "word") private String word; // getter 和 setter 方法 } ``` Spring Boot DAO 层: ```java @Repository public interface SensitiveWordDao extends JpaRepository<SensitiveWord, Integer> { List<SensitiveWord> findAll(); } ``` Spring Boot 过滤器: ```java @WebFilter(filterName = "sensitiveWordFilter", urlPatterns = "/comment/*") public class SensitiveWordFilter implements Filter { private List<String> sensitiveWords = new ArrayList<>(); @Autowired private SensitiveWordDao sensitiveWordDao; @Override public void init(FilterConfig filterConfig) throws ServletException { List<SensitiveWord> words = sensitiveWordDao.findAll(); for (SensitiveWord word : words) { sensitiveWords.add(word.getWord()); } } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; String comment = httpRequest.getParameter("comment"); for (String word : sensitiveWords) { if (comment.contains(word)) { HttpServletResponse httpResponse = (HttpServletResponse) response; httpResponse.setStatus(400); httpResponse.getWriter().write("评论中包含敏感词"); return; } } chain.doFilter(request, response); } @Override public void destroy() { } } ``` Vue3 组件: ```vue <template> <div> <textarea v-model="comment"></textarea> <button @click="submitComment">提交</button> </div> </template> <script> import axios from 'axios'; export default { data() { return { comment: '' } }, methods: { submitComment() { axios.post('/comment', { comment: this.comment }).then(response => { alert('评论成功'); }).catch(error => { alert(error.response.data); }); } } } </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值