Sumário do artigo
  1. 1. Por que estimar tempo de pron?ncia de n?meros?
  2. 2. O problema, formalizado
  3. 3. Pol?tica R1 ? a gram?tica do extenso em portugu?s
  4. 4. Contagem em O(log N) ? onde a matem?tica come?a a brilhar
  5. 5. Microdura??o por s?laba ? o modelo lognormal
  6. 6. Pausas pros?dicas ? a parte que d? realismo ? estimativa
  7. 7. Juntando tudo ? esperan?a, vari?ncia e intervalo de confian?a
  8. 8. Valida??o ? como ter certeza de que est? certo
  9. 9. O que o PTEF n?o ?? e isso tamb?m ?importante
  10. 10. Open Science, na pr?tica
  11. 11. O que esse projeto representa para o DataDriks
  12. 12. Pr?ximos passos
  13. Exemplo em Python
  14. Exemplo em R
  15. Como citar
  16. 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:

  1. A dura??o das s?labas pronunciadas.
  2. 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:

  1. Pausas fracas? entre conectivos "e". Probabilidade ~0,3, dura??o ~0,1s.
  2. Pausas fortes? ap?s "mil", "milh?o", "milh?es". Probabilidade ~0,1, dura??o ~0,3s.
  3. 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_structural

Esse ?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:

  1. Contagem direta: itera 1 ? N, gera o extenso, conta tokens e s?labas. Lento, mas inequ?voco.
  2. Contagem r?pida (O(log N)): usa decomposi??o em blocos.
  3. 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 N sempre 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.md no 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:

  1. Defina o problema antes do estimulante? antes de "qual algoritmo usar", o que ?exatamente o que queremos medir.
  2. Modele com humildade? assuma premissas expl?citas, documente limites, deixe o modelo refut?vel.
  3. 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 ptef no 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.


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.

Continue lendo

Artigos relacionados

Ciência de Dados
Da prancheta ao xG na tela: como os dados do futebol evoluíram — e dá para prever os jogos?
9 min
Governança
Agente de IA já está em produção — e o gargalo é o seu dado
12 min
Inteligência Artificial
O Dia em Que os Criadores da IA Pediram Para Frear a Pr?pria IA
22 min