DFA算法过滤敏感词

  1. 转自:http://blog.csdn.net/yhhazr/article/details/7866499
  2. import java.io.InputStream;  
  3. import java.io.UnsupportedEncodingException;  
  4. import java.nio.ByteBuffer;  
  5. import java.util.ArrayList;  
  6. import java.util.Enumeration;  
  7. import java.util.List;  
  8. import java.util.Properties;  
  9.   
  10. public class test {        
  11.     /**  
  12.      * 根节点  
  13.      */    
  14.     private TreeNode rootNode = new TreeNode();    
  15.         
  16.     /**  
  17.      * 关键词缓存  
  18.      */    
  19.     private ByteBuffer keywordBuffer = ByteBuffer.allocate(1024);       
  20.         
  21.     /**  
  22.      * 关键词编码  
  23.      */    
  24.     private String charset = "utf-8";    
  25.     
  26.     /**  
  27.      * 创建DFA  
  28.      * @param keywordList  
  29.      * @throws UnsupportedEncodingException   
  30.      */    
  31.     public void createKeywordTree(List<String> keywordList) throws UnsupportedEncodingException{    
  32.         for (String keyword : keywordList) {    
  33.             if(keyword == nullcontinue;    
  34.             keyword = keyword.trim();    
  35.             byte[] bytes = keyword.getBytes(charset);    
  36.             TreeNode tempNode = rootNode;    
  37.             for (int i = 0; i < bytes.length; i++) {    
  38.                 int index = bytes[i] & 0xff;     
  39.                 TreeNode node = tempNode.getSubNode(index);    
  40.                 if(node == null){    
  41.                     node = new TreeNode();    
  42.                     tempNode.setSubNode(index, node);    
  43.                 }    
  44.                 tempNode = node;    
  45.                 if(i == bytes.length - 1){    
  46.                     tempNode.setKeywordEnd(true);      
  47.                 }    
  48.             }    
  49.         }  
  50.     }    
  51.         
  52.      
  53.     public String searchKeyword(String text) throws UnsupportedEncodingException{    
  54.         return searchKeyword(text.getBytes(charset));    
  55.     }    
  56.      
  57.     public String searchKeyword(byte[] bytes){    
  58.         StringBuilder words = new StringBuilder();    
  59.         if(bytes == null || bytes.length == 0){    
  60.             return words.toString();    
  61.         }    
  62.         TreeNode tempNode = rootNode;    
  63.         int rollback = 0;     
  64.         int position = 0;   
  65.         while (position < bytes.length) {    
  66.             int index = bytes[position] & 0xFF;    
  67.             keywordBuffer.put(bytes[position]);   
  68.             tempNode = tempNode.getSubNode(index);    
  69.             if(tempNode == null){  
  70.                 position = position - rollback;  
  71.                 rollback = 0;    
  72.                 tempNode = rootNode;        
  73.                 keywordBuffer.clear();    
  74.             }    
  75.             else if(tempNode.isKeywordEnd()){    
  76.                 keywordBuffer.flip();    
  77.                 for (int i = 0; i <= rollback; i++) {  
  78.                         bytes[position-i] = 42;  
  79.                 }  
  80.                 keywordBuffer.limit(keywordBuffer.capacity());    
  81.                 rollback = 1;    
  82.             }else{     
  83.                 rollback++;   
  84.             }    
  85.             position++;    
  86.         }    
  87.         String result = null;  
  88.          try {  
  89.              result  =  new String(bytes,"utf-8");    
  90.               
  91.         } catch (Exception e) {  
  92.             e.printStackTrace();  
  93.         }  
  94.         return result;  
  95.     }    
  96.         
  97.     public void setCharset(String charset) {    
  98.         this.charset = charset;    
  99.     }   
  100. }  


  1. import java.util.ArrayList;  
  2. import java.util.List;  
  3.   
  4. public class TreeNode {    
  5.     private static final int NODE_LEN = 256;    
  6.         
  7.     /**  
  8.      * true 关键词的终结 ; false 继续  
  9.      */    
  10.     private boolean end = false;     
  11.         
  12.     private List<TreeNode> subNodes = new ArrayList<TreeNode>(NODE_LEN);    
  13.         
  14.     public TreeNode(){    
  15.         for (int i = 0; i < NODE_LEN; i++) {    
  16.             subNodes.add(i, null);    
  17.         }    
  18.     }    
  19.         
  20.     /**  
  21.      * 向指定位置添加节点树  
  22.      * @param index  
  23.      * @param node  
  24.      */    
  25.     public void setSubNode(int index, TreeNode node){    
  26.         subNodes.set(index, node);    
  27.     }    
  28.         
  29.     public TreeNode getSubNode(int index){    
  30.         return subNodes.get(index);    
  31.     }    
  32.         
  33.     
  34.     public boolean isKeywordEnd() {    
  35.         return end;    
  36.     }    
  37.     
  38.     public void setKeywordEnd(boolean end) {    
  39.         this.end = end;    
  40.     }    
  41. }   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园建设方案旨在通过信息化手段提升教育、管理和服务水平,实现资源数字化、工作流程化、管理高效化和决策智能化。方案包括智慧校园信息化平台和安防平台的建设,涉及教学、科研、管理和服务等多个方面,以满足现代教育和培训需求。 技术服务要求强调了统一支撑平台的建设,包括数据标准、接口标准、代码标准和用户信息标准的统一制定。平台需满足信创和X86交叉适配要求,确保安全自主可控的系统开发环境。此外,方案还涵盖了用户心系统、统一认证授权心、统一工作流心、统一智能报表心等多个模块,以及数据共享心、语音识别、移动服务终端等功能,以实现校园内外部信息的互联互通和资源共享。 智慧校园信息化平台的建设还包括了对教学管理、人事管理、公文管理、档案管理、即时通讯、会议管理、督办工作、资产管理等方面的数字化和自动化升级。这些模块的集成旨在提高工作效率,优化资源配置,加强监督管理,并通过移动应用等技术手段,实现随时随地的信息访问和业务处理。 安防平台的建设则侧重于校园安全,包括停车场管理、人脸识别测温、访客自助登记、视频监控等多个系统。这些系统的集成旨在提高校园的安全管理水平,实现对校园内外人员和车辆的有效监控和管理,确保校园环境的安全稳定。 最后,方案还提到了对固定资产的管理,包括购置、使用、归还、报废等全生命周期的管理,以及对网络设备、安防设备、服务器等硬件设施的配置和管理。通过这些措施,智慧校园建设方案旨在为校园提供一个安全、高效、便捷的学习和工作环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值