您现在的位置是:首页 >
当前栏目
对接科大讯飞NLP
对接 NLP 科大
2023-06-13 09:11:18 时间
这里对接的是文本纠错
git
仓库:
https://gitee.com/VampireAchao/simple-kdxf-nlp.git
api
文档:
https://www.xfyun.cn/doc/nlp/textCorrection/API.html#接口说明
引入maven依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.4</version>
</dependency>
然后在 resources
目录下添加 app.setting
配置文件(也可以用 spring
配置文件或者硬编码,随便你)
编写配置文件
# -------------------------------------------------------------
# ----- Setting File with UTF8-----
# ----- 服务接口认证信息配置文件 -----
# -------------------------------------------------------------
HOST_URL =
https://api.xf-yun.com/v1/private/s9a87e3ec
APP_ID = XXX
API_SECRET = XXX
API_KEY = XXX
接下来是编写代码:
package org.example;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Console;
import cn.hutool.core.lang.Opt;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.URLUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import cn.hutool.log.StaticLog;
import cn.hutool.setting.Setting;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.stream.Collectors;
import static cn.hutool.core.text.CharSequenceUtil.format;
/**
* 文本纠错
*
* @author VampireAchao
*/
public class TextCorrection {
/**
* 地址与鉴权信息,配置文件中
*/
public static final String HOST_URL;
public static final String APP_ID;
public static final String API_SECRET;
public static final String API_KEY;
static {
// 加载配置文件
Setting setting = new Setting("app.setting");
HOST_URL = setting.get("HOST_URL");
APP_ID = setting.get("APP_ID");
API_SECRET = setting.get("API_SECRET");
API_KEY = setting.get("API_KEY");
setting.clear();
}
public static void main(String[] args) {
Map<String, Object> inspect = inspect("Hutool似一个小而全的Java工具类库,通过静态万法封装,降低相咲API的学习城本,提蒿工作效率,使Java拥有函数式语言般的尤雅,让Java语言也何以“甜甜的”。");
Console.log(inspect);
}
public static JSONObject inspect(String words) {
String authUrl = getAuthUrl(HOST_URL, API_KEY, API_SECRET);
String json = getRequestJson(words);
String backResult = HttpUtil.post(authUrl, json);
StaticLog.debug("文本纠错返回结果:" + backResult);
JSONObject result = JSONUtil.parseObj(backResult);
if (Opt.ofNullable(result.getJSONObject("header"))
.map(header -> header.getInt("code"))
.filter(code -> code.equals(0))
.isEmpty()) {
throw new IllegalStateException(CharSequenceUtil.format("文本纠错失败:{}", backResult));
}
String text = result.getJSONObject("payload").getJSONObject("result").getStr("text");
String base64Decode = Base64.decodeStr(text);
StaticLog.debug("text字段base64解码后纠错信息:" + base64Decode);
return JSONUtil.parseObj(base64Decode);
}
public static String getAuthUrl(String hostUrl, String apiKey, String apiSecret) {
URL url = URLUtil.url(hostUrl);
String date = DateUtil.formatHttpDate(DateUtil.date());
String signatureTemplate = "host: {}\ndate: {}\nPOST {} HTTP/1.1";
String signatureBeforeSha = format(signatureTemplate, url.getHost(), date, url.getPath());
String signature = SecureUtil.hmacSha256(apiSecret).digestBase64(signatureBeforeSha, false);
String authorization = MapUtil.builder(new LinkedHashMap<>())
.put("api_key", apiKey)
.put("algorithm", "hmac-sha256")
.put("headers", "host date request-line")
.put("signature", signature)
.build()
.entrySet().stream().map(entry -> format("{}=\"{}\"", entry.getKey(), entry.getValue()))
.collect(Collectors.joining(StrPool.COMMA + StrPool.C_SPACE));
String queryString = HttpUtil.toParams(MapUtil.<String, Object>builder(new LinkedHashMap<>())
.put("authorization", Base64.encode(authorization))
.put("date", date)
.put("host", url.getHost())
.build(), StandardCharsets.UTF_8, true);
return HttpUtil.urlWithForm(hostUrl, queryString, CharsetUtil.CHARSET_UTF_8, false);
}
public static String getRequestJson(String text) {
return JSONUtil.toJsonStr(MapUtil.builder(new LinkedHashMap<>())
.put("header", MapUtil.builder(new LinkedHashMap<>())
.put("app_id", APP_ID)
.put("status", 3)
.build())
.put("parameter", MapUtil.builder(new LinkedHashMap<>())
.put("s9a87e3ec", MapUtil.builder(new LinkedHashMap<>())
.put("result", MapUtil.builder(new LinkedHashMap<>())
.put("encoding", "utf8")
.put("compress", "raw")
.put("format", "json")
.build())
.build())
.build())
.put("payload", MapUtil.builder(new LinkedHashMap<>())
.put("input", MapUtil.builder(new LinkedHashMap<>())
.put("encoding", "utf8")
.put("compress", "raw")
.put("format", "plain")
.put("status", 3)
.put("text", Base64.encode(text))
.build())
.build())
.build());
}
}
执行结果:
相关文章
- 【NLP基础】英文关键词抽取RAKE算法
- LiveGBS流媒体平台国标GB/T28181作为上级平台对接海康、大华、华为、宇视等下级平台NVR硬件监控摄像机
- 使用SpringBoot RestTemplate实现第三方接口对接
- 扫描仪对接(C#)
- 使用OpenWrt旁路由模式与Ubiquiti(UBNT)对接
- 为在线客服系统接入chatGPT(二):接口对接开发
- 钉钉对接
- 物流行业R公司对接舍弗勒EDI项目案例
- WPF 对接 Vortice 调用 D2D 使用 IWICBitmap 离屏渲染
- 作为一个Java程序员如何对接外部接口?
- 微信小程序开发—小程序对接Django—6详解手机开发
- Akka(25): Stream:对接外部系统-Integration详解编程语言