最近接到一个需求、要对用户输入的内容进行文本检查。不能输入一些敏感的内容、当时想着这个东西很简单、自己创建一个敏感词汇、使用过滤器对请求的内容进行过滤就好了。运行一段时间过后才发现、维护这个敏感词汇很是花力气。一些“名人”、“网络敏感词”、甚至敏感数字隔一段时间就冒出来了。等你维护进去的时候、你数据库早就有这些信息了。后面决定还是使用第三方的库算了。至少不用太多的维护就能预防绝大多数的敏感词。就算是有一些滞后了、也可以自己手动导入到第三库里面去。而且如果有啥问题、程序员至少不用拉去祭天了、有第三方帮忙背锅。

这里使用了百度的API(收费)、用法还是很简单的。申请好了过后只要注意Access_Token的更新、剩下的就是调用了。API文档:https://ai.baidu.com/ai-doc/ANTIPORN/Vk3h6xaga

定时获取Token:

import com.zmh.code.common.baidu.TextUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;/*** 百度token(30天有效)、每周一凌晨重新获取*/
@Component
@Slf4j
public class BaiduAccessTokenTask {/*** 每周一凌晨*/@Scheduled(cron = "0 0 0 ? * MON")public void xxx() {log.info("----百度TOKEN定时任务每周一凌晨执行开始-----");TextUtils.setBaiduAccessToken();log.info("----百度TOKEN定时任务每周一凌晨执行结束-----");}
}

调用审核接口:

import com.alibaba.druid.util.StringUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.zmh.code.common.HttpUtils;
import lombok.extern.slf4j.Slf4j;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;/*** 百度文字检查*/
@Slf4j
public class TextUtils {private final static String appId = "appId";private final static String appKey = "appKey";private final static String secretKey = "secretKey";private final static String authHost = "https://aip.baidubce.com/oauth/2.0/token?";private final static String textHttp="https://aip.baidubce.com/rest/2.0/solution/v1/text_censor/v2/user_defined";public static String baiduAccessToken = null;public static void setBaiduAccessToken(){// 获取token地址String getAccessTokenUrl = authHost// 1. grant_type为固定参数+ "grant_type=client_credentials"// 2. 官网获取的 API Key+ "&client_id=" + appKey// 3. 官网获取的 Secret Key+ "&client_secret=" + secretKey;BufferedReader in = null;try {URL realUrl = new URL(getAccessTokenUrl);HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();connection.setRequestMethod("GET");connection.connect();in = new BufferedReader(new InputStreamReader(connection.getInputStream()));String result = "";String line;while ((line = in.readLine()) != null) {result += line;}/*** 返回结果示例*/log.info("result:" + result);JSONObject jsonObject = JSON.parseObject(result);baiduAccessToken = jsonObject.getString("access_token");} catch (Exception e) {log.error("获取token失败:{}",e.toString());}finally {try {if(in != null){in.close();}} catch (IOException e) {log.error("获取百度文字检查token失败:{}",e.toString());}}}/*** 检测* @param param* @return*/public static JSONObject sendPost(String param) {if(StringUtils.isEmpty(baiduAccessToken)){setBaiduAccessToken();}param = param.replaceAll(" ","%2B");JSONObject result = HttpUtils.doPostNoHeader(textHttp+"?access_token="+baiduAccessToken+"&text="+param,null);return result;}/*** 检查文本是否合规* @param text* @return*/public static String checkText(String text){if(StringUtils.isEmpty(text)){return null;}JSONObject result = TextUtils.sendPost(text);if(result.getLong("error_code") != null){return result.getString("error_msg");}if(result.getIntValue("conclusionType") == 1){// 合规return null;}return result.getJSONArray("data").getJSONObject(0).getString("msg");}public static void main(String[] args) {setBaiduAccessToken();String text = "违规字样";JSONObject result = sendPost(text.replaceAll(" ","%2B"));System.out.println(result.toJSONString());}}

运行结果:

{"conclusion":"不合规","log_id":16574407619985826,"data":[{"msg":"存在政治敏感不合规","conclusion":"不合规","hits":[{"wordHitPositions":[{"positions":[[5,8]],"label":"300602","keyword":"违规字句"}],"probability":1.0,"datasetName":"百度默认文本反作弊库","words":["违规字句"],"modelHitPositions":[[0,13,0.3903]]}],"subType":3,"conclusionType":2,"type":12}],"isHitMd5":false,"conclusionType":2}

需要注意的是、这里是单机版本的、如果是集群、需要将token存入公用的缓存数据中去,比如redis。还有定时器也需要上一个锁、防止重复获取token。

哈哈哈、我填写的违规字样被和谐了。

java调用百度内容审核接口检查文本相关推荐

  1. Java调用百度人脸对比接口进行人脸(图片)对比

    前三步和人脸检测代码一样 在我上一篇博客地址链接:https://blog.csdn.net/weixin_45736927/article/details/104696428 第四步 Token和工 ...

  2. Java调用百度识别身份证接口

    实现代码如下: private boolean getIdcard(Driver driver, String face, String accessToken) throws Exception { ...

  3. Java调用百度API实现文本与图像审核功能

    文档: API文档:https://ai.baidu.com/ai-doc/ANTIPORN/ek3h6x90n SDK下载:https://ai.baidu.com/sdk#anti github链 ...

  4. Java调用百度OCR文字识别API实现图片文字识别软件

    java_baidu_ocr Java调用百度OCR文字识别API实现图片文字识别软件 这是一款小巧方便,强大的文字识别软件,由Java编写,配上了窗口界面 调用了百度ocr文字识别API 识别精度高 ...

  5. Java调用百度AI实现人体属性分析

    Java调用百度AI实现人体属性分析 好久没有更新了...闲来无事发一下模仿百度AI的人体属性分析. 百度AI效果图如下: 本人开发效果图如下: 界面大家可以忽略........下面讲讲代码实现 1. ...

  6. Java调用百度API生成短网址

    由于百度短网址旧API更新,故更新下原博客内容(仅供参考),希望小伙伴们以官方API为主,以防影响使用. 官方API:https://dwz.cn/console/apidoc package com ...

  7. java调用百度地图API依据地理位置中文获取经纬度

    百度地图api提供了非常多地图相关的免费接口,有利于地理位置相关的开发,百度地图api首页:http://developer.baidu.com/map/. 博主使用过依据地理依据地理位置中文获取经纬 ...

  8. java调用百度翻译_Java调用百度API实现翻译-Go语言中文社区

    下面是Java调用百度API实现翻译的具体步骤: 一.在写代码之前先在在百度翻译平台中,申请APP_ID 申请地址申请的详见点击打开链接 申请之后,会得到APP_ID和SECURITY_KEY 二.j ...

  9. 【2019-07-23】]python3 把日语翻译为中文 调用百度翻译API接口及API申请使用教程

    点击申请百度翻译API,得到一个你自己的API账户. 点击查看申请教程,感谢教程原作者. API官网提供了一个python2的使用接口的demo还有详细的解释文档 想用python3完成,代码几乎照搬 ...

最新文章

  1. namenode如何存储复本?
  2. 加薪方式的真相!你是哪一种?
  3. 【C 语言】数组 ( 指针数组用法 | 菜单选择 )
  4. HBase 0.98 分布式集群安装详解
  5. 一个实验教会你配置IPv6地址
  6. 数字图像处理频域滤波实现低通与高通滤波(包含matlab代码)
  7. ffmpeg h264 h265 视频格式操作
  8. Vue表情包输入组件
  9. 如何配置一台电脑。(一次解决电脑基础知识和如何选择合适电脑)
  10. 《古诗词里的快意人生》读后感
  11. 评测i9 13900hx和​​R9 7940HS选哪个 酷睿i913900hx和​​锐龙R97940HS对比
  12. 零基础的人怎么备考二建
  13. 漫画英语作文怎么写 计算机,漫画类的英语作文怎么写
  14. Python函数*args与**kwargs的用法
  15. AES - Openssl AES 函数说明
  16. 机器学习中的独立同分布(I.I.D.)假设
  17. 演播室与舞台在灯光设计上的区别
  18. 游戏用户隐私协议《贪吃鱼进化》
  19. ERC20标准函数简介与测试方法
  20. 批量重命名文件中的照片

热门文章

  1. Oracle之删除数据之后如何恢复的方法总结
  2. 如何将VSCode添加到鼠标右键菜单
  3. Hexo-fluid主题添加51LA统计
  4. 图像处理3:Sobel边缘检测
  5. mac 扩展显示器全屏滑动不一起滑动
  6. Aspose.CAD使用教程:使用 C# 将 DGN 转换为 JPEG、PNG 或 TIFF 图像
  7. 查看Git本地安装位置
  8. 如何搭建一个爬虫代理服务?
  9. 89c52单片机控制两个步进电机正反转加减速(程序+仿真)
  10. 微信App支付源码坑注释