[index-tts]生成不完整

2025-11-11 320 views
1

比较奇怪,我提供了一段长文本:双侧甲状腺大小,右叶,上下径五十六毫米,左右径十七毫米,前后径十五毫米,峡部三毫米,左叶,上下径五十毫米,左右径十六毫米,前后径十六毫米.双侧甲状腺形态正常,边界清楚,表面光滑,包膜完整,内部回 声增粗欠均匀,CDFI甲状腺内部血流丰富.右 侧甲状腺内见一个低回声,大小约五点六乘五点八乘七点八毫米,位于上极,近背侧,纵横比大于一,内部结构实性,内部未见点状强回声,形态不规则,边界不清,无声晕,后方回声无异常,CDFI,结节内部血流不明显,弹性评分,四分.左侧甲状腺内见一个低回声,大小约四点零乘二点六乘三点五毫米,位于下极近背侧,偏外侧,纵横比大于一,内部结构实性,内部未见点状强回声,形态不规则,边缘毛刺状,无声晕,后方回声无异常,弹性成像,弹性评分,三分,CDFI结节内部血流不明显.左侧甲状腺内另见一个稍低回声,大小约五点二乘六点三乘四点八毫 米,位于中极近背侧,偏内侧,纵横比大于一,内部结构实性,内部未见点状强回声,形态不规则,边界欠清晰,边缘模糊,无声晕,后方回声无异常,CDFI结节内部见点状血流,弹性评分,三分.双侧颈部未见明显异常淋巴结图像。

很多时候生成的语音会在中途断掉

回答

4

一般在哪些地方会断掉?

9

.!?;。!?; 只有以上符号会拆分句子,你这个文本里面只有句号,所以无法拆分,超长的文本生成就会出错。我也遇到了相同的问题。可以参考我的解决方法。在infer.py里面找到def preprocess_text(self, text):,改成下面的内容,实测生成你这段文本完全正确 def preprocess_text(self, text):

chinese_punctuation = ",。!?;:“”‘’()【】《》"
    # english_punctuation = ",.!?;:\"\"''()[]<>"
    #
    # # 创建一个映射字典
    # punctuation_map = str.maketrans(chinese_punctuation, english_punctuation)

    # 使用translate方法替换标点符号
    # return text.translate(punctuation_map)

    #AYE:对文本进行一次预处理,如果超过30个字没有遇到会被self.split_sentences拆分的符号 ,则将遇到的任意标点符号替换为句号,防止超长文本生成出错
    result = []
    count = 0
    # 定义需要重新计数的标点符号
    reset_punctuations = r'[.!?;。!?;]'
    # 定义需要检查计数并可能替换的标点符号
    check_punctuations = r'[^.!?;。!?;\w\s]'

    for char in text:
        if re.match(reset_punctuations, char):
            result.append(char)
            count = 0
        elif re.match(check_punctuations, char):
            if count > 30:
                result.append('.')
                count = 0
            else:
                result.append(char)
                count += 1
        else:
            result.append(char)
            count += 1

    text = ''.join(result)
    return self.normalizer.infer(text)