阿里云文本审核(java敏感词效验)
文本敏感词校验
背景: 用户社区评论或分享的文章或评论,需要合法合规,不能包含涉政等违规的铭感词.
使用阿里云的内容审核
准备工作
- 阿里云账号,需要开通敏感词服务 注意(有accessKeyId和accessKeySecret)都不行,须开通服务
- 文档地址: https://help.aliyun.com/document_detail/70439.html?spm=a2c4g.11186623.6.701.1cea2188bMuZUi
- 调试地址:https://next.api.aliyun.com/api/Green/2018-05-09/TextScan
java代码(做一次笔记吧qaq)
- 依赖
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.16</version>
</dependency>
- 代码
@Slf4j
@Component
public class AliYunWordFilterHandler {
private static final String region = "cn-beijing";
@Value("${aliyun.oss.accessKeyId}")
private String accessKeyId;
@Value("${aliyun.oss.accessKeySecret}")
private String accessKeySecret;
//设置获取client
private IAcsClient getClient() {
IClientProfile profile = DefaultProfile.getProfile(region, accessKeyId, accessKeySecret);
//下面走的是阿帕奇的,自行选择
// DefaultProfile profile1 = DefaultProfile.getProfile(region, accessKeyId, accessKeySecret);
return new DefaultAcsClient(profile);
}
//设置请求头
private CommonRequest getDefaultCommonRequest() {
CommonRequest request = new CommonRequest();
request.setProtocol(ProtocolType.HTTPS);
request.setMethod(MethodType.POST);
request.setDomain("green.cn-beijing.aliyuncs.com");
request.setVersion("2018-05-09");
request.setUriPattern("/green/text/scan"); //垃圾扫描 request.setUriPattern("/green/text/feedback"); // 垃圾反馈
//设置超时时间
request.setSysConnectTimeout(6000);
request.setSysReadTimeout(6000);
request.putHeadParameter("Content-Type", "application/json");
return request;
}
//请求参数封装 map
private Map<String, Object> getExecuteMap(List<String> tasks) {
Map<String, Object> resultMap = new HashMap<>(2);
List<Map<String, Object>> inputBodyList = new ArrayList<>();
for (String task : tasks) {
Map<String, Object> requestBodyMap = new HashMap<String, Object>();
requestBodyMap.put("dataId", UUID.randomUUID().toString());
requestBodyMap.put("content", task); // 待检测的文本,长度不超过10000个字符
inputBodyList.add(requestBodyMap);
}
resultMap.put("scenes", Collections.singletonList("antispam")); // 检测场景,文本垃圾检测传递:antispam
resultMap.put("tasks", inputBodyList);
return resultMap;
}
//请求参数封装 JSONObject (linkhashMap)
private JSONObject getExecuteJSONObject(List<String> tasks) {
JSONObject resultMap = new JSONObject();
JSONArray inputBodyList = new JSONArray();
for (String task : tasks) {
JSONObject requestBody = new JSONObject();
requestBody.put("dataId", UUID.randomUUID().toString());
requestBody.put("content", task); // 待检测的文本,长度不超过10000个字符*/
inputBodyList.add(requestBody);
}
resultMap.put("scenes", Collections.singletonList("antispam")); // 检测场景,文本垃圾检测传递:antispam
resultMap.put("tasks", inputBodyList);
return resultMap;
}
//批量效验,阿里的api 详情批量限制100个,单个长度不能超过10000
@TimerLog
public List<AuditInfo> textReviews(List<String> content) {
List<AuditInfo> result = new LinkedList<>();
IAcsClient client = getClient();
CommonRequest request = getDefaultCommonRequest();
Map<String, Object> executeMap = getExecuteMap(content);
log.info("阿里敏感词检测:[start]:\n {}", JSONUtils.toString(executeMap));
request.setHttpContent(JSONUtils.toString(executeMap).getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8.name(), JSON);
try {
CommonResponse response = client.getCommonResponse(request);
log.info("阿里敏感词检测:[end]:\n {}", response.getData());
HttpResponse httpResponse = response.getHttpResponse();
if (httpResponse.isSuccess()) {
log.info("敏感词效验 成功");
String responseContent = new String(httpResponse.getHttpContent(), StandardCharsets.UTF_8);
JSONObject scrResponse = JSONUtils.parseObject(responseContent, JSONObject.class);
if (200 == scrResponse.getInteger("code")) {
JSONArray taskResults = scrResponse.getJSONArray("data");
for (int i = 0; i < taskResults.size(); i++) {
JSONObject taskResultObj = taskResults.getJSONObject(i);
AuditInfo auditInfo = new AuditInfo();
//如果被检测文本命中了自定义关键词词库中的关键词,则会返回当前字段,并将命中的关键词替换为星号(*)。
String filteredContent = taskResultObj.getString("filteredContent");
auditInfo.setContent(filteredContent);
if (200 == taskResultObj.getInteger("code")) {
JSONArray sceneResults = taskResultObj.getJSONArray("results");
for (int j = 0; j < sceneResults.size(); j++) {
JSONObject taskSubObject = sceneResults.getJSONObject(j);
//这里检测只使用一个 result 结果,检测文本为一个
String scene = taskSubObject.getString("scene");
//pass:文本正常,可以直接放行。 review:文本需要进一步人工审核。 block:文本违规,可以直接删除或者限制公开。
//@see https://help.aliyun.com/document_detail/70439.html?spm=a2c4g.11186623.6.701.1cea2188bMuZUi
String suggestion = taskSubObject.getString("suggestion");
String label = taskSubObject.getString("label");
double rate = taskSubObject.getDouble("rate");
auditInfo = convertMsg(label, auditInfo, rate);
result.add(auditInfo);
}
} else {
System.out.println("task process fail:" + taskResultObj.getInteger("code"));
log.error("阿里敏感词检测:请求超时!");
}
}
} else {
log.error("检测状态失败 code:{}", scrResponse.getInteger("code"));
}
}
} catch (ClientException e) {
log.error("请求调用失败,检查是否是超时");
e.printStackTrace();
}
return result;
}
//标签效验
private AuditInfo convertMsg(String label, AuditInfo audit, double rate) {
//正常放行 normal:正常文本 spam:含垃圾信息 ad:广告 flood:灌水 meaningless:无意义 customized:自定义(例如命中自定义关键词)
//拦截 politics:涉政 terrorism:暴恐 abuse:辱骂 porn:色情 contraband:违禁
audit.setResult(true);
audit.setMsg("审核正常");
switch (label) {
case "normal":
break;
case "spam":
if (rate > 50.0) {
audit.setResult(true);
audit.setMsg("含垃圾信息");
}
break;
case "ad":
if (rate > 50.0) {
audit.setResult(true);
audit.setMsg("广告");
}
break;
case "politics":
audit.setResult(false);
audit.setMsg("涉政");
break;
case "terrorism":
audit.setResult(false);
audit.setMsg("暴恐");
break;
case "abuse":
if (rate > 70.0) {
audit.setResult(false);
audit.setMsg("辱骂");
}
break;
case "porn":
if (rate > 90.0) {
audit.setResult(false);
audit.setMsg("色情");
}
break;
case "flood":
if (rate > 95.0) {
audit.setResult(true);
audit.setMsg("灌水");
}
break;
case "contraband":
audit.setResult(false);
audit.setMsg("违禁");
break;
case "meaningless":
if (rate > 95.0) {
audit.setResult(true);
audit.setMsg("无意义");
}
break;
case "qrcode":
if (rate > 60.0) {
audit.setResult(true);
audit.setMsg("二维码");
}
break;
default:
audit.setResult(true);
audit.setMsg("自定义");
break;
}
return audit;
}
/**
* @author: craywen
* @date: 2021-05-25 14:23
* @desc: 审核结果
*/
@Data
public class AuditInfo {
/**
* 审核结果
*/
private boolean result;
/**
* 返回的消息
*/
private String msg;
/**
* 内容
*/
private String content;
}
https://blog.csdn.net/qq_38893133/article/details/117294596
相关信息
- 一个高效过滤敏感词的方法
- 阿里云系列——3.网站备案初步核审(详细步骤)---2015-11.12
- 阿里云优惠
- 阿里云安全
- 亲测:阿里云的高效云盘真没有声称那么好
- 代码仓库敏感词检查
- 阿里云CDN实践
- 阿里云使用笔记
- 阿里云云计算认证是什么?阿里云acp云计算考试内容有哪些?
- 阿里云SSL证书-未检测到DNS配置记录请修改后重新发起审核
- 阿里云公司简介
- 阿里云oss对象存储
- 阿里云ACA主要内容
- 阿里云对象存储OSS
- 阿里云安全组设置
- 阿里云acp云计算教材包括哪些内容?阿里云acp云计算教材推荐
- 阿里云ECS主机内核调优
- 基于阿里云云平台实现Java项目获取短信验证码
- 如何评价阿里云的云翼计划?
- 阿里云安装tomcat
- ThinkPHP6.0 实现 图片审核+文本内容审核(敏感词过滤)
- 阿里云cdn配置HTTPS证书
- 阿里云 CDN+OSS 解决方案
- 阿里云磁盘扩容记录
- 云端IDE:阿里云机器学习与PAI-DSW | 《阿里云机器学习PAI-DSW入门指南》
- 阿里云服务器如何设置IPV6通过appstore的审核
- 阿里云短信验证码服务
- 关于在阿里云上部署java web 项目
- 阿里云oss存储静态资源
- 阿里云oss解决资源跨域
- 阿里云一键部署LNMP环境
- 阿里云服务器购买流程
- 阿里云安全组规则配置
- [Linux]阿里云免费试用体验(在阿里云的ubuntu上部署个人服务)
- 阿里云NAS文件迁移项目实践
- 本地电脑如何远程连接阿里云WINDOWS服务器
- 阿里云服务器挂载云盘
- 阿里云部署mongdb(CentOS)
- 新手如何租用阿里云服务器(图文教程)
- 阿里云服务器如何设置IPV6通过IOS/Appstore的审核
- 阿里云网络
- 什么人适合考阿里云技术认证acp?阿里云认证acp含金量高吗?
- 阿里云acp全称是什么? 阿里云acp认证的学习指导和建议有哪些
- 阿里云acp考试报名方法是什么?阿里云acp考试报名条件是什么?
- 阿里云免费证书申请-分享
- 阿里云 API调用实践(python语言)
- 阿里云ACE 架构师 认证指南
- 阿里云高校计划入门级day02
- 阿里云高校计划入门级day03
- 二级域名怎么设置阿里云
热门资讯
推荐资讯
最新资讯
- 每个程序员必学的10个Git命令
- [nginx] - 使用nginx实现反向代理,动静分离,负载均衡,session共享
- 【小白学算法】10.递归的调用机制、使用时要注意的规则
- nginx反向代理之缓存,负载均衡,动静分离的配置详解
- Android连载24-本地广播和强制下线功能
- Android开机广播和关机广播
- android仿iphone的地区选择
- 入坑 Android Gradle 插件开发(一)
- Android——实现【搜索框】与点击搜索事件监听 —— SearchView
- oracle 10g r2 安装clusterware ocr 指定/dev/raw/raw1 报错
- Android资源文件assets和raw的比较
- android 读取 raw 中的文件。
- Android 读取res文件中raw的json文件
- 线性回归算法之鸢尾花特征分类【机器学习】
- 机器学习 | 鸢尾花分类项目实战
- 路由/三层交换机DHCP下发地址详解【华为eNSP】
- tensorflow--鸢尾花分类
- 生产者-消费者问题详细分析【操作系统原理】
- 机器学习之Python使用KNN算法进行电影类型预测,对鸢尾花进行分类
- 支持向量机算法之鸢尾花特征分类【机器学习】
评论