API调用方式定制词表
使用API调用的方式进行定制词表
管控台已提供了页面操作的方式进行定制词表(需开通高级版后使用),本文档则提供了通过代码调用API的方式进行新增定制词表,可以实现下面截图中的功能

代码示例
代码以Java实现为例,其它语言的实现请参考下方说明
引入依赖
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.13</version>
</dependency>
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.15.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-alinlp -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-alinlp</artifactId>
<version>1.8.12</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.12</version>
</dependency>
代码
import com.alibaba.fastjson.JSON;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.alinlp.model.v20200629.GetUserUploadSignRequest;
import com.aliyuncs.alinlp.model.v20200629.GetUserUploadSignResponse;
import com.aliyuncs.alinlp.model.v20200629.InsertCustomRequest;
import com.aliyuncs.alinlp.model.v20200629.InsertCustomResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import java.io.File;
import java.util.UUID;
/**
* @Author:
* @Date: 2023/03/09/15:15
* @Description: 通过API请求方式进行词表定制
*/
public class RequestWordListCustomization {
public static void main(String[] args) throws ClientException {
/*
* 第一步:构建IAcsClient用于请求API
* todo 下列代码中替换为您的账号的AccessKey ID和AccessKey Secret
*/
DefaultProfile defaultProfile = DefaultProfile.getProfile(
"cn-hangzhou",
"your accessKeyId",
"your accessKeySecret");
IAcsClient client = new DefaultAcsClient(defaultProfile);
/*
* 第二步:获取STS临时令牌:用于第三步上传文件到OSS
*/
STSTokenVo.DataDTO dataDTO = getSecurityToken(client);
/*
* 第三步:上传自定义词表和正则表达式文件到OSS,并获取文件的URL等信息
*/
InsertCustomRequest insertCustomRequest = uploadFileToOss(dataDTO);
/*
* 第四步:调用API进行词表定制
*/
insertCustom(client, insertCustomRequest);
}
private static InsertCustomRequest uploadFileToOss(STSTokenVo.DataDTO data) {
String endpoint = "oss-cn-hangzhou.aliyuncs.com";
String accessKeyId = data.getAccessKeyId();
String accessKeySecret = data.getAccessKeySecret();
String securityToken = data.getSecurityToken();
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret, securityToken);
InsertCustomRequest insertCustomRequest = new InsertCustomRequest();
/*
* 上传自定义词表文件(可选)
* 自定义词表文件和正则表达式文件至少上传一个
* 若不需要上传自定义词表文件可以直接将本块代码删除或注释掉
*/
String customFileName = UUID.randomUUID().toString();
//todo 修改为你需要上传的定制文件的路径
String customFilePath = "/Users/yourFilePath/custom.txt";
PutObjectRequest customObjectRequest = new PutObjectRequest("alinlp-console-cloud-cn-hangzhou", customFileName,
new File(customFilePath));
ossClient.putObject(customObjectRequest);
String customUrl = "https://alinlp-console-cloud-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/" + customFileName;
//文件名称,最长不可超过100
insertCustomRequest.setCustomFileName(customFileName);
//文件URL,最长不可超过200
insertCustomRequest.setCustomUrl(customUrl);
/*
* 上传自定义词表文件(可选)
* 自定义词表文件和正则表达式文件至少上传一个
* 若不需要上传正则表达式文件可以直接将本块代码注掉
*/
String regFileName = UUID.randomUUID().toString();
//todo 修改为你需要上传的正则表达式文件的路径
String regFilePath = "/Users/yourFilePath/reg_test.txt";
PutObjectRequest regObjectRequest = new PutObjectRequest("alinlp-console-cloud-cn-hangzhou", regFileName,
new File(regFilePath));
String regUrl = "https://alinlp-console-cloud-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/" + regFileName;
ossClient.putObject(regObjectRequest);
//文件名称,最长不可超过100
insertCustomRequest.setRegFileName(regFileName);
//文件URL,最长不可超过200
insertCustomRequest.setRegUrl(regUrl);
//关闭OSSClient。
ossClient.shutdown();
return insertCustomRequest;
}
private static STSTokenVo.DataDTO getSecurityToken(IAcsClient client) throws ClientException {
//发起请求
GetUserUploadSignRequest request = new GetUserUploadSignRequest();
request.setServiceCode("alinlp");
GetUserUploadSignResponse response = client.getAcsResponse(request);
String data = response.getData();
System.out.println("getSecurityToken requestId:" + response.getRequestId());
System.out.println("getSecurityToken data:" + data);
//解析响应
STSTokenVo stsTokenVo = JSON.parseObject(data, STSTokenVo.class);
if (!stsTokenVo.getSuccess()) {
throw new RuntimeException("获取STS临时令牌失败,建议进行重试");
}
return stsTokenVo.getData();
}
private static void insertCustom(IAcsClient client, InsertCustomRequest request) throws ClientException {
//todo 需要更改apiId为您需要定制的api的id,可在下方文档-支持定制的算法ID列表部分查看
request.setApiId(5);
request.setServiceCode("alinlp");
InsertCustomResponse response = client.getAcsResponse(request);
String data = response.getData();
System.out.println("insertCustom requestId: " + response.getRequestId());
System.out.println("insertCustom data: " + data);
//解析响应
InsertCustomVo insertCustomVo = JSON.parseObject(data, InsertCustomVo.class);
if (!insertCustomVo.getSuccess()) {
throw new RuntimeException("请求失败,定制未完成,建议进行重试");
}
System.out.println("请求成功,定制完成");
}
}
/**
* @Author:
* @Date: 2023/03/28/16:38
* @Description:
*/
@NoArgsConstructor
@Data
public class STSTokenVo {
@JSONField(name = "data")
private DataDTO data;
@JSONField(name = "success")
private Boolean success;
@NoArgsConstructor
@Data
public static class DataDTO {
@JSONField(name = "accessKeyId")
private String accessKeyId;
@JSONField(name = "securityToken")
private String securityToken;
@JSONField(name = "accessKeySecret")
private String accessKeySecret;
@JSONField(name = "expire")
private String expire;
}
}
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Author:
* @Date: 2023/03/29/10:47
* @Description:
*/
@NoArgsConstructor
@Data
public class InsertCustomVo {
@JSONField(name = "data")
private Integer data;
@JSONField(name = "success")
private Boolean success;
@Override
public String toString() {
return "InsertCustomVo{" +
"data=" + data +
", success=" + success +
'}';
}
}
支持定制的算法ID列表
确定需要定制的算法服务,将id填写到上面代码里的第四个todo
算法服务-领域 | ID | API文档 |
多语言分词-通用 | 1 | |
多语言分词-电商标题 | 5 | |
多语言分词-电商内容 | 6 | |
多语言分词-电商评价 | 7 | |
多语言分词-文娱 | 8 | |
多语言分词-O2O | 9 | |
命名实体识别-电商(支持定制) | 3 |
说明
RequestWordListCustomization类中包含了整个调用过程中的核心逻辑,共有四步。STSTokenVo和InsertCustomVo是对请求结果进行解析的Json映射类
代码中总共有四个todo,需要完成对应的更改,例如文件路径,除此之外的代码,例如各种常量,则无需进行更改
第一步、第二步、第四步与调用本产品其它的算法接口类似,如需使用其它语言,参考对应的SDK使用方法即可:代码示例(使用SDK发起调用) (aliyun.com),要注意更新依赖的版本(maven >= 1.8.12、pip install >= 1.0.18、dotnet add package >= 1.0.12 )
第三步上传OSS请参考使用STS临时访问凭证访问OSS (aliyun.com)中的步骤六,步骤六中所使用的安全密钥、零时令牌等参数在上面提到的第二步中均已获取,如需使用其它语言完成上传,可以参考步骤六后的SDK示例
第二步与第四步请求的是本产品的接口,接口对QPS的限制是:10QPS每个用户,调用超过阈值后将会请求失败