Communitygithub.com

regex-vs-llm-texto-estructurado

Marco de decisión para elegir entre expresiones regulares y LLM al analizar texto estructurado: comienza con regex, añade LLM solo para casos límite de baja confianza.

¿Qué es regex-vs-llm-texto-estructurado?

Este skill proporciona un marco práctico para analizar texto estructurado (cuestionarios, formularios, facturas, documentos) combinando expresiones regulares (regex) con llamadas a modelos de lenguaje (LLM). La idea central es que las expresiones regulares pueden manejar entre el 95% y el 98% de los casos de forma económica y determinista, reservando las costosas llamadas a LLM solo para los casos límite que quedan fuera. El skill detalla una arquitectura en varias etapas: un analizador regex extrae la estructura, un limpiador elimina ruido, un puntuador de confianza identifica automáticamente las extracciones problemáticas y, opcionalmente, un validador LLM corrige solo esos elementos de baja confianza. Incluye implementaciones en Python con ejemplos de código, métricas reales de producción (98% de éxito con regex, ahorro del 95% frente a usar LLM para todo) y buenas prácticas como empezar siempre con regex, usar el modelo LLM más barato para validación y registrar métricas para monitorizar la salud del pipeline. Es especialmente útil para desarrolladores que trabajan con texto estructurado con patrones repetitivos y necesitan optimizar costes sin sacrificar precisión.

Compatible con✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/affaan-m/everything-claude-code/tree/main/skills/regex-vs-llm-structured-text

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Regex vs LLM para análisis de texto estructurado

Un marco práctico de decisión para analizar texto estructurado (cuestionarios, formularios, facturas, documentos). La idea clave: las expresiones regulares manejan el 95-98% de los casos de forma económica y determinista. Reserva las costosas llamadas a LLM solo para los casos límite restantes.

Cuándo activarlo

  • Analizar texto estructurado con patrones repetitivos (preguntas, formularios, tablas)
  • Decidir entre regex y LLM para extracción de texto
  • Construir pipelines híbridos que combinen ambos enfoques
  • Optimizar la relación coste/precisión en procesamiento de texto

Marco de decisión

¿El formato del texto es consistente y repetitivo?
├── Sí (>90% sigue un patrón) → Comienza con Regex
│   ├── Regex maneja el 95%+ → Hecho, no necesita LLM
│   └── Regex maneja <95% → Añade LLM solo para casos límite
└── No (texto libre, muy variable) → Usa LLM directamente

Patrón de arquitectura

Texto fuente
    │
    ▼
[Analizador Regex] ─── Extrae estructura (95-98% de precisión)
    │
    ▼
[Limpiador de texto] ─── Elimina ruido (marcadores, números de página, artefactos)
    │
    ▼
[Puntuador de confianza] ─── Marca extracciones de baja confianza
    │
    ├── Alta confianza (≥0.95) → Salida directa
    │
    └── Baja confianza (<0.95) → [Validador LLM] → Salida

Implementación

1. Analizador Regex (Maneja la mayoría)

import re
from dataclasses import dataclass

@dataclass(frozen=True)
class ItemAnalizado:
    id: str
    texto: str
    opciones: tuple[str, ...]
    respuesta: str
    confianza: float = 1.0

def analizar_texto_estructurado(contenido: str) -> list[ItemAnalizado]:
    """Analiza texto estructurado usando patrones regex."""
    patron = re.compile(
        r"(?P<id>\d+)\.\s*(?P<texto>.+?)\n"
        r"(?P<opciones>(?:[A-D]\..+?\n)+)"
        r"Respuesta:\s*(?P<respuesta>[A-D])",
        re.MULTILINE | re.DOTALL,
    )
    items = []
    for coincidencia in patron.finditer(contenido):
        opciones = tuple(
            c.strip() for c in re.findall(r"[A-D]\.\s*(.+)", coincidencia.group("opciones"))
        )
        items.append(ItemAnalizado(
            id=coincidencia.group("id"),
            texto=coincidencia.group("texto").strip(),
            opciones=opciones,
            respuesta=coincidencia.group("respuesta"),
        ))
    return items

2. Puntuación de confianza

Marca los elementos que pueden necesitar revisión del LLM:

@dataclass(frozen=True)
class IndicadorConfianza:
    item_id: str
    puntuacion: float
    razones: tuple[str, ...]

def puntuar_confianza(item: ItemAnalizado) -> IndicadorConfianza:
    """Puntúa la confianza de la extracción y marca problemas."""
    razones = []
    puntuacion = 1.0

    if len(item.opciones) < 3:
        razones.append("pocas_opciones")
        puntuacion -= 0.3

    if not item.respuesta:
        razones.append("falta_respuesta")
        puntuacion -= 0.5

    if len(item.texto) < 10:
        razones.append("texto_corto")
        puntuacion -= 0.2

    return IndicadorConfianza(
        item_id=item.id,
        puntuacion=max(0.0, puntuacion),
        razones=tuple(razones),
    )

def identificar_baja_confianza(
    items: list[ItemAnalizado],
    umbral: float = 0.95,
) -> list[IndicadorConfianza]:
    """Devuelve los elementos por debajo del umbral de confianza."""
    indicadores = [puntuar_confianza(item) for item in items]
    return [i for i in indicadores if i.puntuacion < umbral]

3. Validador LLM (Solo casos límite)

def validar_con_llm(
    item: ItemAnalizado,
    texto_original: str,
    cliente,
) -> ItemAnalizado:
    """Usa LLM para corregir extracciones de baja confianza."""
    respuesta = cliente.messages.create(
        model="claude-haiku-4-5-20251001",  # Modelo más barato para validación
        max_tokens=500,
        messages=[{
            "role": "user",
            "content": (
                f"Extrae la pregunta, las opciones y la respuesta de este texto.\n\n"
                f"Texto: {texto_original}\n\n"
                f"Extracción actual: {item}\n\n"
                f"Devuelve el JSON corregido si es necesario, o 'CORRECTO' si es exacto."
            ),
        }],
    )
    # Analiza la respuesta del LLM y devuelve el elemento corregido...
    return item_corregido

4. Pipeline híbrido

def procesar_documento(
    contenido: str,
    *,
    cliente_llm=None,
    umbral_confianza: float = 0.95,
) -> list[ItemAnalizado]:
    """Pipeline completo: regex -> comprobación de confianza -> LLM para casos límite."""
    # Paso 1: Extracción con regex (maneja el 95-98%)
    items = analizar_texto_estructurado(contenido)

    # Paso 2: Puntuación de confianza
    baja_confianza = identificar_baja_confianza(items, umbral_confianza)

    if not baja_confianza or cliente_llm is None:
        return items

    # Paso 3: Validación con LLM (solo para elementos marcados)
    ids_baja_conf = {i.item_id for i in baja_confianza}
    resultado = []
    for item in items:
        if item.id in ids_baja_conf:
            resultado.append(validar_con_llm(item, contenido, cliente_llm))
        else:
            resultado.append(item)

    return resultado

Métricas del mundo real

De un pipeline de análisis de cuestionarios en producción (410 elementos):

MétricaValor
Tasa de éxito de regex98.0%
Elementos de baja confianza8 (2.0%)
Llamadas a LLM necesarias~5
Ahorro de costes frente a usar solo LLM~95%
Cobertura de pruebas93%

Buenas prácticas

  • Comienza con regex: incluso una regex imperfecta te da una línea base para mejorar
  • Usa puntuación de confianza para identificar programáticamente qué necesita ayuda del LLM
  • Usa el LLM más barato para la validación (los modelos tipo Haiku son suficientes)
  • Nunca mutar los elementos analizados: devuelve nuevas instancias en los pasos de limpieza/validación
  • TDD funciona bien para analizadores: escribe pruebas para patrones conocidos primero, luego para casos límite
  • Registra métricas (tasa de éxito de regex, número de llamadas al LLM) para monitorizar la salud del pipeline

Antipatrones a evitar

  • Enviar todo el texto a un LLM cuando regex maneja más del 95% de los casos (caro y lento)
  • Usar regex para texto libre y muy variable (el LLM es mejor aquí)
  • Saltarse la puntuación de confianza esperando que regex "simplemente funcione"
  • Mutar objetos analizados durante los pasos de limpieza/validación
  • No probar casos límite (entradas mal formadas, campos faltantes, problemas de codificación)

Cuándo usarlo

  • Análisis de preguntas de exámenes/cuestionarios
  • Extracción de datos de formularios
  • Procesamiento de facturas/recibos
  • Análisis de estructura de documentos (encabezados, secciones, tablas)
  • Cualquier texto estructurado con patrones repetitivos donde el coste importe

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

accessibility

Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA. Use when building or auditing UI that must meet WCAG 2.2 Level AA, or when reviewing a change for keyboard, contrast, or screen-reader support.

affaan-m/claude-api

Anthropic Claude API patterns for Python and TypeScript. Covers Messages API, streaming, tool use, vision, extended thinking, batches, prompt caching, and Claude Agent SDK. Use when building applications with the Claude API or Anthropic SDKs.

affaan-m/everything-claude-code

End-to-end marketing campaign planning and execution. Covers audience research, positioning, campaign angle definition, landing page copy, email sequences, social posts, ad copy, short-form video scripts, and content calendars. Use as the orchestration layer for multi-channel product launches. Use when planning or executing a multi-channel product launch, or producing landing page, email, social, or ad copy.

affaan-m/everything-claude-code

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/everything-claude-code-conventions

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/frontend-design

Create distinctive, production-grade frontend interfaces with high design quality. Use when the user asks to build web components, pages, or applications and the visual direction matters as much as the code quality.

affaan-m/gget

gget CLI and Python workflow for quick genomic database queries, sequence lookup, BLAST-style searches, enrichment checks, and reproducible bioinformatics evidence logs.

affaan-m/literature-review

Systematic literature-review workflow for academic, biomedical, technical, and scientific topics, including search planning, source screening, synthesis, citation checks, and evidence logging.

affaan-m/motion-ui

Production-ready UI motion system for React/Next.js. Use when implementing animations, transitions, or motion patterns.

affaan-m/project-guidelines-example

Example project-specific skill template based on a real production application.

affaan-m/pubmed-database

Direct PubMed and NCBI E-utilities search workflows for biomedical literature, MeSH queries, PMID lookup, citation retrieval, and API-backed literature monitoring.

affaan-m/scholar-evaluation

Structured scholarly-work evaluation for papers, proposals, literature reviews, methods sections, evidence quality, citation support, and research-writing feedback.

affaan-m/uspto-database

USPTO patent and trademark data workflow for official record lookup, PatentSearch queries, TSDR checks, assignment data, and reproducible IP research logs.

agent-architecture-audit

Full-stack diagnostic for agent and LLM applications. Audits the 12-layer agent stack for wrapper regression, memory pollution, tool discipline failures, hidden repair loops, and rendering corruption. Produces severity-ranked findings with code-first fixes. Essential for developers building agent applications, autonomous loops, or any LLM-powered feature. Use when an agent or LLM feature misbehaves and the failing layer is unknown, or before shipping an agent stack.

agent-eval

Head-to-head comparison of coding agents (Claude Code, Aider, Codex, etc.) on custom tasks with pass rate, cost, time, and consistency metrics. Use when choosing between coding agents, or when a change to an agent setup needs measured pass rate, cost, and time rather than an impression.

agent-harness-construction

Design and optimize AI agent action spaces, tool definitions, and observation formatting for higher completion rates. Use when defining or revising an agent

agentic-engineering

Operate as an agentic engineer using eval-first execution, decomposition, and cost-aware model routing. Use when planning or executing engineering work that agents will carry out end to end.

agentic-os

Build persistent multi-agent operating systems on Claude Code. Covers kernel architecture, specialist agents, slash commands, file-based memory, scheduled automation, and state management without external databases. Use when building a persistent multi-agent system on Claude Code with its own memory, commands, and scheduling.

agent-introspection-debugging

Structured self-debugging workflow for AI agent failures using capture, diagnosis, contained recovery, and introspection reports. Use when an agent run fails and you need a reproducible diagnosis instead of a retry.

agent-payment-x402

Add x402 payment execution to AI agents with per-task budgets, spending controls, and non-custodial wallets. Supports Base through agentwallet-sdk and X Layer through OKX Payments / OKX Agent Payments Protocol. Use when an agent must pay for something itself and needs per-task budgets, spending controls, and a non-custodial wallet.

Skills relacionados