极简版Java敏感词检测工具

极简版Java敏感词检测工具:3大核心优势+5大技术要点,比传统方法快10倍! 摘要:本文揭秘基于DFA算法的Java敏感词检测工具,通过构建敏感词树实现O(n)高效匹配,相较传统方法效率提升10倍。工具支持零配置部署、多语言兼容及动态词库更新,并可通过自定义策略灵活替换敏感词。实战案例显示,在社交评论过滤和AI内容审核场景中,该方案将误判率降至1%以下,处理速度达100万条/秒,显著降低合规风险。核心技术包括DFA树构建、Unicode规范化处理及第三方服务集成,为敏感词过滤提供轻量级解决方案。** 关键词:DFA算法、敏感词检测、零配置、Java工具、内容安全 阅读详情

👉 这是一个或许对你有用的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料: 

901d854518dd71bcde3d806ce6f01323.gif

👉这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号、CRM 等等功能:

  • Boot 仓库:https://gitee.com/zhijiantianya/ruoyi-vue-pro

  • Cloud 仓库:https://gitee.com/zhijiantianya/yudao-cloud

  • 视频教程:https://doc.iocoder.cn

【国内首批】支持 JDK 21 + SpringBoot 3.2.2、JDK 8 + Spring Boot 2.7.18 双版本 

来源:juejin.cn/post/
7392197771052924979


一、使用步骤

1)引入 Maven 依赖

引入最新的版本即可,见附录开源地址。

<dependency>
    <groupId>com.github.houbb</groupId>
    <artifactId>sensitive-word</artifactId>
    <version>0.18.0</version>
</dependency>
2)核心方法使用实例

包含了主要的一些功能和方法,如下所示:

  • 常规用法 查找替换;

  • 指定替换字符串;

  • 检测忽略大小写,特殊字符,重复字符,简繁体,中英文等;

  • 自定义替换检测策略示例;

package com.example.demo;

import com.github.houbb.sensitive.word.api.IWordContext;
import com.github.houbb.sensitive.word.api.IWordReplace;
import com.github.houbb.sensitive.word.api.IWordResult;
import com.github.houbb.sensitive.word.bs.SensitiveWordBs;
import com.github.houbb.sensitive.word.core.SensitiveWordHelper;
import com.github.houbb.sensitive.word.support.result.WordResultHandlers;
import com.github.houbb.sensitive.word.utils.InnerWordCharUtils;

import java.util.List;

public class SensitiveWordTestDemo {

    public static void main(String[] args) {
        //testNormal();
        //testDefineReplace();
        //testSensitiveWordResultHandler();
        //testOtherFeatures();
        testMoreFeatures();
    }

    // 常规使用案例:替换敏感词
    public static void testNormal() {
        final String text = "五星红旗迎风飘扬,毛主席的画像屹立在天安门前。";
        System.out.println("是否包含铭感词:" + SensitiveWordHelper.contains(text));
        System.out.println("查找第一个铭感词:" + SensitiveWordHelper.findFirst(text));
        System.out.println("查找所有铭感词:" + SensitiveWordHelper.findAll(text));

        System.out.println("替换所有铭感词:" + SensitiveWordHelper.replace(text));
        System.out.println("替换所有铭感词(指定替换符号):" + SensitiveWordHelper.replace(text, '⭐'));
    }

    /**
     * 此案例讲解:IWordResultHandler 可以对敏感词的结果进行处理,允许用户自定义。
     */
    public static void testSensitiveWordResultHandler() {
        final String text = "五星红旗迎风飘扬,毛主席的画像屹立在天安门前。";

        List<String> wordList = SensitiveWordHelper.findAll(text);
        //Assert.assertEquals("[五星红旗, 毛主席, 天安门]", wordList.toString());
        System.out.println("1.查找到所有铭感词:" + wordList);

        List<String> wordList2 = SensitiveWordHelper.findAll(text, WordResultHandlers.word());
        //Assert.assertEquals("[五星红旗, 毛主席, 天安门]", wordList2.toString());
        System.out.println("2.默认内置处理(同直接查找到所有敏感词):" + wordList2);

        List<IWordResult> wordList3 = SensitiveWordHelper.findAll(text, WordResultHandlers.raw());
        //Assert.assertEquals("[WordResult{startIndex=0, endIndex=4}, WordResult{startIndex=9, endIndex=12}, WordResult{startIndex=18, endIndex=21}]", wordList3.toString());
        System.out.println("3.查找敏感词单词本身的起始位置到终止位置:" + wordList3);
    }

    // 实例:常规忽略检测特性
    public static void testOtherFeatures() {
        System.out.println("\n其他属性\n");
        String text = "fuCK the bad words.";
        String word = SensitiveWordHelper.findFirst(text);
        //Assert.assertEquals("fuCK", word);
        System.out.println("忽略大小写:" + word);
        System.out.println("替换大小写字符:" + SensitiveWordHelper.replace(text));

        text = "fuck the bad words.";
        word = SensitiveWordHelper.findFirst(text);
        //Assert.assertEquals("fuck", word);
        System.out.println("忽略半圆角:" + word);
        System.out.println("替换半圆角字符:" + SensitiveWordHelper.replace(text));

        text = "这个是我的微信:9⓿二肆⁹₈③⑸⒋➃㈤㊄";
        List<String> wordList = SensitiveWordBs.newInstance().enableNumCheck(true).init().findAll(text);
        //Assert.assertEquals("[9⓿二肆⁹₈③⑸⒋➃㈤㊄]", wordList.toString());
        System.out.println("忽略数字的写法:" + wordList.toString());
        System.out.println("替换数字字符:" + SensitiveWordBs.newInstance().enableNumCheck(true).init().replace(text));

        text = "我爱我的祖国和五星紅旗。";
        List<String> wordList1 = SensitiveWordHelper.findAll(text);
        //Assert.assertEquals("[五星紅旗]", wordList1.toString());
        System.out.println("检测敏感词简繁体格式是否存在:" + wordList1.toString());

        text = "Ⓕⓤc⒦ the bad words";
        List<String> wordList2 = SensitiveWordHelper.findAll(text);
        //Assert.assertEquals("[Ⓕⓤc⒦]", wordList2.toString());
        System.out.println("检测敏感词是否存在英文的书写格式:" + wordList2.toString());

        text = "ⒻⒻⒻfⓤuⓤ⒰cⓒ⒦ the bad words";
        List<String> wordList3 = SensitiveWordBs.newInstance()
                .ignoreRepeat(true)
                .init()
                .findAll(text);
        //Assert.assertEquals("[ⒻⒻⒻfⓤuⓤ⒰cⓒ⒦]", wordList3.toString());
        System.out.println("检测重复词每个字符是否重复:" + wordList3.toString());
    }

    // 实例:更多检测特性
    public static void testMoreFeatures() {
        // 1.邮箱检测(邮箱等个人信息,默认未启用。)
        String text = "楼主好人,邮箱 sensitiveword@xx.com";
        List<String> wordList = SensitiveWordBs.newInstance().enableEmailCheck(true).init().findAll(text);
        //Assert.assertEquals("[sensitiveword@xx.com]", wordList.toString());
        System.out.println("是否存在邮箱:" + wordList.toString());

        // 2.连续数字检测(一般用于过滤手机号/QQ等广告信息,默认未启用。)
        text = "你懂得:12345678";
        // 默认检测 8 位
        List<String> wordList1 = SensitiveWordBs.newInstance()
                .enableNumCheck(true)
                .init().findAll(text);
        //Assert.assertEquals("[12345678]", wordList.toString());
        System.out.println("是否存在连续数字字符串:" + wordList1);
        // 指定数字的长度,避免误杀
        List<String> wordList2 = SensitiveWordBs.newInstance()
                .enableNumCheck(true)
                .numCheckLen(9)
                .init().findAll(text);
        //Assert.assertEquals("[]", wordList2.toString());
        System.out.println("是否存在连续数字字符串2:" + wordList2.toString());

        // 3.网址检测(用于过滤常见的网址信息,默认未启用, v0.18.0 优化 URL 检测,更加严格,降低误判率)
        text = "点击链接 https://www.baidu.com 查看答案";
        SensitiveWordBs sensitiveWordBs = SensitiveWordBs.newInstance().enableUrlCheck(true).init();
        List<String> wordList3 = sensitiveWordBs.findAll(text);
        //Assert.assertEquals("[https://www.baidu.com]", wordList3.toString());
        //Assert.assertEquals("点击链接 ********************* 查看答案", sensitiveWordBs.replace(text));
        System.out.println("是否存在网址信息:" + wordList3.toString());
        System.out.println("是否存在网址信息2并替换:" + sensitiveWordBs.replace(text));

        // 4.IPv4 检测: 避免用户通过 ip 绕过网址检测等,默认未启用。
        text = "个人网站,如果网址打不开可以访问 127.0.0.1。";
        SensitiveWordBs sensitiveWordBs2 = SensitiveWordBs.newInstance().enableIpv4Check(true).init();
        List<String> wordList4 = sensitiveWordBs2.findAll(text);
        //Assert.assertEquals("[127.0.0.1]", wordList4.toString());
        System.out.println("是否存在 IPv4:" + wordList4.toString());
    }

    // 实例:自定义检测替换策略
    public static void testDefineReplace() {
        System.out.println("自定义敏感词替换策略:(策略:指定敏感词替换)");
        final String text = "五星红旗迎风飘扬,毛主席的画像屹立在天安门前。";
        MySensitiveWordReplace replace = new MySensitiveWordReplace();
        String result = SensitiveWordHelper.replace(text, replace);
        System.out.println("自定义替换策略结果:" + result);
    }
}

class MySensitiveWordReplace implements IWordReplace {

    @Override
    public void replace(StringBuilder stringBuilder, char[] chars, IWordResult wordResult, IWordContext iWordContext) {
        String sensitiveWord = InnerWordCharUtils.getString(chars, wordResult);
        // 自定义不同的敏感词替换策略,可以从数据库等地方读取
        if ("五星红旗".equals(sensitiveWord)) {
            stringBuilder.append("国家旗帜");
        } else if ("毛主席".equals(sensitiveWord)) {
            stringBuilder.append("教员");
        } else {
            // 其他默认使用 * 代替
            int wordLength = wordResult.endIndex() - wordResult.startIndex();
            for (int i = 0; i < wordLength; i++) {
                stringBuilder.append('*');
            }
        }
    }
}

输出结果展示:

是否包含铭感词:true
查找第一个铭感词:五星红旗
查找所有铭感词:[五星红旗, 毛主席, 天安门]
替换所有铭感词:****迎风飘扬,***的画像屹立在***前。
替换所有铭感词(指定替换符号):⭐⭐⭐⭐迎风飘扬,⭐⭐⭐的画像屹立在⭐⭐⭐前。
自定义敏感词替换策略:(策略:指定敏感词替换)
自定义替换策略结果:国家旗帜迎风飘扬,教员的画像屹立在***前。
1.查找到所有铭感词:[五星红旗, 毛主席, 天安门]
2.默认内置处理(同直接查找到所有敏感词):[五星红旗, 毛主席, 天安门]
3.查找敏感词单词本身的起始位置到终止位置:[WordResult{startIndex=0, endIndex=4, type='WORD'}, WordResult{startIndex=9, endIndex=12, type='WORD'}, WordResult{startIndex=18, endIndex=21, type='WORD'}]

其他属性

忽略大小写:fuCK
替换大小写字符:**** the bad words.
忽略半圆角:fuck
替换半圆角字符:**** the bad words.
忽略数字的写法:[9⓿二肆⁹₈③⑸⒋➃㈤㊄]
替换数字字符:这个是我的微信:************
检测敏感词简繁体格式是否存在:[五星紅旗]
检测敏感词是否存在英文的书写格式:[Ⓕⓤc⒦]
检测重复词每个字符是否重复:[ⒻⒻⒻfⓤuⓤ⒰cⓒ⒦]
是否存在邮箱:[sensitiveword@xx.com]
是否存在连续数字字符串:[12345678]
是否存在连续数字字符串2:[]
是否存在网址信息:[https://www.baidu.com]
是否存在网址信息2并替换:点击链接 ********************* 查看答案
是否存在 IPv4:[127.0.0.1]

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro

  • 视频教程:https://doc.iocoder.cn/video/

二、核心方法:查找 / 替换

06fb1c8380cd6e03995cf24b5b54d686.png
图片

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud

  • 视频教程:https://doc.iocoder.cn/video/

三、更多的检测策略(自定义)

1)邮箱-网址-IPV4-连续字符检测
// 实例:更多检测特性
public static void testMoreFeatures() {
    // 1.邮箱检测(邮箱等个人信息,默认未启用。)
    String text = "楼主好人,邮箱 sensitiveword@xx.com";
    List<String> wordList = SensitiveWordBs.newInstance().enableEmailCheck(true).init().findAll(text);
    //Assert.assertEquals("[sensitiveword@xx.com]", wordList.toString());
    System.out.println("是否存在邮箱:" + wordList.toString());

    // 2.连续数字检测(一般用于过滤手机号/QQ等广告信息,默认未启用。)
    text = "你懂得:12345678";
    // 默认检测 8 位
    List<String> wordList1 = SensitiveWordBs.newInstance()
        .enableNumCheck(true)
        .init().findAll(text);
    //Assert.assertEquals("[12345678]", wordList.toString());
    System.out.println("是否存在连续数字字符串:" + wordList1);
    // 指定数字的长度,避免误杀
    List<String> wordList2 = SensitiveWordBs.newInstance()
        .enableNumCheck(true)
        .numCheckLen(9)
        .init().findAll(text);
    //Assert.assertEquals("[]", wordList2.toString());
    System.out.println("是否存在连续数字字符串2:" + wordList2.toString());

    // 3.网址检测(用于过滤常见的网址信息,默认未启用, v0.18.0 优化 URL 检测,更加严格,降低误判率)
    text = "点击链接 https://www.baidu.com 查看答案";
    SensitiveWordBs sensitiveWordBs = SensitiveWordBs.newInstance().enableUrlCheck(true).init();
    List<String> wordList3 = sensitiveWordBs.findAll(text);
    //Assert.assertEquals("[https://www.baidu.com]", wordList3.toString());
    //Assert.assertEquals("点击链接 ********************* 查看答案", sensitiveWordBs.replace(text));
    System.out.println("是否存在网址信息:" + wordList3.toString());
    System.out.println("是否存在网址信息2并替换:" + sensitiveWordBs.replace(text));

    // 4.IPv4 检测: 避免用户通过 ip 绕过网址检测等,默认未启用。
    text = "个人网站,如果网址打不开可以访问 127.0.0.1。";
    SensitiveWordBs sensitiveWordBs2 = SensitiveWordBs.newInstance().enableIpv4Check(true).init();
    List<String> wordList4 = sensitiveWordBs2.findAll(text);
    //Assert.assertEquals("[127.0.0.1]", wordList4.toString());
    System.out.println("是否存在 IPv4:" + wordList4.toString());
}
2)常规检测:大小写-特殊字符-重复字符-简繁体等
// 实例:常规忽略检测特性
public static void testOtherFeatures() {
    System.out.println("\n其他属性\n");
    String text = "fuCK the bad words.";
    String word = SensitiveWordHelper.findFirst(text);
    //Assert.assertEquals("fuCK", word);
    System.out.println("忽略大小写:" + word);
    System.out.println("替换大小写字符:" + SensitiveWordHelper.replace(text));

    text = "fuck the bad words.";
    word = SensitiveWordHelper.findFirst(text);
    //Assert.assertEquals("fuck", word);
    System.out.println("忽略半圆角:" + word);
    System.out.println("替换半圆角字符:" + SensitiveWordHelper.replace(text));

    text = "这个是我的微信:9⓿二肆⁹₈③⑸⒋➃㈤㊄";
    List<String> wordList = SensitiveWordBs.newInstance().enableNumCheck(true).init().findAll(text);
    //Assert.assertEquals("[9⓿二肆⁹₈③⑸⒋➃㈤㊄]", wordList.toString());
    System.out.println("忽略数字的写法:" + wordList.toString());
    System.out.println("替换数字字符:" + SensitiveWordBs.newInstance().enableNumCheck(true).init().replace(text));

    text = "我爱我的祖国和五星紅旗。";
    List<String> wordList1 = SensitiveWordHelper.findAll(text);
    //Assert.assertEquals("[五星紅旗]", wordList1.toString());
    System.out.println("检测敏感词简繁体格式是否存在:" + wordList1.toString());

    text = "Ⓕⓤc⒦ the bad words";
    List<String> wordList2 = SensitiveWordHelper.findAll(text);
    //Assert.assertEquals("[Ⓕⓤc⒦]", wordList2.toString());
    System.out.println("检测敏感词是否存在英文的书写格式:" + wordList2.toString());

    text = "ⒻⒻⒻfⓤuⓤ⒰cⓒ⒦ the bad words";
    List<String> wordList3 = SensitiveWordBs.newInstance()
        .ignoreRepeat(true)
        .init()
        .findAll(text);
    //Assert.assertEquals("[ⒻⒻⒻfⓤuⓤ⒰cⓒ⒦]", wordList3.toString());
    System.out.println("检测重复词每个字符是否重复:" + wordList3.toString());
}
3)自定义检测替换策略

自定义检测替换

class MySensitiveWordReplace implements IWordReplace {

    @Override
    public void replace(StringBuilder stringBuilder, char[] chars, IWordResult wordResult, IWordContext iWordContext) {
        String sensitiveWord = InnerWordCharUtils.getString(chars, wordResult);
        // 自定义不同的敏感词替换策略,可以从数据库等地方读取
        if ("五星红旗".equals(sensitiveWord)) {
            stringBuilder.append("国家旗帜");
        } else if ("毛主席".equals(sensitiveWord)) {
            stringBuilder.append("教员");
        } else {
            // 其他默认使用 * 代替
            int wordLength = wordResult.endIndex() - wordResult.startIndex();
            for (int i = 0; i < wordLength; i++) {
                stringBuilder.append('*');
            }
        }
    }
}

使用实例:

// 实例:自定义检测替换策略
public static void testDefineReplace() {
    System.out.println("自定义敏感词替换策略:(策略:指定敏感词替换)");
    final String text = "五星红旗迎风飘扬,毛主席的画像屹立在天安门前。";
    MySensitiveWordReplace replace = new MySensitiveWordReplace();
    String result = SensitiveWordHelper.replace(text, replace);
    System.out.println("自定义替换策略结果:" + result);
}
开源地址

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


欢迎加入我的知识星球,全面提升技术能力。

👉 加入方式,“长按”或“扫描”下方二维码噢:

d8956af267b978958549f178836d816c.png

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。

45b256f136686bbec9988187f8a8356f.png

e09d1c60f0489ffca206b266824f996d.png821ba5bf2637ebf23aeb3ef9ada44a4d.png9898f7b2a8e490a14971e5c7dc27e9aa.png2ebf06ee5147de194c48293492215927.png

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
java实现敏感词过滤 java过滤敏感词 参考文章 http://blog.youkuaiyun.com/chenssy/article/details/26961957 想通过博客把自己在平常工作中用到的东西和感悟记录下来,分享给更多的人。这是我写的第一篇博客,主要是关于java服务端敏感词过滤的。最近做了个敏感词过滤的功能。一般来说文字过滤第一种想到的是简单的把敏感词放到集合中,获取页面上传文字,然后进行匹配。 阅读详情

相关推荐

Java实现DFA算法敏感词过滤

Java实现DFA算法敏感词过滤。 文章目录一. 应用场景二. 实现思路三. 源码实现 一. 应用场景 模拟非法词汇自动替换成*字符,且敏感词汇支持动态调整。 效果如下,若配置了敏感词:今天,则当用户在输入:今天,天气真不错。实际应该输出:** **,天气真不错 ** 二. 实现思路 使用MySQL作为敏感词库 使用DFA算法实现文字过滤 Q:什么是DFA? DFA全称为:Deterministic Finite Automaton,即确定有穷自动机。其特征为:有一个有限状态集合和一些从一个状态通向.

imVainiycos的博客 9088

【工具】Js敏感信息扫描器

在做JS漏洞挖掘的时候,发现很多工具不是太好用,在信息收集的时间花费很多,自己就像写一个JS信息收集的工具,使用python开发了一个简单的收集工具,其中仿照JSFinder工具的功能,做了信息针对性优化,先做了一个测试版的工具,此工具带有GUI的界面,欢迎交流。在开发时采用tkinter开发的GUI界面,可以探测网站上的 JavaScript 文件,并检查它们是否包含敏感信息。该应用程序使用 requests、threading、tkinter、BeautifulSoup 和 selenium 等库实现。

信安是不可或缺的一部分! 4132

简版 Java 敏感词检测工具

如果您需要使用自定义的敏感词库,可以通过实现IWordDeny接口来定义自己的敏感词列表。@Overridereturn Arrays.asList("自定义敏感词1", "自定义敏感词2");.wordDeny(new CustomSensitiveWord()) // 使用自定义敏感词库.init();String text = "这里是包含自定义敏感词的文本。System.out.println("是否包含敏感词:" + contains);这个极简版的敏感词检测工具利用了。

墨夶的博客 477

Java 工具类过滤敏感词

在社交化的电商项目中,很多用户提交的信息涉及敏感性,比如:用户评论、用户发表的动态等。目前平台已经介入第三方平台的Saas服务,在线过滤用户提交的敏感词信息。然后,在实际使用过程中存在一些敏感词漏处理的情况,从而导致平台声誉受损。基于此,我们准备在平台增加一个自定义敏感词过滤的功能模块,对于第三方敏感词服务漏处理的敏感词,我们将通过后台配置在敏感词库中,并进行补充处理。

MircoO的博客 1895

3步轻松上手!Java敏感词检测工具真的这么难吗?

通过本文的介绍,你应该已经学会了如何使用工具进行敏感词检测。这种方法不仅简单易用,还能有效保护你的应用免受不良信息的影响。希望这篇教程对你有所帮助,如果你有任何问题或建议,欢迎在评论区留言交流哦!🌟🌟🌟希望这篇文章能帮助你在Java敏感词检测方面更加得心应手。如果你觉得有用,不妨分享给更多的人吧!🎉🎉🎉。

java专栏 989

Java网站敏感词检测工具集.zip

敏感词检测工具主要是为了防止网络环境中的不良信息传播,以及确保内容审核的合规性。这类工具利用算法对文本数据进行分析,自动识别并过滤掉违反规定或者含有不适当内容的词语。其核心功能包括但不限于文本扫描、模式匹配、上下文分析、算法优化等。在大多数场景中,这些工具被集成到网络平台的内容管理系统中,帮助运营人员对用户生成的内容进行实时监控和管理。通过本案例,我们可以看到,敏感词检测工具的集成虽然看似简单,但实际上需要经过详细的规划和一系列的测试与优化。

weixin_30838971的博客 1052

CloudShovel:一款自动化搜索敏感信息的开源工具

CloudShovel:一款自动化搜索敏感信息的开源工具 在云计算领域,数据安全至关重要。Amazon Machine Images(AMIs)作为云计算中的重要组成部分,常常包含敏感信息。今天,我们要推荐的这款开源工具——CloudShovel,正是为了解决这一问题而设计的。 项目介绍 CloudShovel 是一款旨在公共或私有 Amazon Machine Images(AMIs)中搜索敏感...

gitblog_00199的博客 1058

对接萤石平台调用播放

萤石api 管理 · 萤石开放平台API文档 httpclient pom <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</version> </dependency> package com.ruoyi...

u011799016的博客 1774

极简版 Java 敏感词检测工具

/ 实例:更多检测特性// 1.邮箱检测(邮箱等个人信息,默认未启用。String text = "楼主好人,邮箱 sensitiveword@xx.com";System.out.println("是否存在邮箱:" + wordList.toString());// 2.连续数字检测(一般用于过滤手机号/QQ等广告信息,默认未启用。text = "你懂得:12345678";// 默认检测 8 位。

深入Java世界:探索编程之美与技术深度 532

OTP/EEPROM 读取与处理

Camera OTP/EEPROM 读取与处理 文章目录Camera OTP/EEPROM 读取与处理1. OTP概念1.1 基本概念1.2 OTP存储类型1.3 OTP烧录信息类型1.4 OTP 作用2. 配置准备2.1 基本认识2.2 OTP/EEPROM配置3. OTP/EEPROM datasheet理解 以及 读取方式3.1 data sheet 内容3.2 一般OTP/EEPROM(e...

Understand-image 1万+

二、声明式 Pipeline 语法

选择型参数,一般用于给定几个可选的值,然后选择其中一个进行赋值,例如:parameters { choice(name: ‘CHOICES’, choices: [‘one’, ‘two’, ‘three’], description: ‘’) },表示定义一个名为 CHOICES 的变量,可选的值为 one、two、three;默认情况下,如果定义了某个 stage 的 agent,在进入该 stage 的 agent 后,该 stage 的 when条件才会被评估,但是可以通过一些选项更改此选项。

Cyan_Jiang的博客 1220

【超实用】极简版Java敏感词检测工具极简版Java敏感词检测工具

点击上方蓝色“java大数据修炼之道”,选择“设为星标”每晚九点: 技术干货 ???? 必定奉上一、使用步骤1)引入 Maven 依赖引入最新的版本即可,见附录开源地址。<dependency> <groupId>com.github.houbb</groupId> <artifactId>sensitive-word</artif...

hello world! 240

android 14.0 去掉usb授权提示框 默认给予权限

在14.0的系统rom产品开发中,在进行iot关于插入usb设备的开发过程中,在插入usb设备时会弹出usb授权提示框,也带来一些不便, 这个需要默认授予USB权限,插拔usb都不弹出usb弹窗所以这要从usb授权相关管理页默认给与usb权限,接下来分析下 相关的实现功能流程

安卓兼职framework和app工程师的博客 2264

极简版 Java 敏感词检测工具,三分钟搞定~

在当今互联网时代,敏感词检测成为了维护网络环境健康的重要工具。它不仅能够帮助我们过滤掉不当内容,还能确保平台的合规性。今天,我要向大家推荐一个简单易用的敏感词检测工具——sensitive-word,它基于高效的DFA算法实现,支持多种格式转换和自定义替换策略,非常适合各种应用场景一、使用步骤1)引入 Maven 依赖引入最新的版本即可,见附录开源地址。<dependency> ...

公众号-老炮说Java 511

(BS ISO 11898-1:2015)CAN_FD 总线协议详解1- 基本概念描述

本文对can总线协议做了详细的讲解,can协议里面的每一个知识点都做了详细且举一反三的论述,读了本文可以不用读can协议了。

zhangziranzm的博客 2315

Python 爬虫高级实战:HTTPS 证书忽略与代理抓包配置

本文深入解析了HTTPS加密与SSL证书校验机制在爬虫开发中的核心问题及解决方案。文章首先剖析了HTTPS协议架构和证书校验流程,指出爬虫开发中常见的证书异常场景及其负面影响。随后详细介绍了Python主流请求库(requests、httpx、aiohttp)的证书忽略配置方法,包括同步/异步模式下的实现方案。针对代理环境,文章系统比较了HTTP、HTTPS、SOCKS5等代理类型的特性差异,并提供了完整的代理配置示例。特别对中间人抓包场景,阐述了Mitmproxy的工作原理和配置要点。最后提出了工程级爬虫

2503_91057718的博客 87

极简版Java敏感词检测SDK

sensitive-word 基于 DFA 算法实现的高性能敏感词工具,开源在GitHub:https://github.com/houbb/sensitive-word。用于敏感词/违禁词/违法词/脏词等的识别和阻拦,是基于 DFA 算法实现的高性能 java 敏感词过滤工具框架。

分享技术,记录思考和感悟 1224

Linux 服务器上部署 OpenClaw完整教程

2. 全局安装 OpenClaw 3. 初始化配置 配置模型提供商 方式一:使用配置命令(推荐) 方式二:直接编辑配置文件 在 部分添加: 配置多个模型提供商 如果你使用 Antigravity 本地代理,可以同时配置多个模型: 配置飞书集成 1. 创建飞书应用 访问 飞书开放平台 创建企业自建应用 记录 App ID 和 App Secret 2. 配置应用权限 在飞书开放平台,为应用添加以下权限:重要: 必须使用 长连接(WebSocket) 模式,不要使用 HTTP 回调!在飞书开放

Maynor的博客 5252

开源的敏感词检测工具

首先开源不是一件可耻,同时也不是一件让人觉得自己牛逼上天的一件事,开源出项目只是想更多的人能够少走弯路。对于使用者来说能够避免重复造轮子,对于开源者来说能够增加经验,使用者越多,可能发现的bug就越多,提出新的需求也可能会更多,所以对于开源者不仅是考验,也是能力提升的契机。

qq_46863837的博客 2015

ARFoundation系列讲解 - 手部跟踪编程

通过使用ARFoundation的手部跟踪子系统,我们可以轻松地在AR应用程序中实现与用户手部的交互。通过设置AR环境、创建场景和相机、添加手部跟踪功能以及编写相应的脚本,我们可以开始在AR场景中跟踪和操作用户的手部。在Unity中创建一个新场景,并将AR Session组件添加到场景中的一个空对象上。手部跟踪的具体实现可能因AR设备和平台的不同而有所差异,你可能需要根据你的使用情况进行一些适配和调整。当你将手部放入AR场景中时,手部跟踪系统将触发相应的事件,并调用脚本中的回调函数。

2301_79325339的博客 358

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

java检测敏感词,Java实现敏感词检测的代码

[Java]代码import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.commons.io.FileUtils;import org....

weixin_31091067的博客 2682

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

敏感词过滤实战:Java 开发者不可错过的 sensitive-word

二、使用步骤引入 Maven 依赖在您的pom.xml文件中添加以下依赖,确保使用的是最新版本,具体版本号请参考官方文档或 GitHub 仓库。核心方法使用实例核心方法常规用法:查找与替换下面的代码展示了如何使用进行敏感词的基本检测和替换操作。String text = "五星红旗迎风飘扬,毛主席的画像屹立在天安门前。System.out.println("是否包含敏感词:" + SensitiveWordHelper.contains(text));

凯哥Java的博客 2376

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: 开发了一年的IDEA插件,接口调试的强大工具,敢说吊打所有
下一篇: 《黑神话 . 悟空》员工工资收入曝光
公众号-芋道源码
博客等级 码龄10年 1636粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值