You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

语音合成列表格式优化:代码输出不符合预期的问题求助

问题分析与解决方案

原代码核心问题

  • 依赖换行符分割列表项,但输入文本中的列表是连续无换行的,导致无法拆分出独立条目。
  • 未处理单词+数字点的连续情况(如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

关键修复说明

  1. 标题分割:用split(":", 1)仅分割一次,避免标题含冒号时逻辑出错。
  2. 单词数字分离:通过正则匹配连续的单词与数字点,插入空格实现分离。
  3. 列表项提取:精准匹配数字. 内容格式的条目,确保只提取有效列表项。
  4. 格式统一:将数字点后的任意空格替换为单个空格,保证输出格式一致。
  5. 条目限制:通过items[:3]直接保留前3条建议。

内容的提问来源于stack exchange,提问作者Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 03:35:26