欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

3行代码,实现高效的敏感词管理与内容过滤模块

程序员文章站 2024-01-12 09:51:40
...

一.功能介绍

提供对一段内容的敏感词检查与标红服务。对于涉及内容安全与审核的系统,对文字进行敏感词过滤是一项必要功能,敏感词服务即用于完成此项功能。

本服务提供敏感词的分组在线管理,词汇分级,内容过滤,涉及词汇提取,以及正文标红等功能。

在过滤时,附加支持:不区分大小写 + 可检测在词汇中插入特殊字符 + 不破坏HTML和UBB代码。

二.示例代码

//第1行,获取服务(JSP中写的)
WordFilterService wordFilterService = (WordFilterService) GuzzWebApplicationContextUtil.getGuzzContext(session.getServletContext()).getService("wordFilterService") ;
 
//第2行,进行内容过滤审查。
MatchResult result = (MatchResult) wordFilterService.filterHtml("你好,我是guzz,a*a,你是谁?", new String[]{"your groupId, something like 'b3vh5xmun0r2z4pkil2g5rpxnt2mu76n0r7qqoa'"}, true) ;
 
if(result != null){
	//含有敏感词
	out.println("<br>最高警告级别:" + result.getHighestLevel()) ;
	out.println("<br>匹配到的内容组成的字符串列表:" + result.getHittedContentList()) ;
	out.println("<br>标记以后的内容:" + result.getMarkedContent()) ;
	out.println("<br>匹配的过滤词列表:" + result.getMatchedContentList(",", 5)) ;
}else{
	//不包含敏感词
	out.println("<br>passed!") ;
}

三.配置服务

1. 配置本服务依赖的“通信信道服务”(RPC调用)。假设配置好的信道服务名称为”commandSocketChannelForServices”.

2. 访问http://cloud.guzzservices.com/services/console/filterWordGroupList.jsp创建过滤词组,增加过滤词。

3. 在guzz.xml中增加此服务:

<service name="wordFilterService" dependsOn="commandSocketChannelForServices" class="com.guzzservices.secure.wordFilter.WordFilterServiceImpl"/>

 

4. 配置服务参数(guzz的properties文件):

不需要配置

四.服务API

在需要内容审核的地方,获取或注入wordFilterService,java接口为:com.guzzservices.secure.WordFilterService

API定义:

package com.guzzservices.secure;
public interface WordFilterService {
 
	/**
	 * 过滤一段文字,根据参数决定是否标红。如果不含有任何过滤词,返回null。
	 * 
	 * @param content 检测内容
	 * @param groupIds 配置的过滤词组编号
	 * @param markContent 是否同时标红过滤的内容。
	 * @return MatchResult
	 */
	public MatchResult filterText(String content, String[] groupIds, boolean markContent) throws Exception ;
 
	/**
	 * 过滤一段html代码段,根据参数决定是否标红。如果不含有任何过滤词,返回null。
	 * 
	 * @param content 检测内容
	 * @param groupIds 配置的过滤词组编号
	 * @param markContent 是否同时标红过滤的内容。
	 * @return MatchResult
	 */
	public MatchResult filterHtml(String content, String[] groupIds, boolean markContent) throws Exception ;
 
}

 

服务接口返回null则表示传入的内容不包含敏感词,否则返回MatchResult提供过滤细节。

“同时标红过滤的内容”将增加网络流量与延迟,如果仅仅是检查内容,不需要将标红的正文显示出来,传入false速度会更快。

MatchResult定义

package com.guzzservices.secure.wordFilter;
public class MatchResult {
 
	/**
	 * 将发现的过滤词列表进行Distinct排重处理,同时统计每个词的出现次数
	 * 
	 * @return 返回Map<String, 出现次数> 包含 Distinct 处理后的过滤词列表以及相应的出现次数
	 */
	public Map<String, Integer> groupMatchedFilterWords() ;
 
	/**
	 * 返回得到的过滤词中最高警告级别
	 */
	public int getHighestLevel() ;
 
	/**是否可以通过给定的过滤词等级*/
	public boolean canPass(int level) ;
 
	/**标红以后的内容。如果调用服务接口时,参数markContent传入false,则此方法返回null。*/
	public String getMarkedContent() ;
 
	/**成功匹配到的过滤词*/
	public List<String> getMatchedFilterWords() ;
 
	/**匹配到的内容组成的字符串列表*/
	public String getHittedContentList() ;
 
	/**
	 * 返回匹配的过滤词列表。方法会自动删除重复的过滤词,并且将返回字符串长度限制在@param maxLength范围内。
	 * @param wordSep 过滤词之间用什么符号连接,如", "。
	 * @maxLength 返回的串最长允许多长。如果需要将返回结果存入到数据库中,则此参数一般传入数据库字段允许的最大长度。
	 */
	public String getMatchedContentList(String wordSep, int maxLength) ;