做过语音合成、TTS 开发的同学都懂:文本归一化 TN 才是决定合成音色自然度的隐形天花板

模型再强、音色再好,如果数字、日期、货币、符号转口语没处理好,读出来照样生硬别扭:`2026-05-11` 直接念字符串、`25℃` 乱读、百分比和分数发音错乱,用户体验直接拉胯。

中文场景尤其麻烦:全角半角混用、标点混乱、日期时间歧义、金额大小写、手机号编号读法,一堆细碎场景要兜底。与其自己手写几十条正则踩坑,不如直接用业界已经跑通生产环境的成熟开源工具。

今天把目前 TTS 圈内最常用、经过大厂落地验证的4 套文本预处理方案,从原理、源码思路、使用示例、性能、适用场景一次性拆透,同时补上大家需要的「TTS 文本归一化常用正则规则库 + 异常案例兜底清单」,新手直接开箱即用,老手可以按需二次定制,省去重复踩坑的时间。

一、先搞懂:TTS 为什么一定要做文本归一化?

很多入门开发者容易忽略一个点:TTS 模型只擅长读正常口语文本,看不懂非标准文本 NSW——阿拉伯数字、日期、时间、货币、度量、分数、百分比、特殊符号,都必须先转成纯中文口语,再进模型推理。

没做 TN 的典型翻车现场:

  • `14:30` 读成「一四三零」而不是「下午两点三十分」

  • `¥99.9` 直接读符号,不转「九十九点九元」

  • `50%` 读「五十百分号」而非「百分之五十」

  • 全角英文字母 `IPHONE` 逐个念字母,非常违和

所以标准 TTS 前置链路一定是:

原始文本 → 清洗规整 → 文本归一化 TN → 分词/多音字 → 韵律标注 → 进声学模型

下面四款工具,基本覆盖从轻量原型 → 企业生产 → 深度定制 → 全链路生态所有场景,每一款都附完整接入代码,复制就能用。

二、全能首选:WeTextProcessing(开源生产级方案)

如果只选一个工业化开箱即用的,我首推 WeTextProcessing。开源的实打实线上大规模跑过的 TTS 文本处理工具,覆盖中文 90% 以上归一化场景,同时支持 TN 文本归一化 + ITN 逆归一化 双向转换,不管 TTS 还是语音转写后文本还原都能用。

核心架构思路

在这里插入图片描述

整个流程分四层,设计非常规整,也是行业标准范式,源码可读性高,二次开发也方便:

预处理清洗 → Tagger 模式匹配打标 → Verbalizer 口语转换 → 后处理歧义优化

  1. 预处理清洗:统一格式化脏文本,全角转半角、中文标点转英文、过滤冗余语气词和无效符号,靠配置文件映射批量处理,不用手动写正则。

    • 全角字符 → 半角(IPHONE → IPHONE)
    • 中文标点 → 英文标点(“”→"")
    • 过滤语气词 / 冗余符号(呃、啊、多余空格)
    • 特殊字符白名单过滤,数据来源:data/char/fullwidth_to_halfwidth.tsv 等配置文件。
  2. Tagger 标记器:基于 WFST 规则匹配,识别文本里的日期、数字、货币、温度、百分比片段,打上类型标签,且按「日期优先于普通数字」的优先级规避歧义(比如「2026-05-11」优先识别为日期,而非单纯数字)。

    • 用 WFST 匹配预定义模式(数字、日期、¥、℃、%、时间等)
    • 给匹配到的片段打标签:date/number/money/measure
    • 按优先级匹配:日期 > 普通数字,避免歧义规则文件:tn/chinese/rules/ 下按类型拆分date.py/number.py/money.py
  3. Verbalizer 转换器:把识别出的非标准文本,映射成标准中文口语,覆盖绝大多数中文场景。

    • 数字:123 → 一百二十三;3.14 → 三点一四
    • 日期:2026-05-11 → 二零二六年五月十一日
    • 货币:¥99.9 → 九十九点九元
    • 度量:25℃ → 二十五摄氏度
    • 分数 / 百分比:1/2 → 二分之一;50% → 百分之五十
    • 核心:用 WFST 把 “输入串” 映射为 “输出口语串”,支持上下文歧义处理。
  4. 后处理:修正拆分歧义、优化语句停顿、剔除冗余字,保证整句流畅自然,避免转换后出现生硬卡顿。

    • 歧义修正:避免拆分错误(下午 3 点→下午三点,不拆成 “下午”+“三点”)
    • 流畅度优化:调整停顿、冗余字
    • 输出最终的纯文本。

功能亮点

处理类型 示例转换
数字转中文 “3.14” → “三点一四”、“12345” → “一万二千三百四十五”
日期时间 “2026-05-11” → “二零二六年五月十一日”、“14:30” → “下午两点三十分”
货币单位 “$100” → “一百美元”、“¥99.9” → “九十九点九元”
特殊符号 “25℃” → “二十五摄氏度”、“50%” → “百分之五十”
中文标点标准化 “,。!?” 统一处理,添加自然停顿标记

快速接入

pip install WeTextProcessing
from tn.chinese.normalizer import Normalizer
normalizer = Normalizer()
text = "今天是2026-05-11,我有100元现金"
result = normalizer.normalize(text)
# 输出:"今天是二零二六年五月十一日,我有一百元现金"

核心优势与注意事项

性能:单句耗时仅 5ms 左右,完全满足线上实时 TTS 接口,支持批量处理和流式处理,适配高并发场景。

适合场景:企业级 TTS 服务、公有云语音接口、对准确率和稳定性要求高的生产项目,不用额外适配,开箱即用。

避坑提醒:默认不处理手机号逐位读法,若需要将「13800138000」转为「一三八零零一三八零零零」,需额外添加自定义规则。

三、轻量神器:cn2an 纯数字转换利器

很多时候我们不需要完整文本归一化,只需要搞定数字 ↔ 中文互转,不想引入重型依赖,那 `cn2an` 就是刚需标配。纯 Python 实现,零第三方依赖,轻量到可以嵌入小程序、客户端,性能拉满。

核心特点

  • 零第三方依赖、纯 Python 实现,安装包体积极小,不占用过多资源。

  • 算法极简:正向/反向遍历,时间复杂度 O(n),极致轻量,单句微秒级处理,肉眼无感知。

  • 支持四种转换模式:`strict / normal / smart / direct`,适配不同业务场景。

  • 兼容整数、小数、负数、日期、分数、百分比、金额大写,数字相关转换全覆盖。

四种模式核心区别:

  • strict:严格标准中文数字(如「一百二十三」,不允许「1百23」)。

  • normal:支持「一二三」简写,适配日常口语化文本。

  • smart:兼容「1百23」「三千5百」这类混合写法,适合处理用户输入的不规范文本。

  • direct:逐位直译不做语义合并(如「123」→「一二三」,适合手机号、编号读法)。

功能亮点

  • 支持 “123"↔"一百二十三” 基础转换
  • 智能识别上下文:“2026 年"→"二零二六年”,“1/2"→"二分之一”
  • 处理混合数字:“第 123 名"→"第一百二十三名”,“约 500 人"→"约五百人”
  • 支持大小写金额转换:“100 元"→"壹佰元整”

常用能力演示

pip install cn2an
import cn2an

## 中文数字 => 阿拉伯数字
# 最大支持到 `10**16`,即 `千万亿`,最小支持到 `10**-16`。

# 在 strict 模式(默认)下,只有严格符合数字拼写的才可以进行转化
output = cn2an.cn2an("一百二十三")
# 或者
output = cn2an.cn2an("一百二十三", "strict")
# output:
# 123

# 在 normal 模式下,可以将 一二三 进行转化
output = cn2an.cn2an("一二三", "normal")
# output:
# 123

# 在 smart 模式下,可以将混合拼写的 1百23 进行转化
output = cn2an.cn2an("1百23", "smart")
# output:
# 123

# 以上三种模式均支持负数
output = cn2an.cn2an("负一百二十三", "strict")
# output:
# -123

# 以上三种模式均支持小数
output = cn2an.cn2an("一点二三", "strict")
# output:
# 1.23

# 在 direct 模式下,只做逐位原样转化,并返回字符串
output = cn2an.cn2an("零零三", "direct")
# output:
# 003

output = cn2an.cn2an("一二点三零", "direct")
# output:
# 12.30

## 阿拉伯数字 => 中文数字
# 最大支持到`10**16`,即`千万亿`,最小支持到 `10**-16`。

# 在 low 模式(默认)下,数字转化为小写的中文数字
output = cn2an.an2cn("123")
# 或者
output = cn2an.an2cn("123", "low")
# output:
# 一百二十三

# 在 up 模式下,数字转化为大写的中文数字
output = cn2an.an2cn("123", "up")
# output:
# 壹佰贰拾叁

# 在 rmb 模式下,数字转化为人民币专用的描述
output = cn2an.an2cn("123", "rmb")
# output:
# 壹佰贰拾叁元整

# 以上三种模式均支持负数
output = cn2an.an2cn("-123", "low")
# output:
# 负一百二十三

# 以上三种模式均支持小数
output = cn2an.an2cn("1.23", "low")
# output:
# 一点二三

# 在 direct 模式下,只做逐位原样转化
output = cn2an.an2cn("012", "direct")
# output:
# 零一二

output = cn2an.an2cn("12.30", "direct")
# output:
# 一二点三零

## 句子转化

# 在 cn2an 方法(默认)下,可以将句子中的中文数字转成阿拉伯数字
output = cn2an.transform("小王捡了一百块钱")
# 或者
output = cn2an.transform("小王捡了一百块钱", "cn2an")
# output:
# 小王捡了100块钱

# 在 an2cn 方法下,可以将句子中的中文数字转成阿拉伯数字
output = cn2an.transform("小王捡了100块钱", "an2cn")
# output:
# 小王捡了一百块钱

# direct=True 时,句子中的数字只做逐位原样转化,不做日期、范围等额外处理
output = cn2an.transform("电话零零三,二〇〇二年", "cn2an", direct=True)
# output:
# 电话003,2002年

output = cn2an.transform("电话012,1-2个月", "an2cn", direct=True)
# output:
# 电话零一二,一-二个月


## 支持日期
output = cn2an.transform("小王的生日是二零零一年三月四日", "cn2an")
# output:
# 小王的生日是2001年3月4日

output = cn2an.transform("小王的生日是2001年3月4日", "an2cn")
# output:
# 小王的生日是二零零一年三月四日


## 支持分数
output = cn2an.transform("抛出去的硬币为正面的概率是二分之一", "cn2an")
# output:
# 抛出去的硬币为正面的概率是1/2

output = cn2an.transform("抛出去的硬币为正面的概率是1/2", "an2cn")
# output:
# 抛出去的硬币为正面的概率是二分之一

## 支持百分比
output = cn2an.transform("抛出去的硬币为正面的概率是百分之五十")
# output:
# 抛出去的硬币为正面的概率是50%

output = cn2an.transform("抛出去的硬币为正面的概率是50%", "an2cn")
# output:
# 抛出去的硬币为正面的概率是百分之五十


## 支持摄氏度
output = cn2an.transform("现在温度是100℃", "an2cn")
# output:
# 现在温度是一百摄氏度

output = cn2an.transform("现在温度是一百摄氏度", "cn2an")
# output:
# 现在温度是100℃

核心优势与适用场景

性能:单句微秒级处理,比 WeTextProcessing 更快,适合对性能要求极高的轻量场景。

适合场景:快速原型开发、小程序/客户端轻量 TTS、仅需数字转换的业务场景(如财务金额、编号读法),不用引入复杂依赖,省时间。

避坑提醒:不支持全角半角转换、标点规整,若需要完整文本清洗,需搭配简单正则使用(后面会补充)。

四、定制专属方案:chinese_text_normalization

如果你有行业特殊术语、自定义读法、需要改规则二次开发,那这款基于正则+手写规则的开源项目最合适。源码完全透明,模块化拆分,每一条规则都能自定义修改,适配政企、医疗、金融等行业定制 TTS 场景。

核心设计

采用模块化拆分,数字、日期、时间、货币、手机号、分数等场景独立规则,修改某一类场景时,不会影响其他功能,二次开发成本极低:

  • 基础清洗模块:全角半角、大小写、冗余空格、语气词自动清理,可配置开关。
    • 全角 ↔ 半角转换
    • 英文大小写转换
    • 过滤标点符号
    • 删除冗余空格
    • 去除语气词(呃、啊)
    • 智能去除儿化音(保留白名单:儿女、婴儿等)
  • 归一化模块:按场景拆分,支持自定义读法(如行业术语「5G」可转为「五吉」)。
    • 日期:2025 年 08 月 22 日 → 二零二五年八月二十二日
    • 金钱:100.5 元 → 一百点五元
    • 手机号 / 固话:13800138000 → 一三八零零一三八零零零
    • 分数:1/2 → 二分之一
    • 百分数:50% → 百分之五十
    • 数字 + 量词:25℃ → 二十五
    • 纯数字:1234 → 一千二百三十四
    • 数字编号:10086 → 一零零八六
  • 辅助模块:儿化音智能剔除(保留儿女、婴儿等白名单)、简繁互转、批量/流式处理。

功能亮点

  • 模块化设计:数字、日期、时间、货币、度量衡等独立规则模块
  • 支持中英文混合文本处理:“iPhone 13"→"爱疯十三”
  • 可自定义规则:通过配置文件添加行业特定术语转换
  • 支持批量处理与流式处理两种模式

常量定义

  • 中文数字(零一二三四五…)、大小写数字、数位单位(十百千万亿兆…)
  • 货币、量词、标点符号、全角转半角映射表 QJ2BJ
  • 儿化音白名单、填充词(呃、啊)等

核心类结构

  • ChineseChar / ChineseNumberUnit / ChineseNumberDigit / ChineseMath
  • NumberSystem / MathSymbol 数字系统封装

核心转换函数

  • create_system():创建中文数字系统
  • chn2num()中文数字 → 阿拉伯数字
  • num2chn()阿拉伯数字 → 中文数字
  • NSWNormalizer:非标准词(日期、金钱、电话、分数、百分数)标准化

辅助工具函数

  • remove_erhua():去除儿化音
  • quanjiao2banjiao():全角转半角
  • check_chars():非法字符校验

接入示例

pip install opencc-python-reimplemented
from cn_tn import TextNorm

# 自定义配置:全角转半角、移除冗余语气词、剔除儿化音
normalizer = TextNorm(
    to_banjiao=True,       # 全角转半角
    remove_fillers=True,   # 去语气词
    remove_erhua=True,     # 去儿化音
    to_lower=False,        # 英文不大写
    check_chars=False      # 不检查非法字符
)
test_text = "今天是2026年5月11日,我买了3个苹果,花了15.5元"
normalizer(test_text)
# '今天是二零二六年五月十一日 我买了三个苹果 花了十五点五元'

核心优势与适用场景

性能:单句耗时约 3ms,比 WeTextProcessing 略快,支持批量处理,适配中高并发场景。

适合场景:政企定制 TTS、行业专属术语(如医疗、金融)、需要私自改归一化规则的专业项目,源码透明,可深度定制。

避坑提醒:默认规则不如 WeTextProcessing 全面,需要根据自身业务补充规则,建议结合后面的正则规则库使用。

五、全链路生态:PaddleSpeech 文本前端

如果你本身就在用飞桨语音生态,不想自己拼装工具,直接用 PaddleSpeech 内置文本前端 一步到位。它不只是做文本归一化,而是完整 TTS 前置全链路,省去自己整合工具的麻烦。

完整链路:文本清洗 → 归一化 → 分词 → 多音字纠错 → 拼音声调 → 韵律停顿预测,输出可直接喂给 TTS 模型训练和推理的音素序列。

亮点最实用的一点:上下文智能多音字消歧,解决「银行/行走」「长大/长短」这类传统正则搞不定的场景,这是其他三款工具不具备的优势。

功能亮点

  • 全流程文本处理:清洗→归一化→分词→拼音标注→韵律预测
  • 强大的多音字处理:基于上下文的智能多音字纠正(如 “银行"vs"行走”)
  • 支持 SSML 标记语言:可控制语速、音调、停顿等语音参数
  • 无缝集成 PaddleSpeech 的 TTS 模型

简单使用

pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
pip install pytest-runner
pip install paddlespeech
from paddlespeech.t2s.frontend.zh_frontend import Frontend

frontend = Frontend()
text = "12345元,2026年5月11日,北京欢迎你"
phones = frontend.get_phonemes(text)
# 输出拼音序列与声调信息,直接用于TTS模型输入
['i1','uan4','er4','q','ian1','s','an1','b','ai3','s','ii4','sh','iii2','u3','van2','sp',
 'er4','l','ing2','er4','l','iou4','n','ian2','u3','ve4','sh','iii2','i2','r','iii4','sp','b','ei3','j','ing1','h','uan1','ing2','n','i3']

整句:一万二千三百四十五元,二零二六年五月十一日,北京欢迎你

符号类型 含义 示例
字母组合 声母 / 韵母(普通话声韵拆分) b (玻), j (基), ing (英)
数字 1-4 普通话四声 1 = 阴平 (ˉ)、2 = 阳平 (ˊ)、3 = 上声 (ˇ)、4 = 去声 (ˋ)
sp 静音停顿(标点 / 断句生成) 逗号、句号对应的静音
ii / iii 卷舌音 / 整体认读音节(模型专用写法) sh+iii = 师 (shī)

核心优势与适用场景

性能:单句耗时约 6ms,略低于其他三款工具,但胜在全链路一站式,不用额外整合。

适合场景:飞桨语音生态项目、端到端 TTS 开发、需要完整前置链路(多音字+韵律)的场景,省去拼装工具的时间。

避坑提醒:依赖飞桨生态,若项目不使用 PaddlePaddle,不建议引入,会增加额外依赖成本。

注意:paddlespeech项目中的utils下的zh_tn.py代码复用chinese_text_normalization项目下的cn_tn.py文件

新增了:

  1. 文本清洗函数:remove_weird_charsremove_extra_linebreaksremove_symbols
  2. 中文分词(jieba)、字符 / 词切分
  3. 命令行参数解析(argparse)
  4. 批量文本处理的 main 函数
from zh_tn import NSWNormalizer

# 待处理文本
text = "12345元,2026年5月11日,手机号13800138000,80.5%,3/4,0595-12345678"

# 归一化
res = NSWNormalizer(text).normalize()

print("原始:", text)
print("归一化后:", res)
# 原始: 12345元,2026年5月11日,手机号13800138000,80.5%,3/4,0595-12345678
# 归一化后: 一万两千三百四十五元,二零二六年五月十一日,手机号一三八零零一三八零零零,百分之八十点五,四分之三,零五九五一二三四五六七八

六、四款工具横向选型对照表

工具名称 核心优势 性能(单句耗时) 适用场景 依赖成本
WeTextProcessing 工业级全能、双向TN/ITN、大厂生产验证、场景全覆盖 约5ms 企业线上TTS、标准语音服务、高稳定性需求 中等(需安装相关依赖)
cn2an 零依赖、超轻量、数字转换拉满、性能极致 微秒级 原型开发、轻量应用、仅数字处理场景 极低(零第三方依赖)
chinese_text_normalization 规则透明、可深度定制、模块化、适配行业需求 约3ms 行业定制、私有规则改造、二次开发 低(少量依赖)
PaddleSpeech 前端 全链路一站式、多音字消歧、适配飞桨生态 约6ms 飞桨生态项目、端到端TTS开发 较高(依赖飞桨框架)

七、TTS 文本预处理标准落地流程

不管用哪款工具,按这个流程走,合成流畅度直接拉满,避免出现翻车场景,这是我在多个生产项目中验证过的标准流程:

  1. 基础清洗:过滤乱码、特殊控制符、多余换行空格,统一全角半角、中英文标点,剔除冗余语气词。

  2. 归一化转换:将数字、日期、货币、符号、度量等非标准文本,统一转成中文口语,规避歧义。

  3. 标点规整:统一中英文标点(如「,」替换为「,」),合理插入停顿(如句号、逗号后添加短停顿)。

  4. 多音字消歧:处理上下文相关的易错读音(如「银行」读「yín háng」,而非「yín xíng」)。

  5. 韵律标记:按标点和语义加入停顿标记,适配 TTS 模型的韵律合成,避免生硬卡顿。

八、干货补充:TTS 文本归一化常用正则规则库 + 异常案例兜底清单

这部分是重点,不管用哪款工具,都能用到——整理了生产环境中最常见的异常场景,搭配可直接复制的正则规则,兜底工具未覆盖的边缘案例,减少踩坑。

(一)常用正则规则库

所有正则都带注释,可根据自身业务调整,主要用于补充工具未覆盖的场景:

import re

def tts_text_clean(text):
    # 1. 过滤特殊控制符(换行、制表符、空格等)
    text = re.sub(r'[\n\t\r]', '', text)
    text = re.sub(r'\s+', ' ', text).strip()
    
    # 2. 全角转半角
    def full2half(s):
        result = ""
        for char in s:
            code = ord(char)
            if code == 12288:  # 全角空格
                code = 32
            elif 65281 <= code <= 65374:  # 全角字符
                code -= 65248
            result += chr(code)
        return result
    text = full2half(text)
    
    # 3. 手机号/固话逐位读法
    # 匹配手机号(11位)、固话(如010-12345678)
    text = re.sub(r'(\d{11})', lambda x: ''.join([c + ' ' for c in x.group()]).strip(), text)
    text = re.sub(r'(\d{3,4}-\d{7,8})', lambda x: ''.join([c + ' ' if c != '-' else ' ' for c in x.group()]).strip(), text)
    
    # 4. 特殊符号归一化(如℃、%、$等,补充工具遗漏场景)
    text = re.sub(r'℃', '摄氏度', text)
    text = re.sub(r'%', '百分之', text)
    text = re.sub(r'\$', '美元', text)
    text = re.sub(r'€', '欧元', text)
    
    # 5. 冗余语气词过滤(补充工具未覆盖的语气词)
    fill_words = r'嗯|哦|啊|呀|呢|吧|啦|呵|哈'
    text = re.sub(f'[{fill_words}]', '', text)
    
    # 6. 日期歧义修正(如「2026.5.11」转为「2026年5月11日」)
    text = re.sub(r'(\d{4})\.(\d{1,2})\.(\d{1,2})', r'\1年\2月\3日', text)
    
    return text

# 测试正则效果
test_text = "嗯,今天是2026.5.11,手机号13800138000,气温25℃,折扣50%,固话010-12345678"
print(tts_text_clean(test_text))
# 输出:今天是2026年5月11日,手机号一 三 八 零 零 一 三 八 零 零 零,气温25摄氏度,折扣50百分之,固话零 一 零  一 二 三 四 五 六 七 八

(二)异常案例兜底清单

整理了10个生产环境中最常见的异常案例,包含问题描述、解决方案,直接对应到上面的工具和正则,避免踩坑:

异常案例 问题描述 解决方案
案例1:「2026.5.11」 点号分隔日期,工具无法识别,读成「二零二六点五点十一」 用正则将「.」替换为「年」「月」,再用工具归一化
案例2:「13800138000」 手机号被识别为普通数字,读成「十三亿八千万一百三十八万」 用正则逐位拆分,或用cn2an的direct模式转换
案例3:「5G/4G」 行业术语,工具无法识别,读成「五G/四G」 用正则替换为「五吉/四吉」,或修改chinese_text_normalization规则
案例4:「¥100.50」 小数末尾的0被忽略,读成「一百点五」,不符合财务场景 用cn2an的up模式转为大写,或补充正则保留末尾0
案例5:「全角123456」 全角数字未转换,工具识别异常,读成字符串 用全角转半角正则,再进行归一化
案例6:「银行/行走」 多音字歧义,工具读错声调 用PaddleSpeech前端的多音字消歧,或手动添加上下文规则
案例7:「3/4吨」 分数+度量组合,工具只转换分数,忽略度量 先归一化分数,再用正则补充度量读法(如「四分之三吨」)
案例8:「嗯,今天天气不错」 冗余语气词,合成时生硬卡顿 用正则过滤语气词,或开启chinese_text_normalization的remove_fillers开关
案例9:「010-12345678」 固话被识别为普通数字,读错格式 用正则逐位拆分,补充固话读法规则
案例10:「IPhone 15」 英文+数字组合,读成「IPhone十五」,违和感强 用正则将英文逐位读(如「爱 皮 哄 一 五」),或替换为中文名称

九、总结:按需选型,少走弯路

  • 正式线上生产:闭眼用 WeTextProcessing,大厂验证、场景全覆盖,省心少踩坑,搭配正则规则库兜底边缘案例。

  • 快速开发、只转数字:cn2an 必装,轻量零依赖,数字转换拉满,适合原型和轻量应用。

  • 行业定制、改规则需求:基于 chinese_text_normalization 二次开发,源码透明,模块化设计,适配行业特殊场景。

  • Paddle 语音生态:直接用自带前端,全链路一站式搞定,重点解决多音字消歧问题,省去工具拼装麻烦。

其实 TTS 文本预处理,核心就是覆盖场景+规避歧义+适配口语,不用追求复杂,选择一款适合自己业务的工具,搭配常用正则和异常兜底,就能满足绝大多数生产需求。

如果大家在实际开发中遇到其他未覆盖的异常案例,或者需要某款工具的二次开发教程,可以在评论区留言。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐