Sumário do artigo
- 1. Por que estimar tempo de pron?ncia de n?meros?
- 2. O problema, formalizado
- 3. Pol?tica R1 ? a gram?tica do extenso em portugu?s
- 4. Contagem em O(log N) ? onde a matem?tica come?a a brilhar
- 5. Microdura??o por s?laba ? o modelo lognormal
- 6. Pausas pros?dicas ? a parte que d? realismo ? estimativa
- 7. Juntando tudo ? esperan?a, vari?ncia e intervalo de confian?a
- 8. Valida??o ? como ter certeza de que est? certo
- 9. O que o PTEF n?o ?? e isso tamb?m ?importante
- 10. Open Science, na pr?tica
- 11. O que esse projeto representa para o DataDriks
- 12. Pr?ximos passos
- Exemplo em Python
- Exemplo em R
- Como citar
- Links de refer?ncia
TL;DR? O PTEF (Pronunciation-Time Estimation Framework)?um framework probabil?stico que estima o tempo necess?rio para pronunciar sequ?ncias num?ricas em portugu?s brasileiro. Combina gera??o gramatical de texto por extenso, contagem combinat?ria O(log N) de tokens e s?labas, modelo lognormal de microdura??o e pausas pros?dicas estruturadas. Tudo aberto: GitHub, Zenodo (DOI) e implementa??es de refer?ncia em Python e R.
Tem algumas perguntas que parecem inocentes ? at?voc? tentar respond?-las direito. Uma delas ?:
"Quanto tempo demora para um falante brasileiro pronunciar todos os n?meros de 1 a N?"
Parece bobagem. N?o ?. Por tr?s dessa pergunta tem fon?tica, pros?dia, gram?tica de extenso, combinat?ria e estat?stica. Tem decis?o de design em sistemas de TTS (Text-to-Speech), tem acessibilidade, tem lingu?stica forense, tem pesquisa em fala. E tem, principalmente, uma boa desculpa para fazer ci?ncia aberta, reprodut?vel e ?til.
Foi isso que motivou o PTEF ? Pronunciation-Time Estimation Framework: um estudo aberto que re?ne lingu?stica computacional, matem?tica aplicada e engenharia de software num pacote test?vel, documentado e pronto para ser usado, criticado e estendido pela comunidade.
Este artigo ?um passeio pelo PTEF: o porqu?, o como, e os detalhes t?cnicos que fazem a coisa funcionar. Se voc? quiser pular direto para o c?digo, s?o dois cliques: github.com/MagnaSoluto/PTEF. Se quiser a publica??o cient?fica com DOI, est? aqui: zenodo.org/records/17090324.
1. Por que estimar tempo de pron?ncia de n?meros?
Estimar o tempo de fala de um trecho qualquer ?uma necessidade real em v?rios cen?rios:
- TTS / S?ntese de fala: para dimensionar ?udios, encaixar fala em janelas temporais (URA, leitura de e-mails, GPS, assistentes), e ajustar pros?dia sem precisar sintetizar tudo s? para saber a dura??o.
- Acessibilidade: leitores de tela e dispositivos assistivos precisam estimar quanto tempo um conte?do num?rico vai consumir para decidir cortes, atalhos e leituras alternativas.
- Lingu?stica forense: comparar tempos esperados com tempos observados em um material auditado.
- Pesquisa em pros?dia: estudar como conectivos, pausas e estrutura sil?bica afetam a dura??o total.
- Design de produto: estimar o tempo de uma chamada autom?tica que precisa ditar valores, contas, datas, c?digos.
Em todos esses casos voc? n?o quer pagar o custo de chamar um motor TTS real para estimar dura??o. Quer um modelo fechado, r?pido, com incerteza expl?cita. ? exatamente isso que o PTEF entrega.
No PTEF, dura??o n?o ?um n?mero solto. ? uma vari?vel aleat?ria, com esperan?a, vari?ncia e intervalo de confian?a.
2. O problema, formalizado
Dado um inteiro N, considere a leitura, por extenso e em ordem, de todos os n?meros de 1 at?N:
um, dois, tr?s, quatro, cinco, ..., mil e um, ..., dois mil e duzentos e trinta e quatro, ...O tempo total de pron?ncia T(N)?a soma de:
- A dura??o das s?labas pronunciadas.
- A dura??o das pausas pros?dicas (entre conectivos, marcadores como mil/milh?o, e pausas estruturais).
Formalmente:
E[T(N)] = E[T_syllables(N)] + E[T_pauses(N)]
Var[T(N)] = Var[T_syllables(N)] + Var[T_pauses(N)]O desafio interessante ?: como calcular cada componente de forma exata, r?pida e escal?vel, sem iterar de 1 at?N quando N for grande (digamos, bilh?es)?
A resposta passa por tr?s ingredientes: gram?tica, combinat?ria e probabilidade.
3. Pol?tica R1 ? a gram?tica do extenso em portugu?s
A primeira coisa que o PTEF faz ?converter n?meros em palavras seguindo regras est?veis. Essa camada chama-se pol?tica gramatical? atualmente o framework implementa a pol?tica R1, que segue o padr?o do portugu?s brasileiro:
- 1?19: palavras espec?ficas (
um,dois, ...,dezenove). - 20?99: dezena +e+ unidade (
vinte e um,trinta e dois...). - 100?999: centena +e+ resto (
cento e um,duzentos e trinta...). - 1.000?999.999: milhar +e+ resto (
mil e um,dois mil,cinco mil e quinhentos...). - 1.000.000+: milh?o/milh?es +e+ resto (
um milh?o,dois milh?es,tr?s milh?es e quinhentos...).
O conectivo "e" entra em pontos previs?veis (entre dezena e unidade, centena e resto, milhar e resto, milh?o e resto), e isso ?importante porque conectivos viram pausas curtas mais ? frente.
Decis?o consciente: a pol?tica R1 n?o ?"a ?nica forma de falar". ?um padr?o claro, audit?vel e suficientemente representativo para servir de baseline. Outras pol?ticas (R2, R3...) podem ser adicionadas sem reescrever o framework.
4. Contagem em O(log N) ? onde a matem?tica come?a a brilhar
Se voc? quiser saber quantas s?labas existem ao falar de 1 a N, a abordagem ing?nua ?iterar de 1 at?N, gerar o extenso, contar s?labas e somar. Isso funciona para N = 1.000. N?o funciona para N = 10?.
O PTEF resolve isso decompondo a contagem em blocos:
- Bloco base (1?999): contagem direta de todos os tokens e s?labas. Feita uma vez.
- Blocos de milhares: replica??o do bloco base + adi??o do token
"mil". - Blocos de milh?es: replica??o dos blocos anteriores + token
"milh?o"ou"milh?es". - E assim por diante.
Com essa decomposi??o:
- Complexidade de tempo:
O(log N)para contagem de tokens. - Complexidade de espa?o:
O(1)para os acumuladores. - Precis?o: exata? n?o ?aproxima??o, ?a contagem combinat?ria correta.
import ptef result = ptef.estimate(N=1_000_000, policy="R1", B=16, return_ci=True)
print(result["details"]["total_syllables"])A fun??o estimate devolve n?o s? a contagem, mas o tempo esperado, sua vari?ncia e o intervalo de confian?a 95%. Em milissegundos. Para qualquer N razo?vel.
5. Microdura??o por s?laba ? o modelo lognormal
Para transformar n?mero de s?labas em dura??o, o PTEF usa um modelo simples, justific?vel e bem documentado na literatura de fala: a distribui??o lognormal para a dura??o de cada s?laba.
log(T_syllable) ~ Normal(?, ??)Os par?metros padr?o s?o:
- ? ? 0,15? m?dia do log da dura??o.
- ? ? 0,3? desvio padr?o do log da dura??o.
- speaker_effect ? 1,0? multiplicador para acomodar falantes diferentes.
- fatigue_coeff ? 0,0? coeficiente linear de fadiga conforme a sequ?ncia fica longa.
A esperan?a e a vari?ncia da dura??o de uma s?laba ficam:
E[T_syllable] = exp(? + ??/2) ? speaker_effect
Var[T_syllable] = exp(2? + ??) ? (exp(??) ? 1) ? speaker_effect?E a dura??o total esperada para n s?labas, considerando fadiga:
E[T_total] = n ? E[T_syllable] ? (1 + fatigue_coeff ? n)
Var[T_total] = n ? Var[T_syllable]O modelo ?deliberadamente parcimonioso. N?o ?a verdade absoluta sobre fala humana, ?uma aproxima??o ?til, com par?metros que voc? pode reestimar a partir de dados reais. A decis?o de design ?manter o framework simples, transparente e calibr?vel.
6. Pausas pros?dicas ? a parte que d? realismo ? estimativa
Falar n?meros n?o ?uma corrente uniforme de s?labas. Tem pausas. E essas pausas pesam no tempo total.
O PTEF modela tr?s tipos:
- Pausas fracas? entre conectivos
"e". Probabilidade ~0,3, dura??o ~0,1s. - Pausas fortes? ap?s
"mil","milh?o","milh?es". Probabilidade ~0,1, dura??o ~0,3s. - Pausas estruturais? fun??o do tamanho do bloco
B(par?metro), simulando respira??es e quebras pros?dicas. Probabilidade ~0,5, dura??o ~0,2s.
As contagens s?o calculadas combinatorialmente ? voc? sabe exatamente quantos "e", "mil" e "milh?o" aparecem entre 1 e N ? e ent?o transformadas em dura??o esperada:
count_weak = count("e") ? p_weak
count_strong = (count("mil") + count("milh?o") + count("milh?es")) ? p_strong
count_structural = (total_tokens / B ? 1) ? p_structuralEsse ?o tipo de detalhe que faz a diferen?a entre "uma estimativa razo?vel" e "uma estimativa fiel ao comportamento do falante".
7. Juntando tudo ? esperan?a, vari?ncia e intervalo de confian?a
O tempo final ?uma soma de vari?veis aleat?rias e o PTEF entrega tudo de forma expl?cita:
E[T_total] = E[T_syllables] + E[T_pauses]
Var[T_total] = Var[T_syllables] + Var[T_pauses] CI_95% = E[T_total] ? 1,96 ? ?Var[T_total]Ou seja: voc? n?o recebe s? "vai levar tantos segundos". Voc? recebe um intervalo de confian?a calibrado? coisa rara em estimativas de produto.
Exemplo em Python
import ptef result = ptef.estimate(N=1000, policy="R1", B=16, return_ci=True) print(f"Tempo esperado: {result['mean']:.3f} s")
print(f"IC 95%: [{result['ci95']['lower']:.3f}, {result['ci95']['upper']:.3f}] s")
print(f"Total de s?labas: {result['details']['total_syllables']}")Exemplo em R
library(ptef) result <- estimate(N = 1000, policy = "R1", B = 16, return_ci = TRUE) cat("Tempo esperado:", round(result$mean, 3), "s\n")
cat("IC 95%: [", round(result$ci95$lower, 3), ", ", round(result$ci95$upper, 3), "] s\n")A mesma matem?tica, dois ecossistemas. Para quem trabalha com fala, NLP e dados, isso ?mais do que conveni?ncia ? ?portabilidade cient?fica.
8. Valida??o ? como ter certeza de que est? certo
Pode parecer contraintuitivo, mas a parte mais dif?cil de um framework anal?tico n?o ?faz?-lo funcionar para N = 10?. ? garantir que para N pequeno ele bate, s?laba por s?laba, com a contagem direta.
O PTEF faz isso de prop?sito:
- Contagem direta: itera 1 ? N, gera o extenso, conta tokens e s?labas. Lento, mas inequ?voco.
- Contagem r?pida (O(log N)): usa decomposi??o em blocos.
- Cruzamento: para todo
N ? 1000, as duas contagens t?m que ser id?nticas.
Al?m disso h? testes de:
- Consist?ncia temporal? o mesmo
Nsempre devolve o mesmo resultado. - Consist?ncia de l?xico? todo token gerado existe no l?xico do PB.
- Consist?ncia combinat?ria? algoritmo r?pido === contagem direta, em todos os blocos pequenos.
? essa disciplina que separa "um script bacana" de software cient?fico.
9. O que o PTEF n?o ?? e isso tamb?m ?importante
Boa engenharia cient?fica passa por reconhecer limites. O PTEF ?claro sobre o seu escopo atual:
- Pol?tica ?nica: hoje s? R1; R2, R3 etc. est?o no roadmap.
- Idioma ?nico: portugu?s brasileiro. Espanhol, franc?s e ingl?s s?o extens?es plaus?veis, mas n?o est?o implementadas.
- S?labas independentes: o modelo assume independ?ncia, o que ?uma simplifica??o ?til mas n?o absoluta.
- Pausas com probabilidades fixas: ainda n?o h? um modelo contextual de pausa.
- Fadiga linear: simples por design; modelagens mais ricas est?o na lista.
Esses pontos n?o s?o falhas ? s?o escolhas declaradas, com extens?es previstas. ? assim que ci?ncia aberta avan?a.
10. Open Science, na pr?tica
Tudo que o PTEF ?, ?aberto:
- Reposit?rio: github.com/MagnaSoluto/PTEF? c?digo em Python e R, testes, notebooks, lexicons e workflows de CI.
- Publica??o cient?fica: Zenodo ? DOI 10.5281/zenodo.17090324.
- Documenta??o:
docs/index.md,docs/getting-started.md,docs/methodology.mdno pr?prio reposit?rio, mais o PTEF.pdf com a descri??o matem?tica completa. - Licen?a: MIT, para uso pessoal, acad?mico e comercial.
- Submiss?o paralela: o trabalho est? sendo encaminhado para o arXiv (cs.CL), refor?ando o car?ter colaborativo e revis?vel.
E h? tamb?m a vers?o narrativa do estudo no LinkedIn, para quem quer entender a motiva??o antes de mergulhar no c?digo.
Como citar
@software{ptef2025, title = {PTEF: Pronunciation-Time Estimation Framework for Brazilian Portuguese}, author = {Carvalho dos Santos, Adriano}, year = {2025}, doi = {10.5281/zenodo.17090324}, url = {https://github.com/MagnaSoluto/PTEF}
}11. O que esse projeto representa para o DataDriks
O DataDriks ?um espa?o editorial sobre dados com contexto, estrat?gia e pr?tica. O PTEF ?a vers?o cient?fica dessa ideia: pegar um problema concreto, model?-lo com rigor, implement?-lo com clareza, valid?-lo com disciplina e abrir tudo.
Vale como exemplo de tr?s princ?pios que tento aplicar em qualquer iniciativa:
- Defina o problema antes do estimulante? antes de "qual algoritmo usar", o que ?exatamente o que queremos medir.
- Modele com humildade? assuma premissas expl?citas, documente limites, deixe o modelo refut?vel.
- Publique com responsabilidade? c?digo, dados, f?rmulas, testes. Se voc? ?o ?nico que consegue rodar, n?o ?ci?ncia, ?m?gica.
Dados com contexto, estrat?gia e pr?tica ? tamb?m no laborat?rio.
12. Pr?ximos passos
Algumas frentes onde o PTEF deve evoluir:
- Mais pol?ticas gramaticais (R2, R3...): variantes regionais, leituras informais, leituras "r?pidas" e "completas".
- Modelos pros?dicos contextuais: pausa dependente de contexto, n?o s? de marcador.
- Valida??o com TTS reais e datasets de fala etiquetados em portugu?s.
- Pacote
ptefno PyPI/CRAN com versionamento est?vel. - Interface web para demonstra??o interativa do framework.
- Outros idiomas: come?ando pelos vizinhos pr?ximos do portugu?s brasileiro.
Tudo isso passa por colabora??o. Se voc? trabalha com NLP, fala, TTS, lingu?stica computacional, acessibilidade ou ci?ncia de dados aplicada ? linguagem, o convite ?direto: leia, teste, abra um issue, mande um PR.
Links de refer?ncia
- ?? Reposit?rio: github.com/MagnaSoluto/PTEF
- ?? Publica??o Zenodo (DOI): doi.org/10.5281/zenodo.17090324
- ?? Documenta??o t?cnica: github.com/MagnaSoluto/PTEF/tree/main/docs
- ?? Artigo no LinkedIn: linkedin.com/pulse/publica%C3%A7%C3%A3o-cient%C3%ADfica-ptef
Ci?ncia aberta, feita no Brasil, para a comunidade global.
Antes de ir
Este artigo foi útil?
Curta para registrar e compartilhe com quem precisa tomar decisão com dados.