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