敏感词过滤java实现

来源:互联网 发布:端口号被占用解决方法 编辑:程序博客网 时间:2024/04/28 12:13
package com.iflytek.epdcloud.ercsvc.service;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;import java.util.Set;public class TestSensitiveWorld {    Map sensitiveWordMap;public static void main(String[] args) {// TODO Auto-generated method stub         Set<String> keyWordSet=new HashSet<String>();           keyWordSet.add("日本鬼子");           keyWordSet.add("日本人");           keyWordSet.add("毛泽东");           TestSensitiveWorld test=new TestSensitiveWorld();           test.addSensitiveWordToHashMap(keyWordSet);           Iterator itr= test.sensitiveWordMap.entrySet().iterator();           while(itr.hasNext())           {           Map.Entry entry=(Entry) itr.next();           System.out.println(entry.getKey()+":"+entry.getValue());           }                      String str="日本鬼子日本罕见还有日本人日本女孩毛泽毛泽江泽明毛泽东我的送给日本鬼子日本人日本毛泽东";       System.out.println("待检测语句字数:"+str.length());       System.out.println("matchFlag:" +test.checkSensitiveWord(str));       }public void addSensitiveWordToHashMap(Set<String> keyWordSet){sensitiveWordMap=new HashMap(keyWordSet.size());String key=null;Map nowMap=null;Map<String,String> newWordMap=null;//迭代keyWordSetIterator<String> iterator=keyWordSet.iterator();while(iterator.hasNext()){key=iterator.next();//关键字nowMap=sensitiveWordMap;for(int i=0;i<key.length();i++){char keyChar=key.charAt(i);Object wordMap=nowMap.get(keyChar);if(wordMap!=null){nowMap=(Map)wordMap;}else{newWordMap=new HashMap<String,String>();newWordMap.put("isEnd", "0");nowMap.put(keyChar, newWordMap);nowMap=newWordMap;}}nowMap.put("isEnd", "1");}}//验证敏感词public int checkSensitiveWord(String txt){   boolean flag=false;//标志符,如果进入子Map获取关键字为空,则返回头Map从新搜索,flag=true;否则直接搜索下个关键字    int matchFlag=0; //计量搜索到的敏感词个数    char word=0;    Map nowMap=sensitiveWordMap;    for(int i=0;i<txt.length();i++)    {      word=txt.charAt(i);    nowMap=(Map)nowMap.get(word);    if(nowMap!=null)    {    flag=true;    if("1".equals(nowMap.get("isEnd")))    {   matchFlag++;                nowMap=null;    }    }    if(nowMap==null)    {    nowMap=sensitiveWordMap;    if(flag)    {    i--;    flag=false;    }    }        }return matchFlag;}}

                                             
0 0
原创粉丝点击