TTS 文本预处理全拆解:4款工业级开源工具横向对比+实操干货

跟随虾哥项目实践,硬件选小智就对了

xiaozhi 开源方案官方适配,二次开发文档齐全

做过语音合成、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 文本预处理,核心就是覆盖场景+规避歧义+适配口语,不用追求复杂,选择一款适合自己业务的工具,搭配常用正则和异常兜底,就能满足绝大多数生产需求。

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

跟随虾哥项目实践,硬件选小智就对了

xiaozhi 开源方案官方适配,二次开发文档齐全

源码下载地址: https://pan.quark.cn/s/a4b39357ea24 谷歌公司设计了一无费用且具备开源特性的网络浏览器,名为Chrome,因其卓越的速度、稳定性和安性而广受赞誉。该浏览器运用了前沿的Web渲染引擎Blink以及JavaScript引擎V8,旨在保障网页载入与脚本运行的卓越效能。为应对无网络环境下的Chrome安装需求,特别准备了离线安装包。此压缩文件内含32位与64位两种规格的Chrome浏览器离线安装方案,具体文件名分别为"chromedev_x64-v68.0.3423.2.exe"与"chromedev_x86-v68.0.3423.2.exe"。在文件命名中,"x64"标识64位版本,适用于64位操作系统平台,而"x86"则对应32位版本,适配32位操作系统。文件名中的"v68.0.3423.2"代表Chrome的一个特定版本号,各版本可能涵盖安补丁、性能改进或新增功能。与32位Chrome相比,64位版本具备如下长处:能够处理更多内存容量,从而提升多任务作业能力;针对现代硬件的优化使其运行更为迅猛;64位版本更具备高级别的安防护,能更周地抵御恶意软件的侵袭。尽管如此,32位版本对于仍在使用32位操作系统的用户,或是在系统资源需求不高的场景下,依然适用。在部署Chrome浏览器时,用户需依据其个人计算机的操作系统平台,挑选匹配的版本进行安装。通过双击相应的.exe文件,安装流程将自动启动,一般包含接受使用许可、确定安装路径及构建桌面快捷方式等环节。若在安装阶段遭遇难题,可参照提示信息或联系技术支援获取协助,同时该压缩文件发布者亦表明欢迎用户以留言形式反映问题。Chrome浏览器的主要特质涵盖:直观的用户界面设计...
内容概要:本文围绕直驱式永磁同步电机(PMSM)矢量控制系统的建模与仿真展开研究,基于Simulink平台构建了完整的控制系统仿真模型,涵盖了电机本体数学建模、三相/两相坐标变换(Clarke/Park变换)、磁场定向控制(FOC)、电流环与速度环双闭环PID控制策略、空间矢量脉宽调制(SVPWM)技术以及转速调节器设计等核心技术环节。通过仿真实验验证了该控制策略在动态响应速度、稳态运行精度及抗负载扰动能力方面的优良性能,充分体现了矢量控制在实现电机高性能调速中的优势,为永磁同步电机在工业驱动、新能源汽车和高端装备制造等领域的实际应用提供了可靠的理论依据与技术支撑。; 适合人群:具备电机学、电力电子技术和自动控制原理基础知识的电气工程、自动化、机电一体化等相关专业的研究生、高校教师、科研人员,以及从事电机驱动系统、新能源汽车电驱、工业自动化设备研发的工程技术人员。; 使用场景及目标:①深入理解永磁同步电机矢量控制的基本原理与实现机制;②掌握在Simulink中搭建高精度电机控制系统仿真模型的方法与技巧;③为电机控制算法的设计、优化与参数整定提供高效的仿真验证平台;④服务于高校课程设计、毕业课题研究、科研项目前期验证及企业产品开发中的控制策略测试。; 阅读建议:建议结合经典电机控制教材进行对照学习,重点关注各功能模块间的信号流向、反馈机制与参数耦合关系,动手复现并调试仿真模型,通过改变PI参数、负载条件和给定转速等方式观察系统响应,从而深入掌握控制策略的内在逻辑与性能优化方法。
代码下载地址: https://pan.quark.cn/s/a4b39357ea24 Java学习路线(鱼皮)是一个面且循序渐进的Java开发技能培养方案,该路线从基础入门直至高级应用,致力于协助学习者高效地掌握Java编程的部核心内容。此学习路线的独特之处在于其新颖性、系统性、实践性、开放性以及社区回馈与持续迭代更新。其核心构成涵盖了预备阶段、Java入门知识、Java进阶技能、Java高级技术、Java框架应用以及Java项目实践等多个学习模块,每个模块均整合了相应的知识点、学习策略与资源指引。在预备阶段,学习者需配置在线编程环境、选择笔记工具、熟悉Markdown文档编写等基本技能,为编程学习奠定基础。在Java入门阶段,学习者应重点掌握Java编程的基础理论、开发环境配置、IDEA集成开发环境的使用、项目创建与执行调试、界面设置及插件配置等关键技能。在Java入门阶段,学习者还须深入理解Java基础语法、数据结构类型、程序流程控制、数组操作、面向对象编程、方法重载机制、封装原则、继承特性、多态表现、抽象类的概念、接口定义、枚举类型、常用类库、字符串处理、日期时间管理、集合框架、泛型编程、注解应用、异常处理机制、多线程技术、IO流操作、反射机制等核心知识点。在Java进阶阶段,学习者需要重点学习Java 8的更新特性、Stream API的应用、Lambda表达式的使用、新的日期时间处理API以及接口默认方法的实现。在Java高级阶段,学习者需要掌握Java框架的应用、Spring Boot框架的搭建、Spring Cloud微服务架构的实施等高级技术。在Java项目阶段,学习者需要学习Java项目开发的过程操作,包括项目架构设计、项目编码实现、项...
内容概要:本文围绕基于Matlab代码实现的卫星信号传播模拟研究,系统阐述了卫星信号在大气层及空间环境中传播特性的数值仿真方法。研究通过建立精确的数学模型,对信号衰减、传输延迟、多普勒效应以及噪声干扰等关键物理现象进行建模与仿真分析,面还原实际通信场景下的信号行为特征。该仿真体系不仅可用于验证通信链路设计的可靠性,还能为星地链路预算、抗干扰策略优化及接收机算法开发提供理论依据和技术支持。; 适合人群:具备一定Matlab编程能力、通信原理基础和电磁波传播知识的高校研究生、科研机构研究人员及从事卫星通信系统设计与仿真的工程技术人员。; 使用场景及目标:①用于高校课程中卫星通信相关理论的教学演示与实验教学;②支撑航天通信项目的链路性能评估与系统参数优化;③为新型调制解调、纠错编码和信号增强算法的研发提供可验证的仿真平台;④辅助科研人员开展低轨星座、深空探测等前沿领域的通信建模研究; 阅读建议:建议读者结合经典通信理论教材,深入理解各模块的物理意义,动手运行并调试提供的Matlab代码,尝试调整轨道参数、大气模型和噪声水平等变量,观察其对信号质量的影响,进而拓展模型以适配不同卫星轨道类型或复杂多径环境,提升综合仿真与分析能力。
打开链接下载源码: https://pan.quark.cn/s/a4b39357ea24 ### 常用电流电压检测电路:详细解析与实际应用 在电力电子技术范畴内,电流电压检测电路是达成各类电力设备控制与监测的关键构成部分。本资料将详细研究几种普遍应用的电流电压检测电路,意图辅助读者深入掌握其运行机制、设计要素及实际运用环境。 #### 一、电网电压同步检测电路 电网电压同步检测电路主要致力于完成电力系统中逆变器输出与电网电压之间的精确同步。以DSTATCOM(配电网静态同步补偿装置)为例,其系统硬件主要由主回路、控制回路以及检测与驱动回路三大部分组成。其中,检测电路负责采集3路交流电压、6路交流电流、2路直流电压和2路直流电流,同时还包括电网电压同步信号。 1. **常用电网电压同步检测电路及其特性** - **RC滤波模块**:用于滤除电网电压中的高频杂波,保障电压检测信号的纯净度。例如,在图2-2中,由电阻R5(1KΩ)和电容C4(15pF)构成的RC滤波装置,其时间常数远小于系统输出频率,有效降低了系统与电网的相位偏差。 - **过零比较单元**:如LM311,用于识别电网电压的过零时刻,从而实现电压信号的同步处理。过零比较单元输出的方波信号可用于控制单元的同步操作。 - **上拉限幅与非门电路**:用于强化驱动能力,确保信号符合微控制单元的输入标准,如TMS320LF2407的输入信号标准。 2. **脉宽调制PWM同步信号电路**:基于ADMC401芯片的PWM发生装置,通过PWMSYNC引脚提供与开关频率同步的PWM同步脉冲信号。此电路结合光电隔离元件TLP521与D触发器MC14538,实现精确的过零时刻检测与信号同步。 3. **缓冲与比较单元电路...
源码链接: https://pan.quark.cn/s/976d0efeb74a 最近重装了Windows10,发现风扇转动异常,查看任务管理器发现系统和压缩内存进程占用CPU达20%-30%,在网上查阅了2天资料,找到了解决方法,如是分享出来,让大家更好的使用Windows10系统。 在Windows 10操作系统中,有时用户会遇到一个令人困扰的问题,即“系统”和“压缩内存”进程占用大量的CPU和内存资源,导致计算机性能下降,甚至风扇高速运转,这可能对用户的日常使用体验造成不小的影响。 这种情况通常与系统的内存管理机制有关,特别是涉及到Windows的内核组件ntoskrnl.exe。 ntoskrnl.exe是Windows操作系统的核心系统文件,它负责管理和调度系统资源,包括内存管理。 在某些情况下,尤其是系统进行自我优化或内存清理时,这个进程可能会占用大量CPU资源。 而“系统”进程则包含了Windows 10内核及一些基本服务,当它与“压缩内存”进程一同高占用,可能意味着系统正在进行内存压缩以释放空间,或者是因为某些后台活动导致了额外的压力。 要解决这个问题,一种可能的方案是禁用内存自检任务,这个任务可能会在系统空闲时触发,导致不必要的CPU和内存负载。 具体步骤如下: 1. 通过搜索栏或控制面板进入“管理工具”。 2. 在管理工具中找到并打开“任务计划程序”。 3. 在任务计划程序库中,导航到“Microsoft” > “Windows” 节点。 4. 在该节点下,你会看到“MemoryDiagnostic”子目录,双击进入。 5. 你会发现有两个与内存诊断相关的任务,通常是“RunFullMemoryDiagnostic”和“RunMemoryDiag...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uncle_ll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值