Hoy publico Corrector, un corrector ortográfico y gramatical para español y catalán que funciona completamente offline, escrito en Rust puro y sin ninguna dependencia externa.

Por qué otro corrector

Los correctores más conocidos (LanguageTool, Grammarly, los integrados en Word o Google Docs) dependen de servidores externos, requieren conexión a internet o son software propietario. Corrector va en la dirección opuesta: un binario de ~2 MB que puedes ejecutar en cualquier máquina sin instalar nada más. Solo la biblioteca estándar de Rust.

La idea era construir algo que se pudiera integrar en cualquier pipeline de texto — un editor, un script de CI, un hook de git — sin añadir complejidad ni depender de APIs de terceros.

Qué puede hacer

El motor ejecuta un pipeline de tres fases: primero comprueba la ortografía (búsqueda en diccionario mediante un Trie con complejidad O(m), sugerencias por distancia de Levenshtein y reconocimiento dinámico de formas verbales), luego aplica gramática base (concordancia de artículo-sustantivo, sustantivo-adjetivo, determinante-sustantivo) y finalmente las reglas específicas del idioma.

Para español, hay 28 reglas gramaticales implementadas. Algunos ejemplos:

» corrector "El casa es muy bonito"
  El [La] casa es muy bonito [bonita]

» corrector "Yo no se porque el no vino con migo"
  Yo no se [sé] porque [por qué] el [él] no vino con migo [conmigo]

» corrector "Pienso de que tu deberías ir con el"
  Pienso ~~de~~ que tu [tú] deberías ir con el [él]

» corrector "Habían muchas personas que no sabian que hacer"
  Habían [Había] muchas personas que no sabian [sabían] que [qué] hacer

» corrector "Si tendría dinero viajaría por el mundo"
  Si tendría [tuviera] dinero viajaría por el mundo

Las correcciones van desde concordancia de género y número hasta dequeísmo, laísmo, pleonasmos (subir arriba), condicionales irreales (si tendría), participios irregulares (he escribidohe escrito), haber impersonal (habían personas) y comas vocativas (Hola JuanHola, Juan).

El conjugador dinámico

Una de las piezas más interesantes es el reconocimiento automático de formas verbales. A partir del infinitivo, el motor genera todas las conjugaciones posibles:

  • Verbos regulares: todas las formas de -ar, -er, -ir
  • Irregulares: ser, estar, ir, haber, tener, hacer, poder, querer, decir, saber, venir, poner y más
  • Cambio de raíz: ~130 verbos con alternancia vocálica (e→ie, o→ue, e→i)
  • Prefijos: 22 prefijos reconocidos (des-, re-, pre-, contra-, sobre-…), así que reintroducir o desconfinar se aceptan automáticamente
  • Enclíticos: dármelo se descompone en dar + me + lo

Esto significa que al añadir un solo verbo regular al diccionario, todas sus conjugaciones se reconocen sin necesidad de listarlas.

Catalán

Corrector también incluye soporte ortográfico para catalán con un diccionario de ~874.000 formas léxicas. Gestiona particularidades como el punt volat (ela geminada: col·laborar) y las elisiones. Por ahora es solo ortografía — las reglas gramaticales llegarán más adelante.

» corrector --lang ca "L'home va anar a l'escola"

Arquitectura extensible

El diseño se basa en un trait Language que permite añadir nuevos idiomas sin modificar el motor central:

pub trait Language {
    fn code(&self) -> &str;
    fn configure_dictionary(&self, trie: &mut Trie);
    fn build_verb_recognizer(&self, trie: &Trie) -> Option<Box<dyn VerbFormRecognizer>>;
    fn apply_language_specific_corrections(&self, tokens: &mut Vec<Token>, ...);
    fn word_internal_chars(&self) -> &'static [char];
}

Cada idioma define su propio pipeline de correcciones específicas mientras comparte la infraestructura común de diccionario, ortografía y gramática base.

Números

Diccionario español ~280.000 entradas
Diccionario catalán ~874.000 formas
Nombres propios ~69.000
Plurales derivados ~55.000 (sin entradas explícitas)
Reglas gramaticales 28 (español)
Tests automatizados ~1.975
Dependencias externas 0

Uso

git clone https://github.com/danieljose/corrector.git
cd corrector
cargo build --release

# Texto directo
./target/release/corrector "El casa es muy bonito"

# Desde archivo
./target/release/corrector -i entrada.txt -o salida.txt

# Catalán
./target/release/corrector --lang ca "L'home va anar a l'escola"

El código está bajo licencia MIT / Apache-2.0. Los diccionarios tienen sus propias licencias (LGPL/CC-BY-SA), detalladas en el repositorio.


Código fuente en GitHub. Hecho con Rust, Claude y Codex.