DFA算法过滤敏感词,替换为*

本文介绍了使用Java实现关键词树的构建与搜索算法,通过字典树数据结构优化字符串匹配效率,实现对关键词的高效存储与检索。
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.Properties;

public class test {      
    /** 
     * 根节点 
     */  
    private TreeNode rootNode = new TreeNode();  
      
    /** 
     * 关键词缓存 
     */  
    private ByteBuffer keywordBuffer = ByteBuffer.allocate(1024);     
      
    /** 
     * 关键词编码 
     */  
    private String charset = "utf-8";  
  
    /** 
     * 创建DFA 
     * @param keywordList 
     * @throws UnsupportedEncodingException  
     */  
    public void createKeywordTree(List<String> keywordList) throws UnsupportedEncodingException{  
        for (String keyword : keywordList) {  
            if(keyword == null) continue;  
            keyword = keyword.trim();  
            byte[] bytes = keyword.getBytes(charset);  
            TreeNode tempNode = rootNode;  
            for (int i = 0; i < bytes.length; i++) {  
                int index = bytes[i] & 0xff;   
                TreeNode node = tempNode.getSubNode(index);  
                if(node == null){  
                    node = new TreeNode();  
                    tempNode.setSubNode(index, node);  
                }  
                tempNode = node;  
                if(i == bytes.length - 1){  
                    tempNode.setKeywordEnd(true);    
                }  
            }  
        }
    }  
      
   
    public String searchKeyword(String text) throws UnsupportedEncodingException{  
        return searchKeyword(text.getBytes(charset));  
    }  
   
    public String searchKeyword(byte[] bytes){  
        StringBuilder words = new StringBuilder();  
        if(bytes == null || bytes.length == 0){  
            return words.toString();  
        }  
        TreeNode tempNode = rootNode;  
        int rollback = 0;   
        int position = 0; 
        while (position < bytes.length) {  
            int index = bytes[position] & 0xFF;  
            keywordBuffer.put(bytes[position]); 
            tempNode = tempNode.getSubNode(index);  
            if(tempNode == null){
                position = position - rollback;
                rollback = 0;  
                tempNode = rootNode;      
                keywordBuffer.clear();  
            }  
            else if(tempNode.isKeywordEnd()){  
                keywordBuffer.flip();  
                for (int i = 0; i <= rollback; i++) {
                		bytes[position-i] = 42;
				}
                keywordBuffer.limit(keywordBuffer.capacity());  
                rollback = 1;  
            }else{   
                rollback++; 
            }  
            position++;  
        }  
        String result = null;
         try {
        	 result  =  new String(bytes,"utf-8");  
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
    }  
      
    public void setCharset(String charset) {  
        this.charset = charset;  
    } 
}

 

import java.util.ArrayList;
import java.util.List;

public class TreeNode {  
    private static final int NODE_LEN = 256;  
      
    /** 
     * true 关键词的终结 ; false 继续 
     */  
    private boolean end = false;   
      
    private List<TreeNode> subNodes = new ArrayList<TreeNode>(NODE_LEN);  
      
    public TreeNode(){  
        for (int i = 0; i < NODE_LEN; i++) {  
            subNodes.add(i, null);  
        }  
    }  
      
    /** 
     * 向指定位置添加节点树 
     * @param index 
     * @param node 
     */  
    public void setSubNode(int index, TreeNode node){  
        subNodes.set(index, node);  
    }  
      
    public TreeNode getSubNode(int index){  
        return subNodes.get(index);  
    }  
      
  
    public boolean isKeywordEnd() {  
        return end;  
    }  
  
    public void setKeywordEnd(boolean end) {  
        this.end = end;  
    }  
}  
 
提供了基于BP(Back Propagation)神经网络结合PID(比例-积分-微分)控制策略的Simulink仿真模型。该模型旨在实现对杨艺所著论文《基于S函数的BP神经网络PID控制器及Simulink仿真》中的理论进行实践验证。在Matlab 2016b环境下开发,经过测试,确保能够正常运行,适合学习和研究神经网络在控制系统中的应用。 特点 集成BP神经网络:模型中集成了BP神经网络用于提升PID控制器的性能,使之能更好地适应复杂控制环境。 PID控制优化:利用神经网络的自学习能力,对传统的PID控制算法进行了智能调整,提高控制精度和稳定性。 S函数应用:展示了如何在Simulink中通过S函数嵌入MATLAB代码,实现BP神经网络的定制化逻辑。 兼容性说明:虽然开发于Matlab 2016b,但理论上兼容后续版本,可能会需要调整少量配置以适配不同版本的Matlab。 使用指南 环境要求:确保你的电脑上安装有Matlab 2016b或更高版本。 模型加载: 下载本仓库到本地。 在Matlab中打开.slx文件。 运行仿真: 调整模型参数前,请先熟悉各模块功能和输入输出设置。 运行整个模型,观察控制效果。 参数调整: 用户可以自由调节神经网络的层数、节点数以及PID控制器的参数,探索不同的控制性能。 学习和修改: 通过阅读模型中的注释和查阅相关文献,加深对BP神经网络与PID控制结合的理解。 如需修改S函数内的MATLAB代码,建议有一定的MATLAB编程基础。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值