top.jfunc.common.sensitiveword.impl.simple.SensitiveWordInit Maven / Gradle / Ivy
package top.jfunc.common.sensitiveword.impl.simple;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
* 初始化敏感词库,将敏感词加入到HashMap中,构建DFA算法模型
* @author : 熊诗言 2017-04-29 02:02:02
*/
public class SensitiveWordInit{
public static final String IS_END = "IS_END";
public static final String IS_END_1 = "1";
public static final String IS_END_0 = "0";
@SuppressWarnings("rawtypes")
public HashMap sensitiveWordMap;
public SensitiveWordInit(){}
/**
* @Author : 熊诗言
* @Date : 2017-04-29 02:02:02
* @version 1.0
*/
@SuppressWarnings("rawtypes")
public Map initKeyWord(Set keyWordSet){
// 将敏感词库加入到HashMap中
addSensitiveWordToHashMap(keyWordSet);
// spring获取application,然后application.setAttribute("sensitiveWordMap",sensitiveWordMap);
return sensitiveWordMap;
}
/**
* 读取敏感词库,将敏感词放入HashSet中,构建一个DFA算法模型:
* 中 = { IS_END = 0 国 = {
* IS_END = 1 人 = {IS_END = 0 民 = {IS_END = 1} } 男 = { IS_END = 0 人 = { IS_END =
* 1 } } } } 五 = { IS_END = 0 星 = { IS_END = 0 红 = { IS_END = 0 旗 = { IS_END = 1
* } } } }
*
* @Author : 熊诗言
* @Date : 2017-04-29 02:02:02
* @param keyWordSet
* 敏感词库
* @version 1.0
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
private void addSensitiveWordToHashMap(Set keyWordSet){
sensitiveWordMap = new HashMap(keyWordSet.size()); // 初始化敏感词容器,减少扩容操作
String key = null;
Map nowMap = null;
Map newWorMap = null;
// 迭代keyWordSet
Iterator iterator = keyWordSet.iterator();
while(iterator.hasNext()){
key = iterator.next(); // 关键字
nowMap = sensitiveWordMap;
for(int i = 0; i < key.length(); i++){
char keyChar = key.charAt(i); // 转换成char型
Object wordMap = nowMap.get(keyChar); // 获取
if(wordMap != null){ // 如果存在该key,直接赋值
nowMap = (Map)wordMap;
} else{ // 不存在则,则构建一个map,同时将isEnd设置为0,因为他不是最后一个
newWorMap = new HashMap();
newWorMap.put(IS_END, IS_END_0); // 不是最后一个
nowMap.put(keyChar, newWorMap);
nowMap = newWorMap;
}
if(i == key.length() - 1){
nowMap.put(IS_END, IS_END_1); // 最后一个
}
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy