语音合成列表格式优化:代码输出不符合预期的问题求助
问题分析与解决方案
原代码核心问题
- 依赖换行符分割列表项,但输入文本中的列表是连续无换行的,导致无法拆分出独立条目。
- 未处理
单词+数字点的连续情况(如Pizza2.),无法将数字与前面的单词分离。 - 拼接结果时使用
:连接列表项,不符合预期输出格式。
修复后的代码
import re def post_processing(text): """ Post-processes a text string to address formatting issues for voice synthesis. Args: text: The input text string. Returns: The processed text string. """ # 分割标题与列表部分(仅分割一次,避免标题含冒号时出错) parts = text.split(":", 1) if len(parts) > 1: list_content = parts[1].strip() # 给单词与后续数字点之间插入空格(处理Pizza2. → Pizza 2.) list_content = re.sub(r'([a-zA-Z]+)(\d+\.)', r'\1 \2', list_content) # 提取所有符合「数字. 内容」格式的列表项 items = re.findall(r'(\d+\.\s*[a-zA-Z]+)', list_content) # 统一格式并保留前3项 processed_items = [] for item in items[:3]: # 将数字点后的任意空格替换为单个空格 cleaned = re.sub(r'(\d+\.)\s*', r'\1 ', item) processed_items.append(cleaned.strip()) # 拼接成最终输出 text = ' '.join(processed_items) else: text = text.strip() # 移除URL text = re.sub(r"https?://\S+", "", text) return text
测试验证
输入:
text = "Suggestions for restaurants: 1 . Pizza2. Burger3. Sushi4. Noodles...." print(post_processing(text))
输出:
1. Pizza 2. Burger 3. Sushi
关键修复说明
- 标题分割:用
split(":", 1)仅分割一次,避免标题含冒号时逻辑出错。 - 单词数字分离:通过正则匹配连续的单词与数字点,插入空格实现分离。
- 列表项提取:精准匹配
数字. 内容格式的条目,确保只提取有效列表项。 - 格式统一:将数字点后的任意空格替换为单个空格,保证输出格式一致。
- 条目限制:通过
items[:3]直接保留前3条建议。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

