El corrector ortogràfic de Softcatalà
2003-05-11 13:00:00

11/05/2003 Joan Moratinos, jmo@softcatala.org - http://www.jmoratinos.com/ Presentació Quan fa dos anys la casa Sun va anunciar que havia adquirit el programa StarOffice per fer-lo servir com a base del programa obert OpenOffice, Softcatalà va pensar que era una bona ocasió per tenir una aplicació ofimàtica en català, d’un nivell digne i que pogués competir amb l’omnipresent Office de Microsoft, no disponible en català des de fa moltes versions. S’esperava molt d’OpenOffice, atesa la remarcable qualitat de l’antic StarOffice, d’una banda, i la presència de Sun entre els promotors, de l’altra. A més d’una traducció de qualitat dels programes, s’imposava dotar-los d’un corrector ortogràfic de català. OpenOffice, com a programari lliure, permetia sense restriccions la incorporació de correctors ortogràfics, i a més estava documentat com fer-ho (evidentment, això no vol dir que sigui fàcil, només que és possible). Primer contacte Tan aviat com va estar disponible la primera versió beta d’OpenOffice (s’ha de dir que el corrector és comú a tota la suite, però per a les proves el més adequat és el trac­tament de texts), es varen fer les primeres proves. Es va veure que el corrector “oficial” d’OpenOffice, anomenat MySpell, usava una llista de regles de generació de paraules i una llista d’arrels semblants a les del conegut ispell (el corrector més usat en l’entorn Linux) i per tant es varen crear fitxers a partir dels fitxers d’ispell disponi­bles, creats fa uns anys per Ignasi Labastida, a partir d’una llista de paraules de Joan Dolç. Després d’“enganar” MySpell fent-li creure que les paraules estaven en anglès es va engegar el tractament de texts. Resultat: programa penjat. Es va veure que la culpa era dels accents i altres caràcters de codi major o igual que 128. Com a conse­qüència, calia modificar el motor de correcció (es tracta d’un “component”, un pro­grama autònom que es cridat pel programa principal quan cal; en principi, és comú a totes les llengües, encara que està “ingènuament” orientat a l’anglès). Després d’aquesta prova inicial es tenia una primera “versió” del corrector, amb totes les errades i mancances que hom pugui imaginar-se (per exemple, marcava com errònies les paraules amb accent), però així i tot era un començament. Programa de feina Es varen fer les següents consideracions generals, que es varen anar refinant mentre s’anava treballant: a) Calia corregir el motor perquè acceptàs caràcters accentuats i similars. Quan es va poder modificar el motor varen sorgir noves idees de millora, que es varen aplicar posteriorment. b) S’havia de provar el corrector “arreglat” amb les paraules de l’ispell de Labastida i, eventualment, completar els fitxers. Al capdavall, es va veure que era més efectiu començar la feina des de zero. c) Es va decidir no fer feina per a cap corrector ortogràfic concret, sinó amb un format que permetés generar fitxers per a diversos correctors (com a conseqüència, OpenOf­fice, AbiWord i ispell comparteixen ara la mateixa llista de regles i d’arrels). No volíem fer el corrector “d’OpenOffice”, sinó el de Softcatalà. d) Es volia un corrector que fos exhaustiu, que reconegués, com a mínim, totes les paraules del diccionari normatiu i totes les variants geogràfiques de la llengua. Al final, es va enriquir encara amb una multitud de noms propis (com ara els topònims dels Països Catalans, antropònims i topònims d’arreu del món) i paraules comunes absents dels diccionaris generals (com gentilicis, catalans i estrangers). e) S’havia de mirar la qualitat de les propostes. El corrector, a més de detectar les errades, proposa correccions. Idealment, hauria de proposar en primer lloc les paraules més versemblants per substituir la incorrecta. Detallarem aquests punts, un darrere l’altre, però cal fer notar que tots es varen tractar en paral·lel. Canvis al motor de correcció Les errades que es varen detectar al motor es varen comunicar a la llista de correu dedicada a aquesta qüestió. Igualment, es varen sotmetre a la consideració del respon­sable del projecte les solucions proposades i altres millores. S’ha de dir que algunes varen ser acceptades (i passaren a la versió “general”) i altres no. Per tant, la nostra versió és diferent de l’altra, encara que perfectament compatible. Si algú fa servir el nostre corrector per a una altra llengua, li ha de funcionar sense problema. Igualment, els nostres fitxers de regles i arrels funcionen amb la versió “general” del motor, encara que amb unes prestacions menors. Primer de tot es va arreglar el problema dels caràcters accentuats. Es tractava d’una errada familiar a tots els programadors de C: es feien servir caràcters “amb signe” per accedir a taules de caràcters. Aquest error és típic dels programes pensats només per a l’anglès, i n’anunciava d’altres que aviat es varen trobar. Quan el corrector va començar a considerar correctes paraules com “mà”, es va veure que fallava amb “CEL·LA”. La raó era que considerava, erròniament el punt volat com una lletra minúscula, i considerava la paraula incorrecta perquè tenia una combinació “il·legal” de majúscules i minúscules (això va fer veure que hi ha lletres que no són ni “majúscules” ni “minúscules”, cosa que no estava prevista al motor ori­ginal). La solució va ser introduir al motor la idea de “caràcters neutres”, que no s’han de tenir en compte per determinar si un mot està en majúscules, minúscules, etc. A més del punt volat, són “neutres” el guionet i l’apòstrof. El guionet no es considerava part de les paraules, com tampoc el punt volat. El problema amb el guionet feia que no es poguessin detectar moltes errades de combina­ció de verbs i pronoms febles. La qüestió del punt volat encara era més greu. Es va modificar una part de l’OpenOffice per adaptar-lo a les necessitats del català. Un altre canvi important del motor va ser necessari per corregir una greu man­cança. Es donava per bo “l’institut”, però no “l’Institut”, que es considerava una paraula amb una majúscula a la tercera posició. La versió inicial del motor només havia previst que una paraula pogués estar en tres combinacions de majúscules i minúscules: tot minúscules, tot majúscules i majúscula inicial. Això es va haver d’ampliar per al cas dels apòstrofs, de manera que la lletra que precedeix l’apòstrof i la que el segueix poden ser tant minúscules com majúscules, independentment una de l’altra. Encara que aquest problema afecta altres llengües diferents del català (com ara el francès), no es va afegir a la versió “general” del corrector. De moment, és una característica exclusiva de la versió catalana d’OpenOffice. Altres modificacions profundes del motor afecten la generació d’alternatives i es descriuran més endavant. Regles i llistes de paraules El corrector funciona comparant la paraula que ha escrit l’usuari amb una llista que es guarda dins la memòria de l’ordinador. Per tal de fer la llista manejable, es “comprimeix” la llista completa fent servir “regles”, que generen moltes paraules a partir d’un nombre més reduït d’arrels. Això és especialment útil i necessari en el cas dels paradigmes verbals (i encara s’agreuja si s’afegeixen les combinacions de pro­noms febles). Per exemple, a partir de “cantava” es poden generar totes les formes del paradigma (“cant/canto/cante, cantes, canta...”). El nostre corrector té al voltant de 900 regles i 160.000 arrels (aquestes no corresponen a paraules diferents; per exem­ple, els verbs, encara que siguin perfectament regulars, tenen diverses entrades per reconèixer les formes combinades amb pronoms febles). La forma tradicional de fer els fitxers de regles i arrels és partir d’una llista de paraules exhaustiva i deixar que un programa generi aquells fitxers. En el nostre cas, es va optar per fer la feina “a mà”, un sistema més laboriós però més eficient. Es va crear un fitxer per generar les regles, amb més informació de la que s’ha fet servir de moment per al corrector, però que segurament es farà servir per a altres projectes. Igualment, es va fer un fitxer per a les arrels. A partir dels dos fitxers i emprant un programa bastant complex fet en Perl, i orientat absolutament al català, es varen gene­rar els fitxers que formen part de la versió catalana de l’OpenOffice, a més dels fitxers per a ispell i AbiWord. Unes de les dades que no s’han emprat dels fitxers originals fa referència al dialecte a què pertany una determinada forma (la majoria pertanyen al conjunt de la llengua). Es va considerar d’entrada fer diverses versions del corrector, que es diferen­ciarien només en els paradigmes verbals. Amb això es guanyaria en qualitat. Per exemple, la paraula “telefon” (sense accent) es considera correcta perquè és la primera persona sense desinència del present d’indicatiu del verb “telefonar”. Molts d’usuaris preferirien, tanmateix, que el corrector consideràs “telefon” com un error, per “telèfon”. La idea de les diferents versions del corrector es va abandonar a la vista dels malentesos que provocava, encara que segurament mereixeria ser reconsiderada (per exemple, fent que el corrector es pogués ajustar a les preferències de cadascú seleccio­nant una sèrie d’opcions). A més de les paraules del diccionari normatiu es varen incloure a la llista els noms de municipis i comarques dels Països Catalans, gentilicis de les Illes Balears, topònims i gentilicis d’arreu del món, noms propis de persona i abreviatures. Per defi­nició, la llista no és completa i es té el propòsit d’ampliar-la en pròximes versions del corrector (per exemple amb més gentilicis, cognoms comuns, marques comercials, etc.). Propostes de correcció Una de les tasques d’un corrector ortogràfic és fer propostes per a una paraula incor­recta, a requesta de l’usuari. MySpell ha heretat d’ispell el sistema de cercar alternati­ves. A partir de la paraula que ha teclejat l’usuari es generen variacions i es proposen com alternatives si resulten ser paraules correctes. Les variacions es calculen suposant que s’ha comès un dels següents errors: l’ordre de dues lletres està invertit, s’ha omès una lletra, s’ha posat una lletra de més, s’ha posat una lletra per comptes d’una altra o s’han aferrat dues paraules. S’han resolt dues de les mancances més evidents del sistema de generació de propostes, amb una ampliació del motor de correcció. D’una banda, els suggeriments es generaven “cegament”, sense tenir en compte si eren més o menys probables. Per exemple, les propostes per a “aixo” (sense accent) no incloïen “això”, no perquè no es generàs, sinó perquè la llista no era prou llarga. D’una altra banda, davant una paraula equivocada com “colaborar” no es proposava “col·laborar”, ja que està a una “distància” de més d’una lletra. La solució als dos problemes va ser crear una llista de suggeriments “preferits”, que permet crear parells de substitució (per exemple, prova “l·l” quan trobis “l”, o bé prova “ò” quan trobis “o”), que poden ser de mides dife­rents. Aquestes propostes es generen abans que les altres i per tant es mostren al cap­damunt de la llista. Aquesta idea es va suggerir també al responsable del projecte i va coincidir amb una de semblant procedent d’Hongria. Al final, la nostra versió imple­menta aquesta prestació diferentment de la versió “general” (que la inclourà en una pròxima versió del corrector) però per al fitxer es va adoptar el format que es va pro­posar des d’Hongria, amb la qual cosa els nostres fitxers continuen essent compatibles amb els de la versió “general”. Es varen haver de fer altres correccions menors a la part del motor encarregada de generar els suggeriments. Hi havia problemes amb els punts suspensius i amb els noms propis escrits completament en majúscules. El futur El corrector no està tancat però és perfectament funcional. Alguns aspectes demanen una revisió a fons, i tots es poden refinar. Una llista de desitjos podria incloure: esten­dre el corrector a altres productes (per exemple, AbiWord, que fa servir la mateixa llista de paraules però té un motor més limitat, Office de Microsoft, QuarkXpress, Eudora...), fer el corrector configurable, poder afegir paraules al diccionari personal de manera intel·ligent (per exemple, afegir paradigmes verbals sencers; escrivint aquest document amb OpenOffice, he dit al corrector que consideràs correcte el nom del pro­grama, però continua marcant-me com incorrecte “l’OpenOffice”), s’han d’afegir més paraules, es pot modificar la manera de generar suggeriments. Més informació Projecte [Ispell/MySpell en català](http://www.softcatala.org/projectes/myspell/) Web personal de [Joan Moratinos](http://www.jmoratinos.com/)