`

JAVA 实现DFA算法

阅读更多

1、创建敏感字Map

public static Map addWordToHashMap(Set<String> keyWordSet) {
        if(0 == keyWordSet.size()) return new HashMap();
        Map map = new HashMap(keyWordSet.size());
        String key = null;
        Map nowMap = null;
        Map<String, String> newWorMap = null;
        Iterator<String> iterator = keyWordSet.iterator();
        while(iterator.hasNext()){
            key = iterator.next();
            nowMap = map;
            for(int i = 0; i < key.length(); i++){
                char keyChar = key.charAt(i);
                Map wordMap = (Map) nowMap.get(keyChar);
                if(wordMap != null) nowMap =  wordMap;
                else{
                    newWorMap = new HashMap<String,String>();
                    nowMap.put(keyChar, newWorMap);
                    nowMap = newWorMap;
                }
                if(i == key.length() - 1) nowMap.put("isEnd", "1");
            }
        }
        return map;
    }

 

2、创建正则特殊符号过滤

 public static String formatString(String str) {
        if (StringUtils.isNotBlank(str)) {
            String regEx="[`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
            return   Pattern.compile(regEx).matcher(str).replaceAll("").trim();
        }
        return "";
    }

 

3、校验字符串

 

 public static String checkWork(String txt, Map map, boolean needToFormat) {
        try {
            if (needToFormat) txt = formatString(txt);
            StringBuffer sb = new StringBuffer();
            boolean has = false;
            char word;
            int num;
            for (int i = 0; i < txt.length(); i++) {
                word = txt.charAt(i);
                sb = new StringBuffer(word);
                if (map.containsKey(word)) {
                    Map m = (Map) map.get(word);
                    sb.append(word);
                    num = i + 1;
                    while (true) {
                        if (num < txt.length()) {
                            word = txt.charAt(num++);
                            sb.append(word);
                            if (m.containsKey(word)){
                                m = (Map) m.get(word);
                                if (m.containsKey("isEnd")) {
                                    has = true;
                                    return sb.toString();
                                }
                            } else break;
                        } else break;
                    }
                }
            }
            if (has)  return sb.toString();
        } catch (Exception e) {
            //logger.error("检验敏感字出错,原因为:{}", e);
            e.printStackTrace;
        }
        return null;
    }
 

 

 

分享到:
评论

相关推荐

    java利用DFA算法实现敏感词过滤功能

    ### 三、DFA算法实现敏感词过滤 #### 第一步:敏感词库初始化 在Java中,我们可以使用HashMap存储敏感词库。首先,将所有敏感词从数据库或列表加载到HashSet中,以去除重复项。接着,将HashSet中的敏感词添加到...

    DFA算法敏感庞屏蔽java实现

    **DFA算法敏感词屏蔽Java实现** 在信息技术领域,数据安全和内容审查是至关重要的环节。其中,敏感词过滤是一项常见的需求,它主要用于防止非法或不适当内容的传播。DFA(Deterministic Finite Automaton,确定有限...

    java中DFA算法过滤敏感词

    DFA全称为:Deterministic Finite Automaton,即确定有穷自动机。其特征为:有一个有限状态集合和一些从一个状态通向另一个状态的边,每条边上标记有一个符号,其中一个状态是初态,某些状态是终态。但不同于不确定的...

    java。dfa算法实现敏感词过滤

    首先,DFA算法是一种图论概念,它可以被视作一种特殊的有向图,每个节点代表一个状态,每条边代表一个字符,从一个状态到另一个状态的转移是根据输入字符来决定的。在敏感词过滤中,我们可以构建一个DFA来表示敏感...

    基于java实现DFA算法代码实例

    然而,这段代码中并没有展示完整的DFA算法实现,例如状态转移函数和结束状态判断的逻辑。完整的DFA匹配通常会包含以下步骤: 1. 初始化状态机,设置起始状态为0,通常0状态表示正在等待第一个字符。 2. 对输入字符串...

    高效敏感词过滤JAVA实现(DFA算法) 5000字2ms

    高效敏感词过滤JAVA实现(DFA算法) 5000字2ms 节点 + 2进制标识(节省空间/提高查询效率) 附源码、注释,附带专业敏感词库(3396个敏感词) 看得上就拿去用,替换下一两处util方法、改个路径即可 不求什么,...

    java使用DFA算法实现敏感词过滤

    首先,让我们了解什么是DFA算法。DFA是一种特殊的图论模型,它由有限个状态和一些输入符号构成,每个状态都可以通过一个输入符号转移到另一个状态。在敏感词过滤场景中,DFA可以从文本的起始位置开始,通过比较每个...

    高效敏感词过滤JAVA实现(DFA算法) 5000字2ms - 含词库

    高效敏感词过滤JAVA实现(DFA算法) 5000字2ms 节点 + 2进制标识(节省空间/提高查询效率) 附源码、注释,附带专业敏感词库(3396个敏感词) 看得上就拿去用,替换下一两处util方法、改个路径即可 不求什么,...

    构造正则表达式的简化DFA算法

    构造正则表达式的简化DFA算法论文 介绍了构造等价于给定正则表达式的简化确定有限自动机(DFA) 的算 法. 方法是首先构造与正则表达式等价的非确定有限自动机(NFA) , 这里省略了构 造带E动作的有限自动机的操作, 然后...

    Java使用DFA算法实现过滤多家公司自定义敏感字功能详解

    Java使用DFA算法实现过滤多家公司自定义敏感字功能详解 Java使用DFA算法实现过滤多家公司自定义敏感字功能详解主要介绍了Java使用DFA算法实现过滤多家公司自定义敏感字功能,结合实例形式分析了DFA算法的实现原理及...

    Java DFA算法实现敏感词、广告词过滤源码(导入即可用)

    总的来说,这个Java DFA算法实现提供了对敏感词和广告词过滤的功能,适用于各种需要内容审查的场景,如社交媒体、论坛、评论系统等。通过导入和运行提供的测试代码,开发者可以快速评估和集成这个功能到自己的应用中...

    使用DFA算法实现的内容安全反垃圾智能鉴黄敏感词过滤

    DFA算法是一种状态机模型,它可以根据预定义的一组规则(如敏感词库)对输入字符串进行匹配。在这个项目中,DFA被用于构建一个能够识别和拦截敏感词汇的系统。当用户输入的文字通过这个系统时,DFA会逐字符检查,...

    DFA,NFA实现

    提供的压缩包“FSA”可能包含实现这些算法的源代码,这对于学习和理解FSA的内部工作原理非常有帮助。通过阅读和实验这些代码,初学者可以深入理解有限状态自动机的构建和转换过程。 总之,DFA和NFA是计算理论和...

    DFA NFA java实现

    同时,包含的程序设计文档将提供有关设计决策和算法流程的额外见解,帮助你更好地掌握DFA和NFA的实现细节。 总的来说,DFA和NFA是理论计算机科学中的基础概念,它们在编译器设计、正则表达式匹配、文本处理和形式...

    基于Java+Vue的在线网盘系统DFA算法设计源码

    系统采用DFA算法,支持文件夹创建、修改、多级目录管理,实现与普通文件夹相同的文件操作。功能全面,包括文件上传、类型分类、删除、回收站管理、恢复与彻底删除,支持公开和私密分享,自动生成提取码,设置过期...

    编译原理 DFA编程实现

    在计算机科学领域,编译原理是一门至关重要的课程,它涉及到如何将高级编程语言...实践中,我们还可以结合其他算法,如动态规划或回溯法,来优化DFA的性能和内存占用,使其更加适合处理大规模的输入和复杂的识别任务。

    编译原理 词法分析 语法分析 Java版【NFA DFA DFA最小化】[有注释版可下,请参看楼主其他分享]

    Java实现的DFA最小化算法可能包括Hopcroft算法或powerset construction方法。 本资源提供的"词法分析作业"可能是针对这些概念的一系列练习或示例代码,帮助学习者深入理解和实践编译原理中的这些关键技术。通过这些...

    基于ik分词和DFA算法的敏感词过滤Java设计源码

    该项目是一款基于ik分词和DFA算法实现的敏感词过滤Java设计源码,包含31个文件,涵盖20个Java源文件、3个属性文件、2个Git忽略文件、2个XML文件、2个class文件和1个MD文件等。该系统主要提供接口功能,无页面展示,...

    DFA算法用例

    在编程实践中,可以使用库如`Automat`(Python)或`Finite State Machine`(Java)来实现和操作DFA。这些库提供了构造、转换和执行DFA的功能,有助于在实际项目中应用DFA算法。 总之,DFA是一种强大的工具,用于...

Global site tag (gtag.js) - Google Analytics