Corrector català amb motor local, auditable i independent de LanguageTool.
Creat i mantingut per Júlia Rosell Saldaña.
Estat del projecte: versió
0.1.2, alfa funcional. ClariCat ja es pot utilitzar com a corrector ortogràfic assistit, però encara no ofereix la profunditat morfològica i sintàctica d’un corrector madur.
ClariCat és un corrector pensat específicament per al català. El seu motor principal funciona localment, no incorpora codi ni regles de LanguageTool i es pot utilitzar des de:
- Chrome i Microsoft Edge;
- Firefox;
- Microsoft Word;
- LibreOffice;
- una API HTTP local;
- la línia d’ordres.
La revisió base combina regles lingüístiques pròpies, un diccionari català de formes flexionades i un recurs lingüístic auxiliar derivat de Fractalis.
Opcionalment, ClariCat pot executar una segona revisió mitjançant un model instal·lat localment a Ollama, com ara Salamandra. Aquesta capa d’IA no és necessària per al funcionament del corrector base i no envia el text a cap API remota de ClariCat.
ClariCat no vol ser només un corrector alternatiu, sinó una base lingüística:
- local per defecte;
- comprensible i auditable;
- modificable;
- modular;
- reutilitzable;
- adaptable a diferents connectors;
- independent de grans serveis remots;
- útil per a altres projectes i comunitats lingüístiques.
L’objectiu és construir una eina funcional que pugui créixer gradualment sense convertir-se en una caixa negra ni dependre obligatòriament d’un model d’IA, d’un servei al núvol o d’una infraestructura externa.
| Component | Estat |
|---|---|
| Motor JavaScript | Funcional i compartit entre Node i navegador |
| Dependències npm | Cap dependència externa en temps d’execució |
| Diccionari català | 991.388 formes úniques carregables offline |
| Recurs lingüístic auxiliar | Exportació funcional derivada de Fractalis |
| Chrome i Edge | Extensió Manifest V3 funcional en mode de desenvolupador |
| Firefox | Complement funcional i paquet preparat per validar o enviar a AMO |
| Microsoft Word | Panell Office.js funcional mitjançant servidor local |
| LibreOffice | Connector OXT mitjançant un endpoint compatible amb LanguageTool |
| API local | API pròpia i endpoint /v2/check |
| Ollama | Capa opcional disponible a navegador, Word i LibreOffice |
| Verificació actual | 31 proves automatitzades i un conjunt inicial de 9 casos d’avaluació |
ClariCat ja és una base funcional i utilitzable. Encara no substitueix en tots els casos un corrector amb anàlisi morfològica i sintàctica profunda.
Les limitacions conegudes es documenten al final d’aquest fitxer.
Des de l’arrel del projecte:
node apps\cli\check.js --dictionary softcatala --text "Aixo conte una erradazz."Per executar les proves:
npm testPer executar el conjunt inicial d’avaluació:
npm run evalPer arrencar el servidor local:
tools\start-claricat-server.cmdEl servidor escolta per defecte a:
http://127.0.0.1:8765
ClariCat incorpora actualment:
- regles pròpies d’ortografia;
- detecció d’accents absents o incorrectes;
- regles d’apostrofació i contraccions;
- detecció inicial de barbarismes i residus castellans;
- suggeriments per a variants pròximes i algunes escriptures fonètiques;
- perfils específics per connector;
- protecció de variables, placeholders, etiquetes, URL, codis i fragments tècnics;
- un diccionari català de formes flexionades;
- un recurs lingüístic auxiliar derivat de Fractalis;
- una API HTTP pròpia;
- un endpoint compatible amb el format bàsic de LanguageTool;
- una capa opcional d’IA local amb Ollama;
- scripts d’instal·lació i empaquetatge per a Windows;
- proves automatitzades del motor, els connectors i l’API.
Els perfils dels connectors prioritzen la correcció ortogràfica. Les recomanacions tipogràfiques o d’estil potencialment sorolloses es mantenen desactivades o separades.
Chrome / Edge / Firefox
|
+-- motor ClariCat dins del complement
| +-- regles pròpies
| +-- diccionari català
| +-- recurs lingüístic auxiliar
| +-- Ollama local opcional
Word / LibreOffice / clients HTTP
|
+-- servidor local 127.0.0.1:8765
+-- motor ClariCat
+-- diccionari català
+-- recurs lingüístic auxiliar
+-- Ollama local opcional
El nucli principal es troba a:
src/core/claricat-core.js
És un mòdul UMD que funciona tant a Node com al navegador.
La interfície del diccionari es troba a:
src/core/simple-dictionary.js
El diccionari implementa una interfície petita basada principalment en:
has
suggest
Els navegadors executen el motor des del service worker del complement.
Microsoft Word i LibreOffice comparteixen el servidor:
apps/server/server.js
Això permet que els dos connectors utilitzin el mateix motor, els mateixos recursos, els mateixos perfils i la mateixa configuració d’Ollama.
- Es detecten i protegeixen els fragments no lingüístics.
- S’apliquen les regles lingüístiques pròpies.
- Es comproven les formes amb el diccionari.
- El recurs lingüístic auxiliar reforça determinats suggeriments.
- El perfil del connector elimina categories massa sorolloses.
- Si Ollama està activat, el model afegeix avisos que no se solapen amb els del motor principal.
Per executar el projecte amb les dades incloses:
- Windows 10 o Windows 11 per als instal·ladors i scripts actuals;
- Node.js 20 o posterior;
- PowerShell 5.1 o posterior;
- Chrome, Edge, Firefox, Microsoft Word o LibreOffice segons el connector.
Per utilitzar la revisió opcional amb IA local:
- Ollama en execució;
- un model instal·lat que entengui prou bé el català.
La configuració inicial proposa:
salamandra
Cal escriure el nom exacte amb què el model aparegui a Ollama.
No cal executar:
npm installClariCat no té dependències npm externes en temps d’execució ni per a les proves actuals.
Les ordres npm run ... són dreceres. També es poden executar directament les ordres equivalents de Node i PowerShell.
Comprovacions inicials:
node --version
npm test
npm run evalPer arrencar el servidor local:
tools\start-claricat-server.cmdAdreces útils:
| Funció | Adreça |
|---|---|
| Estat del motor | http://127.0.0.1:8765/api/status |
| Configuració compartida | http://127.0.0.1:8765/settings |
| Panell de Word | http://127.0.0.1:8765/office/taskpane.html |
La configuració local d’Ollama es desa a:
%LOCALAPPDATA%\ClariCat\settings.json
Per instal·lar l’arrencada automàtica del servidor en iniciar la sessió de Windows:
powershell -ExecutionPolicy Bypass -File tools\install-local-server-autostart.ps1Per retirar-la:
powershell -ExecutionPolicy Bypass -File tools\uninstall-local-server-autostart.ps1node apps\cli\check.js --text "Aisho es dolentu. Retos pendents."node apps\cli\check.js --dictionary softcatala --text "Aquest text conte una erradazz."node apps\cli\check.js --dictionary softcatala --json --file document.txtValors admesos per a --dictionary:
starter
softcatala
softcatala-base
També es pot indicar el camí d’un fitxer de paraules propi.
GET /api/statusRetorna informació sobre:
- la versió;
- l’autoria;
- l’estat del diccionari;
- l’activació del recurs lingüístic auxiliar;
- la configuració d’Ollama.
L’endpoint no exposa les fonts ni l’estructura interna de Fractalis.
POST /api/check
Content-Type: application/jsonExemple:
{
"text": "Aixo es una prova.",
"profile": "office",
"client": "word",
"useOllama": false
}La resposta conté una llista matches amb informació com ara:
- identificador de regla;
- categoria;
- severitat;
- posició;
- context;
- suggeriments;
- referències.
L’objecte stats informa dels recursos que han intervingut en la revisió.
POST /v2/check
Content-Type: application/x-www-form-urlencodedExemple:
language=ca&text=Aquest+text+conte+una+errada.
La resposta conserva l’estructura bàsica esperada pels clients compatibles amb LanguageTool, però el processament és íntegrament de ClariCat.
Endpoints disponibles:
GET /api/settings
POST /api/settings
POST /api/ollama/status
Permeten:
- llegir la configuració compartida;
- desar el model;
- desar l’adreça d’Ollama;
- activar o desactivar Ollama per connector;
- comprovar si Ollama i el model seleccionat estan disponibles.
Per seguretat i privadesa, ClariCat només accepta adreces d’Ollama amb aquests hosts:
127.0.0.1
localhost
::1
- Executa:
npm run package- Descomprimeix:
dist/claricat-browser-chrome-edge.zip
- Obre:
chrome://extensions
o:
edge://extensions
- Activa el mode de desenvolupador.
- Carrega la carpeta descomprimida.
El complement pot revisar:
- una selecció;
- el camp de text actiu;
- el text visible de la pàgina.
Els suggeriments es poden aplicar directament en camps input i textarea.
Per fer proves temporals:
- Obre
about:debugging. - Entra a
This Firefox. - Prem
Load Temporary Add-on. - Selecciona:
dist/claricat-firefox-unpacked/manifest.json
El paquet:
dist/claricat-firefox.zip
està preparat per validar-lo o enviar-lo a Mozilla Add-ons.
Firefox estable necessita una signatura de Mozilla per permetre una instal·lació permanent.
Vegeu:
docs/firefox.md
- Tanca Microsoft Word.
- Executa:
dist\installa-word.cmd
- Accepta l’elevació de permisos si Windows la demana.
- Obre Word.
- Entra a:
Inici > Complements > Avançat > Carpeta compartida > ClariCat
L’instal·lador:
- registra un catàleg local de confiança;
- neteja de manera recuperable la memòria cau antiga;
- comprova que el servidor local estigui actiu.
El panell mostra:
- l’estat del diccionari;
- l’activació del recurs lingüístic auxiliar;
- la configuració d’Ollama.
Ollama s’executa quan es prem Revisa selecció.
Mentre s’escriu, Word manté la revisió ràpida amb el motor de regles, el diccionari i el recurs lingüístic auxiliar.
Office.js carrega office.js des del CDN oficial de Microsoft.
El motor de ClariCat i el text revisat continuen sent locals, però la plataforma del complement de Word no és completament independent d’Internet.
Vegeu:
docs/word.md
- Instal·la:
dist/claricat-libreoffice-connector.oxt
- Reinicia LibreOffice.
- Arrenca el servidor local de ClariCat.
- Obre:
Eines > Opcions > Idiomes i regions > Servidor LanguageTool
- Activa el servidor.
- Introdueix:
http://127.0.0.1:8765/v2
El menú:
Eines > Complements > ClariCat
permet consultar l’estat del sistema i obrir la configuració dels recursos i d’Ollama.
Quan Ollama està activat per a LibreOffice, el servidor conserva durant cinc minuts les revisions repetides del mateix fragment per evitar càrrega innecessària.
Vegeu:
docs/libreoffice.md
Ollama és una segona capa opcional. No és un requisit per al funcionament del corrector base.
Configuració inicial:
Adreça: http://127.0.0.1:11434
Model: salamandra
Activat: no
El prompt demana únicament correccions clares de català normatiu.
ClariCat intenta excloure:
- reescriptures de to;
- canvis purament estilístics;
- recomanacions de concisió;
- modificacions que no corregeixin un error clar.
El model ha de retornar una resposta JSON estructurada.
ClariCat comprova que:
- el fragment original existeixi al text;
- el canvi proposat no sigui idèntic;
- la categoria sigui admesa;
- l’avís no se solapi amb una detecció del motor principal.
Si Ollama no respon, la revisió base continua funcionant.
Vegeu:
docs/ollama.md
Els fitxers necessaris per executar ClariCat i construir els connectors ja estan inclosos dins de data/.
Per tant, una tercera persona pot:
- executar el corrector;
- verificar el motor;
- executar les proves;
- construir els connectors;
- inspeccionar els recursos distribuïts.
No necessita accés als sistemes interns de Fractalis per utilitzar la versió publicada de ClariCat.
Entrada esperada:
third_party/catalan-dict-tools/resultats/lt/diccionari.txt
Regeneració:
npm run import:softcatalaL’importador:
- llegeix la primera columna;
- elimina duplicats;
- ordena les formes amb localització catalana;
- escriu el resultat a:
data/dictionaries/ca-softcatala-forms.txt
El fitxer generat inclou metadades d’origen i llicència.
Per actualitzar la font, cal obtenir:
Softcatala/catalan-dict-tools
i generar:
resultats/lt/diccionari.txt
segons les instruccions del projecte original.
ClariCat incorpora una exportació lingüística mínima preparada per funcionar offline.
Aquesta exportació forma part dels recursos distribuïts amb ClariCat.
No formen part del repositori:
- el projecte complet Fractalis;
- les fonts originals;
- els processos interns de generació;
- les dades internes no exportades;
- l’estructura completa dels recursos d’origen.
Fractalis i els recursos originals són obra de Júlia Rosell Saldaña, que en conserva els drets.
La llicència de ClariCat haurà d’indicar explícitament quins permisos s’apliquen a l’exportació inclosa i quins elements continuen fora del projecte públic.
npm testEquivalent directe:
node --test tests\*.test.jsnpm run evalEquivalent directe:
node tools\evaluate-corpus.jsnpm run packageEquivalent directe:
powershell -ExecutionPolicy Bypass -File tools\package-all.ps1Les proves cobreixen actualment:
- el nucli;
- el diccionari;
- la protecció de placeholders;
- els perfils dels connectors;
- el recurs lingüístic auxiliar;
- la CLI;
- el format de resposta d’Ollama;
- l’API local;
- Microsoft Word;
- la resposta compatible amb LibreOffice.
Les proves d’Ollama utilitzen una resposta simulada i no necessiten cap model instal·lat.
L’ordre:
npm run packagerecrea el directori dist/.
| Fitxer | Contingut o ús |
|---|---|
claricat-browser-chrome-edge.zip |
Extensió per a Chrome i Edge |
claricat-firefox.zip |
Paquet per validar o enviar a AMO |
claricat-firefox-unpacked/ |
Versió per a proves temporals |
claricat-office-word-manifest.xml |
Manifest del complement Office.js |
claricat-office-word-addin.zip |
Word, servidor i recursos |
claricat-libreoffice-connector.oxt |
Connector de LibreOffice |
claricat-offline-runtime.zip |
Servidor complet per a Word, LibreOffice i API |
arrenca-claricat-server.cmd |
Arrencada manual visible |
ensure-claricat-server.cmd |
Arrencada en segon pla quan sigui necessària |
installa-word.cmd |
Instal·lació del catàleg local de Word |
El procés genera els ZIP:
- amb separadors
/; - sense rutes absolutes;
- sense entrades
..; - amb compatibilitat entre Firefox, Office i LibreOffice.
apps/
browser-extension/ interfície, lectura de pàgina i Ollama al navegador
cli/ client de línia d’ordres
libreoffice/ connector OXT i macros visibles
office-addin/ manifest i panell de Word
server/ API HTTP local i compatibilitat /v2
data/
corpus/ conjunt inicial d’avaluació
dictionaries/ diccionaris i metadades
fractalis/ recurs lingüístic auxiliar exportat
docs/ arquitectura, instal·lació, fonts i llicències
src/core/ motor i interfície de diccionari
tests/ proves automatitzades
tools/ importació, avaluació, instal·lació i empaquetatge
dist/ artefactes generats, no fonts mestres
- El motor base del navegador s’executa dins del complement.
- Word i LibreOffice envien el text exclusivament al servidor local de ClariCat.
- El servidor escolta per defecte només a
127.0.0.1. - ClariCat no envia text a LanguageTool.
- ClariCat no envia text a una API remota pròpia.
- Ollama està desactivat per defecte.
- Quan Ollama s’activa, el text es lliura únicament a la instància local configurada.
- Firefox declara els permisos necessaris per a l’ús opcional d’Ollama.
- La configuració es desa localment a l’ordinador.
Els endpoints locals permeten comunicació amb els connectors de navegador, Word i LibreOffice.
Abans d’una distribució estable cal continuar revisant:
- la validació de l’encapçalament
Origin; - la validació de l’encapçalament
Host; - els orígens autoritzats per CORS;
- la protecció dels endpoints que modifiquen la configuració;
- la comunicació entre pàgines web i serveis locals;
- el comportament davant peticions malformades o excessives.
Escoltar només a la interfície local redueix l’exposició, però no substitueix la validació dels clients i orígens autoritzats.
- ClariCat ha estat creat i és mantingut per Júlia Rosell Saldaña.
- ClariCat no incorpora codi ni regles de LanguageTool.
- El nucli i les regles actuals són codi propi del projecte.
Softcatala/catalan-dict-toolsés la font deca-softcatala-forms.txtica-softcatala-base.txt.- La llicència indicada per aquests recursos és
LGPL-2.1-or-later OR GPL-2.0-or-later. - Hunspell és una referència tècnica i un format compatible.
- ClariCat no empaqueta actualment la biblioteca Hunspell dins del runtime.
- Fractalis és un projecte creat per Júlia Rosell Saldaña.
- Els processos interns, les dades originals i els recursos no exportats de Fractalis no formen part del repositori públic de ClariCat.
- IEC, DIEC, GEIEC, UOC, DEIEC i Projecte AINA s’han utilitzat com a fonts de consulta o s’han inventariat per a possibles fases futures.
- No s’han copiat taules normatives ni contingut protegit dins del motor.
La llicència general de ClariCat encara s’ha de fixar en un fitxer:
LICENSE
Abans d’una distribució pública plenament replicable cal:
- seleccionar una llicència explícita per al codi;
- establir la llicència del recurs lingüístic auxiliar inclòs;
- comprovar la compatibilitat amb els paquets de dades;
- conservar les atribucions dels recursos de tercers;
- diferenciar clarament el codi de ClariCat, els recursos distribuïts i les fonts internes de Fractalis.
Mentre no hi hagi una llicència explícita, la presència del codi en un repositori públic no concedeix automàticament permís per modificar-lo o redistribuir-lo.
Vegeu:
docs/llicencies.md
- ClariCat encara no disposa d’un analitzador morfològic i sintàctic complet.
- La concordança profunda encara és limitada.
- Falta un diccionari personal.
- Falta una llista d’elements ignorats sincronitzada entre connectors.
- El recurs derivat de Fractalis és auxiliar i no es considera una autoritat normativa.
- Microsoft Word treballa principalment sobre la selecció.
- El complement de Word mostra els resultats al panell i no substitueix el subratllat natiu de Word.
- LibreOffice depèn de les capacitats del protocol compatible amb LanguageTool i de la versió instal·lada.
- La lectura de webs no pot inspeccionar alguns iframes d’un altre origen.
- La lectura de webs no pot interpretar contingut representat exclusivament en un
canvas. - Alguns components web tancats poden quedar fora de l’abast del complement.
- Firefox estable necessita una signatura de Mozilla.
- Ollama pot ser lent segons el model i el maquinari.
- Els resultats d’un model d’IA local poden ser incorrectes.
- El conjunt d’avaluació encara és petit.
- Els instal·ladors i scripts d’empaquetatge estan centrats actualment en Windows.
- La configuració CORS i els endpoints locals necessiten més revisió abans d’una versió estable.
Les prioritats principals són:
- ampliar el conjunt de regles lingüístiques;
- millorar els suggeriments;
- incorporar més proves i contraexemples;
- ampliar el conjunt d’avaluació;
- reduir falsos positius;
- aprofundir en la morfologia;
- incorporar concordança sintàctica;
- crear perfils dialectals;
- afegir un diccionari personal;
- sincronitzar preferències entre connectors;
- reforçar la seguretat del servidor local;
- millorar la instal·lació;
- signar i distribuir els complements;
- documentar millor la contribució de noves regles.
- Mantén el motor base funcional sense xarxa.
- Mantén Ollama com una capa opcional.
- Afegeix almenys una prova per a cada regla nova.
- Afegeix un contraexemple quan hi hagi risc de fals positiu.
- No incorporis corpus, diccionaris o taules sense una llicència compatible i documentada.
- Protegeix placeholders, variables i fragments tècnics abans d’aplicar el diccionari.
- Prioritza l’ortografia als connectors.
- Mantén les recomanacions d’estil com a funcions opcionals.
- Documenta l’origen de qualsevol recurs extern.
- No confonguis una font de consulta amb una font redistribuïble.
- Conserva l’atribució de l’autoria original als documents, paquets i interfícies del projecte.
- No presentis una bifurcació modificada com una versió oficial mantinguda per l’autora original.
- Arquitectura
- Mode offline i API
- Ollama
- Microsoft Word
- LibreOffice
- Firefox
- Fonts lingüístiques
- Llicències
ClariCat és un prototip funcional amb una base multiplataforma extensa, però continua en desenvolupament.
Pot detectar errors reals i oferir suggeriments útils, però també pot:
- no detectar errors;
- generar falsos positius;
- proposar suggeriments inadequats;
- comportar-se de manera diferent segons el connector;
- dependre de característiques encara experimentals.
No s’ha de considerar encara una autoritat normativa ni una substitució completa d’una revisió humana o professional.
L’objectiu de la fase actual és consolidar una base local, modular, auditable i replicable sobre la qual es pugui continuar construint.
Ut alii vivant — perquè els altres visquin.