文本处理

切分句子

POST /v1/text/segmentations

请求支持纯 text 或带时间的 segments[]。桌面网关还支持 file 参数,指向服务本机的 Transcript JSON 文件;Headless 服务要求内联传入内容。阈值默认 0.35。示例中的切分边界只用于说明输出格式。

请求示例:

Shell
curl --fail-with-body "$EDGESPEAK_BASE_URL/text/segmentations" \
  -H "Content-Type: application/json" \
  -d '{"text":"Hello world. Let us begin.","threshold":0.35}'

输出示例:

JSON
{
  "task": "segment",
  "text": "Hello world. Let us begin.",
  "segments": [
    {
      "text": "Hello world."
    },
    {
      "text": "Let us begin."
    }
  ]
}

纯文本输入切分后不带时间戳或说话人;传入带时间的输入时可以保留这些字段。所有时间及边距单位均为秒,详见长度与边距参数。

通过同一接口切分段落

传入 paragraph_threshold 即可启用模型原生段落边界。每个输出项为一个段落,内部可包含多句话;顶层 text 用 \n\n(空行)连接各段落。若输入文本较短,可能仅返回一个段落。

请求示例:

Shell
curl --fail-with-body "$EDGESPEAK_BASE_URL/text/segmentations" \
  -H "Content-Type: application/json" \
  -d '{"text":"Hello world. Let us begin. Now a different topic: tomorrow’s trip.","threshold":0.35,"paragraph_threshold":0.5}'

输出示例:

JSON
{
  "task": "segment",
  "text": "Hello world. Let us begin.\n\nNow a different topic: tomorrow’s trip.",
  "segments": [
    {
      "text": "Hello world. Let us begin."
    },
    {
      "text": "Now a different topic: tomorrow’s trip."
    }
  ]
}

阈值范围、段落模式的输入限制与 CLI 对照见分句与段落切分。此处边界不是对该文本结果的保证。省略 paragraph_threshold 即为句子模式。对应的 CLI 命令:edgespeak-cli segment --text "Hello world. Let us begin." --paragraph-threshold 0.5。

文本归一化:TN 与 ITN

POST /v1/text/normalizations

参数说明
text必填,非空,最多 256 KiB UTF-8。
language必填:传语言代码,或传 und 按文本逐段选择读法。支持范围见文本归一化支持的语言。
model默认内置 EdgeSpeak/Skylark。
modetn(默认):书面 → 口语;itn:口语 → 书面。
top_k默认 8,范围 1–16。
classes可选非空数组,如 cardinal、date、money。

以下示例设置 top_k: 1 只取一个候选。

下面这段培训报名正文里有两处要归一化:金额 25元 和时间 09:30。周围文字保持不变。以下 TN 和 ITN 完整响应均已通过本机网关实际调用核对。

TN:书面表达 → 口语表达

请求示例:

Shell
curl --fail-with-body "$EDGESPEAK_BASE_URL/text/normalizations" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "EdgeSpeak/Skylark",
  "text": "本次培训现已开放报名。费用为25元,活动将于09:30开始。",
  "language": "zh",
  "mode": "tn",
  "top_k": 1
}'

输出示例(完整响应):

JSON
{
  "task": "normalize",
  "model": "EdgeSpeak/Skylark",
  "language": "zh",
  "mode": "tn",
  "text": "本次培训现已开放报名。费用为25元,活动将于09:30开始。",
  "alternatives": [
    {
      "rank": 0,
      "text": "本次培训现已开放报名。费用为二十五元,活动将于九点三十分开始。",
      "spans": [
        {
          "start_byte": 42,
          "end_byte": 47,
          "class": "money",
          "source": "25元",
          "output": "二十五元"
        },
        {
          "start_byte": 62,
          "end_byte": 67,
          "class": "time",
          "source": "09:30",
          "output": "九点三十分"
        }
      ]
    }
  ]
}

顶层 text 保留整段原文;alternatives[0].text 是整段转换结果。两个 span 分别记录金额与时间的替换详情;偏移量使用原文的 UTF-8 字节区间(左闭右开),不是汉字字数。例如 [42, 47) 对应 25元。

ITN:口语表达 → 书面表达

请求示例:

Shell
curl --fail-with-body "$EDGESPEAK_BASE_URL/text/normalizations" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "EdgeSpeak/Skylark",
  "text": "本次培训现已开放报名。费用为二十五元,活动将于九点三十分开始。",
  "language": "zh",
  "mode": "itn",
  "top_k": 1
}'

输出示例(完整响应):

JSON
{
  "task": "normalize",
  "model": "EdgeSpeak/Skylark",
  "language": "zh",
  "mode": "itn",
  "text": "本次培训现已开放报名。费用为二十五元,活动将于九点三十分开始。",
  "alternatives": [
    {
      "rank": 0,
      "text": "本次培训现已开放报名。费用为¥25,活动将于9:30开始。",
      "spans": [
        {
          "start_byte": 42,
          "end_byte": 54,
          "class": "money",
          "source": "二十五元",
          "output": "¥25"
        },
        {
          "start_byte": 69,
          "end_byte": 84,
          "class": "time",
          "source": "九点三十分",
          "output": "9:30"
        }
      ]
    }
  ]
}

ITN 将口语反向归一化为 ¥25 和 9:30,不保证恢复 TN 输入时的原始写法(25元、09:30)。候选结果因语言、类别与规则而异。支持的语言及类别见 Skylark 的 x_edgespeak.normalization 响应元数据;限制说明见完整限制。

继续阅读:转录与说话人 · API 索引