download:人人都要學的項目管理課html
import
java.io.BufferedReader;
import
java.io.File;
import
java.io.FileInputStream;
import
java.io.InputStreamReader;
import
java.util.HashMap;
import
java.util.HashSet;
import
java.util.Iterator;
import
java.util.Map;
import
java.util.Set;
/**
* @Description: 初始化敏感詞庫,將敏感詞加入到HashMap中,構建DFA算法模型
* @Project:test
* @Author : chenming
* @Date : 2014年4月20日 下午2:27:06
* @version 1.0
*/
public
class
SensitiveWordInit {
private
String ENCODING =
"GBK"
;
//字符編碼
@SuppressWarnings
(
"rawtypes"
)
public
HashMap sensitiveWordMap;
public
SensitiveWordInit(){
super
();
}
/**
* @author chenming
* @date 2014年4月20日 下午2:28:32
* @version 1.0
*/
@SuppressWarnings
(
"rawtypes"
)
public
Map initKeyWord(){
try
{
//讀取敏感詞庫
Set<String> keyWordSet = readSensitiveWordFile();
//將敏感詞庫加入到HashMap中
addSensitiveWordToHashMap(keyWordSet);
//spring獲取application,而後application.setAttribute("sensitiveWordMap",sensitiveWordMap);
}
catch
(Exception e) {
e.printStackTrace();
}
return
sensitiveWordMap;
}
/**
* 讀取敏感詞庫,將敏感詞放入HashSet中,構建一個DFA算法模型:<br>
* 中 = {
* isEnd = 0
* 國 = {<br>
* isEnd = 1
* 人 = {isEnd = 0
* 民 = {isEnd = 1}
* }
* 男 = {
* isEnd = 0
* 人 = {
* isEnd = 1
* }
* }
* }
* }
* 五 = {
* isEnd = 0
* 星 = {
* isEnd = 0
* 紅 = {
* isEnd = 0
* 旗 = {
* isEnd = 1
* }
* }
* }
* }
* @author chenming
* @date 2014年4月20日 下午3:04:20
* @param keyWordSet 敏感詞庫
* @version 1.0
*/
@SuppressWarnings
({
"rawtypes"
,
"unchecked"
})
private
void
addSensitiveWordToHashMap(Set<String> keyWordSet) {
sensitiveWordMap =
new
HashMap(keyWordSet.size());
//初始化敏感詞容器,減小擴容操做
String key =
null
;
Map nowMap =
null
;
Map<String, String> newWorMap =
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);
//轉換成char型
Object wordMap = nowMap.get(keyChar);
//獲取
if
(wordMap !=
null
){
//若是存在該key,直接賦值
nowMap = (Map) wordMap;
}
else
{
//不存在則,則構建一個map,同時將isEnd設置爲0,由於他不是最後一個
newWorMap =
new
HashMap<String,String>();
newWorMap.put(
"isEnd"
,
"0"
);
//不是最後一個
nowMap.put(keyChar, newWorMap);
nowMap = newWorMap;
}
if
(i == key.length() -
1
){
nowMap.put(
"isEnd"
,
"1"
);
//最後一個
}
}
}
}
public
static
void
main(String[] args) {
Set set =
new
HashSet();
set.add(
"中國"
);
set.add(
"中國人民"
);
set.add(
"中國人"
);
new
SensitiveWordInit().addSensitiveWordToHashMap(set);
}
/**
* 讀取敏感詞庫中的內容,將內容添加到set集合中
* @author chenming
* @date 2014年4月20日 下午2:31:18
* @return
* @version 1.0
* @throws Exception
*/
@SuppressWarnings
(
"resource"
)
private
Set<String> readSensitiveWordFile()
throws
Exception{
Set<String> set =
null
;
File file =
new
File(
"D:\\SensitiveWord.txt"
);
//讀取文件
InputStreamReader read =
new
InputStreamReader(
new
FileInputStream(file),ENCODING);
try
{
if
(file.isFile() && file.exists()){
//文件流是否存在
set =
new
HashSet<String>();
BufferedReader bufferedReader =
new
BufferedReader(read);
String txt =
null
;
while
((txt = bufferedReader.readLine()) !=
null
){
//讀取文件,將文件內容放入到set中
set.add(txt);
}
}
else
{
//不存在拋出異常信息
throw
new
Exception(
"敏感詞庫文件不存在"
);
}
}
catch
(Exception e) {
throw
e;
}
finally
{
read.close();
//關閉文件流
}
return
set;
}
}
|