Dividimos el texto con una regex que imita la pre-tokenización BPE (Byte-Pair Encoding) de los LLM modernos: contracciones, secuencias de letras, dígitos, símbolos y espacios son segmentos independientes. Los caracteres latinos ASCII se agregan y convierten a ~4 chars por token (regla de OpenAI). Dígitos: ~3 por token. Letras acentuadas, cirílico, árabe y otros scripts no-latinos: ~1,5 chars por token. Ideogramas CJK y japonés/coreano: ~1 token por carácter. Los espacios simples antes de palabras se absorben (como en BPE); solo espacios múltiples o saltos de línea cuentan como token extra. El resultado es una estimación genérica representativa de cualquier modelo moderno, ya que sus tokenizadores difieren menos de ~10% en texto típico.