您的位置:首页 > 编程语言 > Java开发

敏感词过滤java实现

2016-02-17 11:17 721 查看
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;

//迭代keyWordSet
Iterator<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;
}

}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: