parler-tts-expresso-PTBR / helpers /text_normalizer.py
Ticoliro's picture
Upload 36 files
51cf162 verified
import re
import unicodedata
from num2words import num2words
class BrazilianPortugueseTextNormalizer:
def __init__(self):
self.number_re = re.compile(r'[0-9]+')
self.language = "pt-br"
self.voice_descriptions = {
"francisca": {
"pt-br": "Uma voz feminina madura e acolhedora com sotaque brasileiro neutro, falando de forma clara e profissional",
"en": "A mature and welcoming female voice with neutral Brazilian accent, speaking clearly and professionally"
}
}
def normalize(self, text):
# Converter números para texto
text = self.number_re.sub(lambda m: num2words(int(m.group()), lang='pt-br'), text)
# Normalizar acentos
text = unicodedata.normalize('NFKC', text)
# Remover pontuação desnecessária mantendo apenas . , ? !
text = re.sub(r'[^\w\s.,!?]', '', text)
# Processar descrições de voz específicas
for voice_name, description in self.voice_descriptions.items():
if voice_name.lower() in text.lower():
return description.get(self.language)
return text
def set_language(self, lang_code):
"""Define o idioma para geração de voz (pt-br ou en)"""
if lang_code not in ["pt-br", "en"]:
raise ValueError("Idioma não suportado. Use 'pt-br' ou 'en'")
self.language = lang_code
def get_voice_description(self, voice_name):
"""Retorna a descrição padrão para uma voz específica no idioma configurado"""
voice_info = self.voice_descriptions.get(voice_name.lower())
if voice_info:
return voice_info.get(self.language)
return None