package com.gjw.filters;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Properties;
import utils.KeywordFilter;
@SuppressWarnings({ "rawtypes", "unchecked" })
public class KeywordFilter
{
/** 直接禁止的 */
private HashMap keysMap = new HashMap();
private int matchType = 1; // 1:最小长度匹配 2:最大长度匹配
public void addKeywords(List<String> keywords)
{
for (int i = 0; i < keywords.size(); i++)
{
String key = keywords.get(i).trim();
HashMap nowhash = null;
nowhash = keysMap;
for (int j = 0; j < key.length(); j++)
{
char word = key.charAt(j);
Object wordMap = nowhash.get(word);
if (wordMap != null)
{
nowhash = (HashMap) wordMap;
} else
{
HashMap<String, String> newWordHash = new HashMap<String, String>();
newWordHash.put("isEnd", "0");
nowhash.put(word, newWordHash);
nowhash = newWordHash;
}
if (j == key.length() - 1)
{
nowhash.put("isEnd", "1");
}
}
}
}
/**
* 重置关键词
*/
public void clearKeywords()
{
keysMap.clear();
}
/**
* 检查一个字符串从begin位置起开始是否有keyword符合, 如果有符合的keyword值,返回值为匹配keyword的长度,否则返回零
* flag 1:最小长度匹配 2:最大长度匹配
*/
private int checkKeyWords(String txt, int begin, int flag)
{
HashMap nowhash = null;
nowhash = keysMap;
int maxMatchRes = 0;
int res = 0;
int l = txt.length();
char word = 0;
for (int i = begin; i < l; i++)
{
word = txt.charAt(i);
Object wordMap = nowhash.get(word);
if (wordMap != null)
{
res++;
nowhash = (HashMap) wordMap;
if (((String) nowhash.get("isEnd")).equals("1"))
{
if (flag == 1)
{
wordMap = null;
nowhash = null;
txt = null;
return res;
} else
{
maxMatchRes = res;
}
}
} else
{
txt = null;
nowhash = null;
return maxMatchRes;
}
}
txt = null;
nowhash = null;
return maxMatchRes;
}
/**
* 返回txt中关键字的列表
*/
public List<String> getTxtKeyWords(String txt)
{
List<String> list = new ArrayList<String>();
int l = txt.length();
for (int i = 0; i < l;)
{
int len = checkKeyWords(txt, i, matchType);
if (len > 0)
{
String tt = "<font color='#ff0000'>" + txt.substring(i, i + len) + "</font>";
list.add(tt);
i += len;
} else
{
i++;
}
}
txt = null;
return list;
}
/**
* 仅判断txt中是否有关键字
*/
public boolean isContentKeyWords(String txt)
{
for (int i = 0; i < txt.length(); i++)
{
int len = checkKeyWords(txt, i, 1);
if (len > 0)
{
return true;
}
}
txt = null;
return false;
}
/**
* 初始化敏感词列表
* */
public void initfiltercode()
{
List<String> keywords = new ArrayList<String>();
InputStream in = KeywordFilter.class.getClassLoader().getResourceAsStream("words.properties");
Properties pro = new Properties();
try
{
pro.load(in);
in.close();
} catch (IOException e1)
{
e1.printStackTrace();
}
Enumeration<String> enu = (Enumeration<String>) pro.propertyNames();
while (enu.hasMoreElements())
{
try
{
String dd = (String) enu.nextElement();
dd = new String(dd.getBytes("ISO8859-1"), "UTF-8");
keywords.add(dd);
} catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
addKeywords(keywords);
}
public int getMatchType()
{
return matchType;
}
public void setMatchType(int matchType)
{
this.matchType = matchType;
}
public static void main(String[] args) throws IOException
{
Date date = new Date();
KeywordFilter filter = new KeywordFilter();
filter.initfiltercode("e://words.properties");
String txt ="孩子……”长孙湘雨闻言忍俊不禁,用手中的折扇掩着嘴,64大屠杀啊。真惨!布卖淫女止不住地笑64大屠杀了起来,直到谢安脸上不渝的表情越来越明显,她这才逐渐收起笑意,轻笑着说道,“呐,舞姐姐本来就是做事细致的人,似你等懒散,她瞧得过去才怪!——更别说你还背着她到城里的青楼吃酒,与里面的女子亲亲我我,奴家真是纳闷,舞姐姐那日怎么就没有当场斩了你呢!”喜欢就好,”伊伊甜蜜一笑,替谢安盛了一碗饭递给他,随即纳闷问道,“安,说起来,奴家方才前前后后找过,你这屋子里,锅碗瓢盆什么都没有,害得我还再回府一趟,将厨灶所需的那些东西带了来……奴家很纳闷,安,你平日里究竟是如何做饭做菜的呢?”需要过滤的内容南京大屠杀,89学潮血腥屠杀舞,你别总是这样好不好?她向我保证过,礼部尚书、礼部侍郎都是她祖父的门生,望着谢安恳求的目光,梁丘舞幽幽叹了口气,摇头说道,“你还是不明白,安,我不是怕你犯下这欺君之罪,而是怕你受那个女人摆布,她在想办法控制你,安!舞,我很感激你当初不计前嫌,也不计较身份与地位的差距,与我这一介平民成婚,并且,对我的照顾也是极为细致,只不过……我算是你丈夫吧?我不是你的孩子,也不想当你要教育的对象,你完全没有必要替我安排所有的事,我有我自己的主观判断能力……”——只要你接受了,日后就有个把柄落在她手上……”其余官员,也多受她长孙家提携恩情,FL大法不会有人去追查这件事的,中南海权力斗争就一次,就一次,好吗?";
boolean boo = filter.isContentKeyWords(txt);
System.out.println(boo);
List<String> set = filter.getTxtKeyWords(txt);
System.out.println("包含的敏感词如下:"+set);
String newWordsString = filter.getNewTxtWords(txt);
System.out.println("原文内容如下:"+txt);
System.out.println("替换敏感词后如下:"+newWordsString);
Date date2 = new Date();
float ss = date2.getTime() - date.getTime();
System.out.println(ss + "毫秒");
}
}
java敏感词过滤
5星 · 超过95%的资源 需积分: 20 128 浏览量
2014-06-17
17:12:31
上传
评论 2
收藏 43KB ZIP 举报
shuiya3
- 粉丝: 9
- 资源: 11
最新资源
- steam软件包下载地址
- 基于matlab实现开发的使用整数小波变换对图像进行3级分解和重构的程序
- 基于matlab实现读取视频文件中的图像,并对图像中的运动目标检测,循环.rar
- 华师调节效应和中介效应分析教学讲义 温忠麟
- 2023年更新儒家文化数据大全包含明清进士、书院数量、孔庙遗存
- 深度学习要点优缺点实际应用,代码案例和代码解析
- LBMA,SCE,CMRT冲突矿产相关规则和认证倡议机制培训+经典应用程序
- 企业寻租程度(超额管理费用测度)(2006-2020)stata原始数据+do文件+参考文献
- 【stata命令】市场分割-市场一体化-区域一体化指数stata计算教程
- 基于matlab实现移相全桥控制双向DCDC变换器matlab仿真原理图.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈