NyarchAssistant 语音合成功能优化:处理特殊符号的技术方案
问题背景
NyarchAssistant 是一款基于语音交互的智能助手应用。在最新版本开发过程中,用户反馈语音合成(TTS)功能会朗读出不需要的符号内容,主要包括两类特殊符号:
- Emoji表情符号:如😊、👍等
- Nerd Font符号:一种常用于终端和开发环境的特殊字体符号集
这些符号在视觉显示时能增强用户体验,但通过语音朗读出来反而会影响理解,如TTS引擎可能会将"👍"读作"thumbs up sign"等冗长描述。
技术解决方案
开发团队针对这一问题实施了以下优化措施:
1. 文本预处理过滤
在文本送入TTS引擎前,增加了预处理环节,通过正则表达式匹配并移除以下内容:
- 所有标准Unicode Emoji字符
- 常见的格式化标记(如action等强调标记)
- Nerd Font专用符号
2. 动态替换机制
对于需要保留视觉显示但不需要朗读的场景,实现了动态替换机制:
- 保留原始文本中的符号用于界面显示
- 生成一份净化后的副本专门用于TTS朗读
3. 可配置选项
虽然当前版本默认启用了符号过滤,但保留了扩展性,未来可添加配置选项让用户自行选择:
- 完全禁用符号过滤
- 选择性过滤(如仅过滤Emoji或仅过滤Nerd Font)
实现细节
核心过滤逻辑基于Unicode字符集特性实现:
# 示例代码逻辑
def sanitize_for_tts(text):
# 移除Emoji
text = re.sub(r'[\U0001F600-\U0001F64F]', '', text)
# 移除Nerd Font符号
text = re.sub(r'[\uE000-\uF8FF]', '', text)
# 移除格式化标记
text = re.sub(r'\*.*?\*', '', text)
return text
用户影响
这一改进使得:
- 语音输出更加干净专业,不再朗读无关符号
- 视觉显示保持不变,不影响原有用户体验
- 特别适合终端开发者使用Nerd Font的场景
未来优化方向
- 增加符号过滤的白名单机制
- 支持用户自定义替换规则
- 针对不同语言优化符号处理逻辑
该优化已包含在NyarchAssistant 0.9b及后续版本中,用户升级后即可体验更流畅的语音交互。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考