文档

API调用方式定制词表

使用API调用的方式进行定制词表

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

image

代码示例

代码以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

中文分词(通用) (aliyun.com)

多语言分词-电商标题

5

中文分词(电商标题) (aliyun.com)

多语言分词-电商内容

6

中文分词(电商内容) (aliyun.com)

多语言分词-电商评价

7

中文分词(电商评价) (aliyun.com)

多语言分词-文娱

8

中文分词(文娱) (aliyun.com)

多语言分词-O2O

9

中文分词(O2O) (aliyun.com)

命名实体识别-电商(支持定制)

3

命名实体识别(中文高级版) (aliyun.com)

说明

  1. RequestWordListCustomization类中包含了整个调用过程中的核心逻辑,共有四步。STSTokenVo和InsertCustomVo是对请求结果进行解析的Json映射类

  2. 代码中总共有四个todo,需要完成对应的更改,例如文件路径,除此之外的代码,例如各种常量,则无需进行更改

  3. 第一步、第二步、第四步与调用本产品其它的算法接口类似,如需使用其它语言,参考对应的SDK使用方法即可:代码示例(使用SDK发起调用) (aliyun.com),要注意更新依赖的版本(maven >= 1.8.12、pip install >= 1.0.18、dotnet add package >= 1.0.12 )

  4. 第三步上传OSS请参考使用STS临时访问凭证访问OSS (aliyun.com)中的步骤六,步骤六中所使用的安全密钥、临时令牌等参数在上面提到的第二步中均已获取,如需使用其它语言完成上传,可以参考步骤六后的SDK示例

  5. 第二步与第四步请求的是本产品的接口,接口对QPS的限制是:10QPS每个用户,调用超过阈值后将会请求失败

  • 本页导读 (0)
文档反馈