摘要: 本文研究一種基于Java Web的敏感詞過濾系統(tǒng),能夠識別敏感詞,在客戶端用戶發(fā)送數(shù)據(jù)時,系統(tǒng)能夠自動阻斷聊天內容,并且將敏感詞替換為指定特殊符號關鍵詞的敏感詞。該系統(tǒng)基于 B /S 結構的Java Web分層框架結構進行架構設計,能夠在對用戶透明的情況下,自動阻斷含有敏感詞的聊天內容提交,并且將敏感詞替換為指定特殊符號關鍵詞。 實驗結果表明該系統(tǒng)能夠有效阻止含有敏感關鍵詞的聊天內容提交。
關鍵詞: 敏感詞過濾; Java Web; 聊天系統(tǒng); 關鍵詞替換
中圖分類號:TP393.08
文獻標志碼:A
文章編號:2095-2163(2017)04-0021-03
0引言
隨著互聯(lián)網與移動應用的飛速發(fā)展和普及,在互聯(lián)網上的信息量呈現(xiàn)爆炸式增長,這給信息內容質量的監(jiān)測和過濾帶來嚴峻的考驗。目前已有的絕大部分網絡監(jiān)控系統(tǒng)主要針對己經生效的網絡信息,不良信息有時候仍然在網上傳播。針對網絡不良信息過濾中存在的這些問題,基于文本的過濾模式可以依據(jù)任何關鍵詞進行搜索并確定其內容性質,具有高度的靈活性,而圖片過濾主要是針對色情圖片而言,在技術手段和分級上目前仍然呈現(xiàn)可觀難度,畢竟如何區(qū)分藝術和色情在時下的生活進程中也還有待直接確切的現(xiàn)實爭議定論。即使解決了藝術與色情的領域劃定,卻仍然存在著準確率不高的問題?;诖耍疚膭t依據(jù)應用場景的需求,設計研發(fā)了一種在信息源頭實現(xiàn)敏感詞過濾的敏感詞過濾系統(tǒng),提高了在關鍵詞過濾中的時間效率。
[BT4]1B/S體系結構
B/S是Brower/Server的縮寫,即瀏覽器/服務器結構。在這種結構中,客戶端不需要開發(fā)任何用戶界面,而統(tǒng)一采用如IE和火狐等瀏覽器,通過Web瀏覽器向Web服務器發(fā)送請求,由Web服務器進行處理,并將處理結果逐級傳回客戶端,綜上過程直觀表述可如圖1所示。這種結構利用不斷成熟和普及的瀏覽器技術來獲取原需運行復雜專用軟件才能提供輸出的強大功能,從而節(jié)約了開發(fā)成本,是一種全新的軟件體系結構,因而已然成為當今應用軟件的首選體系結構。
[PS傅明建1.EPS;S*2;X*2,BP#]
2Servlet
Servlet即Java服務小程序,是使用應用程序設計接口以及相關類和方法的Java程序。同時,還可以作為一種插件,嵌入到Web服務器中運行,并可呈現(xiàn)強大功能,Servlet在服務器上運行主要用于支持展開和客戶之間的通信,當客戶端傳來一個Http請求時,通過調用Servlet方法來向客戶端發(fā)送一個響應。不但可以處理Http請求中的業(yè)務邏輯,而且還可以輸出HTML代碼來顯示指定頁面。
[BT5]2.1Servlet過濾器
Servlet過濾器與Servlet十分相似,但卻具有攔截客戶端(瀏覽器)請求的功能,Servlet過濾器可以改變請求中的內容,來滿足設計開發(fā)中的實際需要。對于程序開發(fā)人員而言,過濾器實質就是在Web應用服務器上的一個Web應用組件,用于攔截客戶端(瀏覽器)與目標資源的請求,并對這些請求引入一定過濾處理再發(fā)送給目標資源,過濾器的處理方式如圖2所示。
2.2基于Servlet過濾器的敏感詞過濾
Servlet過濾器能夠對Servlet容器的請求和響應對象進行檢查和修改。過濾器本身并不產生請求和響應對象,而只是提供過濾功能。基于這個特點,本文采用基于Servlet過濾器的方法來研究敏感詞過濾,并以聊天系統(tǒng)應用為例(可以適應任何基于Web的系統(tǒng))來實現(xiàn)敏感詞過濾。該方法的步驟設計內容可詳述如下。
1)先設計一個簡單的聊天室客戶端界面,如圖3所示,用于通過Http請求提交聊天內容。
2)然后,編寫一個Servlet,并部署配置Servlet,用來獲得聊天時提交的聊天內容,并輔以后續(xù)延展處理,進一步添加到request中。目前,部署Servlet有2種方式:
① 在Web.xml中進行部署Servlet,只要用戶請求的URL和
② 基于注解的方式部署配置Servlet,在Servlet3.0中提供了注解@WebFilter,使得可以不再需要在Web.xml文件中呈現(xiàn)Filter的部署描述。
如果設計了多個過濾器,且過濾器攔截路徑相同時,系統(tǒng)將首先按照
<!-- Servlet配置 -->
Servlet設計代碼如下:
public class MessageServlet extends HttpServlet {
private static final long serialVersionUID=65368123622 07677194L;
public void doPost(HttpServletRequest request, Http ServletResponse response)
throws ServletException, IOException {
// 獲取標題
String title = request.getParameter("title");
// 獲取內容
String content = request.getParameter("content");
// 將標題放置到request中
request.setAttribute("title", title);
// 將內容放置到request中
request.setAttribute("content", content);
// 轉發(fā)到result.jsp頁面
[JP3]request.getRequestDispatcher("index.jsp").forward(request, response);[JP]
}
}
3)最后編寫一個Servlet過濾器,并部署配置,將聊天內容中涉及到的敏感字過濾,并將所有敏感字內容替換成“*”。與Servlet一樣,部署過濾器目前也有2種方式:一是在Web.xml中部署Filter;一是基于注解的方式部署Filter。為設計高效起見,這里同樣采用Web.xml中部署Servlet Filter,Web.xml文件中部署代碼如下:
<!-- 過濾器配置 -->
過濾器代碼設計如下:
public class ff_WordFilter implements Filter {
// 非法字符數(shù)組
private String ff_words[];
// 字符編碼
private String encoding;
// 實現(xiàn)Filter接口init()方法
public void init(FilterConfig filterConfig) throws ServletException {
// 獲取字符編碼
[JP3]encoding = filterConfig.getInitParameter("encoding");[JP]
// 初始化非法字符數(shù)組,該字符數(shù)組即是需要過濾并替換的非法關鍵詞
ff_words = new String[]{"他媽的","赤裸"};
}
// 實現(xiàn)Filter接口doFilter()方法
public void doFilter(ServletRequest request, Servlet Response response, FilterChain chain) throws IOException, ServletException {
// 判斷字符編碼是否有效
if (encoding != null) {
// 設置request字符編碼
request.setCharacterEncoding(encoding);
// [JP3]將request轉換為重寫后的Request對象[JP]
[JP4]request = new Request((HttpServletRequest) request);[JP]
// 設置response字符編碼
[JP2]response.setContentType("text/html; charset="+encoding);[JP]
}
chain.doFilter(request, response);
}
// 實現(xiàn)Filter接口destroy()方法
public void destroy() {
this.words = null;
this.encoding = null;
}
/* 內部類重寫HttpServletRequestWrapper*/
class Request extends HttpServletRequestWrapper{endprint
// 構造方法
public Request(HttpServletRequest request) {
super(request);
}
// 重寫getParameter()方法
@Override
public String getParameter(String name) {
// 返回過濾后的參數(shù)值
[JP5]return filter(super.getRequest().getParameter(name)); }[JP]
// 重寫getParameterValues()方法
@Override
public String[] getParameterValues(String name) {
// 獲取所有參數(shù)值
String[] values = super.getRequest().getParameter Values(name);
// 通過循環(huán)對所有參數(shù)值進行過濾
for (int i = 0; i < values.length; i++) {
values[i] = filter(values[i]);
}
// 返回過濾后的參數(shù)值
return values;
}
}
/** 過濾非法字符
* @param param 參數(shù)值
* @return 過濾后的參數(shù)值
*/
public String filter(String param){
try {
// 判斷非法字符是否被初始化
if(words != null && ff_words.length > 0){
// 循環(huán)替換非法字符
for (int i = 0; i // 判斷是否包含非法字符 if(param.indexOf(ff_words[i]) != -1){ // 將非法字符替換為"****" param = [WB]param.replaceAll(ff_words[i], [DW]"****"); } } } } catch (Exception e) { e.printStackTrace(); } return param; } [BT4]3結束語 本次研究設計中提出了一種基于Java Web的敏感詞過濾系統(tǒng),能夠識別敏感詞,在客戶端用戶發(fā)送數(shù)據(jù)時,系統(tǒng)能夠自動阻斷聊天內容,并且將敏感詞替換為指定特殊符號關鍵詞的敏感詞,該系統(tǒng)基于 B /S 結構的Java Web分層框架結構進行架構設計。 實驗結果表明該系統(tǒng)能夠有效阻止含有敏感關鍵詞的聊天內容提交。 參考文獻: [WTBZ][ST6BZ][HT6SS][1] [ZK(#〗 DUAN Lei, TANG Changjie, ZUO Jie, et al. Selfstudy algorithm for filtering Chinese text content through two layers in Web realtime environment[J]. Journal of Frontiers of Computer Science and Technology, 2011, 5(8):695-706. [2] 張穎江, 陳馳. WEB 內容過濾方法的研究與應用[J]. 武漢科技學院學報, 2005, 18(4):49-51. [3] 程衛(wèi)華 , 尤晉元. 基于內容過濾的反垃圾郵件系統(tǒng)的設計與實現(xiàn)[J]. 安徽大學學報 (自然科學版),2007,31(3):30-33. [4] 鄧一貴, 伍玉英. 基于文本內容的敏感詞決策樹信息過濾算法[J]. 計算機工程,2014,40(9):300-304. [5] 薛海偉,田崢,田建偉,等. 郵件敏感字過濾系統(tǒng)研究與實現(xiàn)[J]. 湖南電力,2015,35(2):13-16. [6] 曹靜,劉潔. JSP與servlet開發(fā)技術與典型應用教程[M]. 2版. 大連:大連理工大學出版社,2014. [7] 明日科技. JAVA WEB從入門到精通[M]. 北京:清華大學出版社,2012.[ZK)][FL)]