口语书面化

本文主要介绍口语书面化的AI能力和实现方式。口语书面化是指对语音转写结果进行原文改写和润色,便于形成书面化的语音转写结果。

请求参数

参数名

类型

是否必填

说明

TextPolishEnabled

boolean

默认为false

示例设置

{
    "Input":{
        ...
    },
    "Parameters":{
        ...
        "TextPolishEnabled":true,
        ...
    }
}

代码示例

#!/usr/bin/env python
#coding=utf-8

import os
import json
import datetime
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
from aliyunsdkcore.auth.credentials import AccessKeyCredential

def create_common_request(domain, version, protocolType, method, uri):
    request = CommonRequest()
    request.set_accept_format('json')
    request.set_domain(domain)
    request.set_version(version)
    request.set_protocol_type(protocolType)
    request.set_method(method)
    request.set_uri_pattern(uri)
    request.add_header('Content-Type', 'application/json')
    return request

def init_parameters():
    root = dict()
    root['AppKey'] = '输入您在听悟管控台创建的Appkey'

    # 基本请求参数
    input = dict()
    input['SourceLanguage'] = 'cn'
    input['TaskKey'] = 'task' + datetime.datetime.now().strftime('%Y%m%d%H%M%S')
    input['FileUrl'] = '输入待测试的音频url链接'
    root['Input'] = input

    # AI相关参数,按需设置即可
    parameters = dict()
    # 口语书面化
    parameters['TextPolishEnabled'] = True
    root['Parameters'] = parameters
    return root

body = init_parameters()
print(body)

# TODO  请通过环境变量设置您的 AccessKeyId 和 AccessKeySecret
credentials = AccessKeyCredential(os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'], os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET'])
client = AcsClient(region_id='cn-beijing', credential=credentials)

request = create_common_request('tingwu.cn-beijing.aliyuncs.com', '2023-09-30', 'https', 'PUT', '/openapi/tingwu/v2/tasks')
request.add_query_param('type', 'offline')

request.set_content(json.dumps(body).encode('utf-8'))
response = client.do_action_with_exception(request)
print("response: \n" + json.dumps(json.loads(response), indent=4, ensure_ascii=False))
package com.alibaba.tingwu.client.demo.aitest;

import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.FormatType;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.http.ProtocolType;
import com.aliyuncs.profile.DefaultProfile;
import org.junit.Test;

/**
 * @author tingwu2023
 */
public class TextPolishTest {

    @Test
    public void testTextPolish() throws ClientException {
        CommonRequest request = createCommonRequest("tingwu.cn-beijing.aliyuncs.com", "2023-09-30", ProtocolType.HTTPS, MethodType.PUT, "/openapi/tingwu/v2/tasks");
        request.putQueryParameter("type", "offline");

        JSONObject root = new JSONObject();
        root.put("AppKey", "输入您在听悟管控台创建的Appkey");

        JSONObject input = new JSONObject();
        input.fluentPut("FileUrl", "输入待测试的音频url链接")
                .fluentPut("SourceLanguage", "cn")
                .fluentPut("TaskKey", "task" + System.currentTimeMillis());
        root.put("Input", input);

        JSONObject parameters = new JSONObject();
        parameters.put("TextPolishEnabled", true);
        root.put("Parameters", parameters);
        System.out.println(root.toJSONString());
        request.setHttpContent(root.toJSONString().getBytes(), "utf-8", FormatType.JSON);

        // TODO 请通过环境变量设置您的AccessKeyId、AccessKeySecret
        DefaultProfile profile = DefaultProfile.getProfile("cn-beijing", System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        IAcsClient client = new DefaultAcsClient(profile);
        CommonResponse response = client.getCommonResponse(request);
        System.out.println(response.getData());
    }

    public static CommonRequest createCommonRequest(String domain, String version, ProtocolType protocolType, MethodType method, String uri) {
        // 创建API请求并设置参数
        CommonRequest request = new CommonRequest();
        request.setSysDomain(domain);
        request.setSysVersion(version);
        request.setSysProtocol(protocolType);
        request.setSysMethod(method);
        request.setSysUriPattern(uri);
        request.setHttpContentType(FormatType.JSON);
        return request;
    }
}

示例输出

{
    "Message": "success", 
    "Code": "0", 
    "Data": {
        "Result": {
            "Transcription": "http://speech-swap-hangzhou.oss-cn-hangzhou.aliyuncs.com/tingwu/output/1503864348104017/05c45066fc6d496dae9b583426fdaae8/05c45066fc6d496dae9b583426fdaae8_Transcription_20231028230430.json?Expires=1698593389&OSSAccessKeyId=LTAI4G4uXHLPwQHj********&Signature=*********huzKcM4tzimubU%3D", 
            "TextPolish": "http://speech-swap-hangzhou.oss-cn-hangzhou.aliyuncs.com/tingwu/output/1503864348104017/05c45066fc6d496dae9b583426fdaae8/05c45066fc6d496dae9b583426fdaae8_AutoChapters_20231028230459.json?Expires=1698593389&OSSAccessKeyId=LTAI4G4uXHLPwQHj********&Signature=*********V8O%2BG4paM0VMv0AIyK4%3D"
        }, 
        "TaskId": "05c45066fc6df96dg09bf8z4*********", 
        "TaskStatus": "COMPLETED"
    }, 
    "RequestId": "7AE5CB5C-7287-16D1-BA93-G43********"
}

其中TextPolish字段对应的即为口语书面化结果的http url下载链接。

协议解析

上述输出中的口语书面化结果url中的内容为JSON格式的报文,示例如下所示。

{
    "TaskId": "742efa3a71f7475fae81a060********",
    "TextPolish": [
        {
            "FormalParagraphText": "云栖大会作为中国产业界的盛会,成为数字时代共同讨论的场所。阿里巴巴通过青橙奖助力青年科学家追求科学先进性。阿里云在云计算和数字生态方面不断发展,努力成为全球先进的计算基础设施。同时,阿里巴巴也在不断追求技术先进性,包括自主可控的云操作系统、算法模型的训练等。阿里巴巴希望通过低代码环境让普通人也能享受数据的成果和创造。此外,在芯片领域,阿里巴巴也在努力突破核心技术。",
            "SentenceIds": [
                1,
                2
            ],
            "ParagraphId": "1708487265101500000",
            "Start": 30,
            "End": 9600
        },
        {
            "FormalParagraphText": "平头哥围绕云计算场景定义了倚天710芯片,并助力冬奥在云上举办。云计算为各行各业带来全新的生产管理方式,推动中国走向现代化。阿里巴巴致力于追求技术先进性,并为社会发展担当更大责任,努力使云计算成为可持续发展的绿色动力。",
            "SentenceIds": [
                3,
                4,
                5
            ],
            "ParagraphId": "1708487280411500000",
            "Start": 15340,
            "End": 17790
        }
    ]
}

具体字段定义如下。

参数名

类型

说明

TaskId

string

创建任务时生成的TaskId。

TextPolish

list[]

口语书面化集合, 含有0个、1个或多个口语书面化信息。

TextPolish[i].FormalParagraphText

string

口语书面化的文本结果。

TextPolish[i].SentenceIds

list[]

口语书面化改写内容对应的SentenceId列表。

TextPolish[i].ParagraphId

string

文本结果的段落id,和语音转写结果中的段落id对应。

TextPolish[i].Start

long

文本结果在原音频中的开始时间,相对时间戳,单位为毫秒。

TextPolish[i].End

long

文本结果在原音频中的结束时间,相对时间戳,单位为毫秒。