Je leest:

Slimme spellingchecker

Slimme spellingchecker

De opdracht voor een spellingchecker is simpel: spoor alle spelfouten in een tekst op, sla geen enkele fout over, maar keur geen goede woorden af. De praktijk is echter weerbarstig. Ook voor de pc is spelling geen eitje.

Spellingcorrectie is een standaardoptie binnen elke tekstverwerker. Iedereen beschouwt het als nuttig of zelfs noodzakelijk bij het schrijven met de computer. Toch zou je de mensen niet graag de kost geven die de spellingcontrole altijd uitschakelen. Blijkbaar valt er, ondanks de lange traditie van spellingcheckers, nog wel het een en ander aan te verbeteren. Wat mag je precies van spellingcontrole verwachten?

De opdracht voor een spellingchecker is simpel: spoor alle spelfouten in een tekst op, sla geen enkele fout over, maar keur geen goede woorden af. Het is daarbij prettig als het programma een suggestie doet voor de verbetering van een gevonden fout. Van Dale en TNO werken samen aan de ontwikkeling van een nieuwe, verbeterde spellingchecker die in februari 2000 op de markt moet komen.

Een goede spellingcorrector mist nauwelijks fouten, maar valt je ook niet voortdurend lastig met valse alarmmeldingen. Klachten over de huidige generatie spellingcheckers zijn vaak terug te voeren op een irritante hoeveelheid valse alarmmeldingen. Je wilt niet telkens op je vingers worden getikt terwijl je niets fout doet. Als we echter een spellingchecker bouwen die weinig fouten overslaat, dan krijgen we haast onvermijdelijk te maken met de ruis van veel onnodige waarschuwingen.

Xylofoon yoghurt

In zijn oervorm is spellingcontrole het vergelijken van de woorden uit een tekst met de woorden uit een ijklijst. Door zo’n vergelijking wordt de tekst “acht been cider dierlijk eenzaamheid feest gatenkaas hart idee jij kolommen lachwekkende mispunt naderen op petjes quote er es thee u vee wee xylofoon yoghurt zet” goedgekeurd, net als “wild u effen wachtte op de doctor”. De geraadpleegde ijklijst moet lang zijn, want dan worden goede woorden niet afgekeurd.

De oplossing lijkt eenvoudig: stop de complete Grote Van Dale erin, en je bent klaar. Helaas is een héél erg lange lijst verre van ideaal, want een typefout in de tekst kan dan overeenkomen met een woord dat gewoon in de ijklijst staat. Bestaande Nederlandse woorden als ‘wort’ (aftreksel van mout, gezoet en gehopt beslag dat gereed is voor de gisting ter bereiding van bier), ‘heeften’ ((m.v.) soort van windas waarmee men de kap van een hooiberg in de hoogte windt) en ‘gelt’ (niet drachtig), zijn waarschijnlijk niet bedoeld in een doorsnee tekst. In dit soort gevallen zou de computer ten minste moeten waarschuwen met: “Let op, dit woord is wel goed, maar bedoelt u niet een ander woord?”

Zelfs een superlange woordenlijst is niet lang genoeg om een foutloze tekst probleemloos goed te keuren: “Toen Erick Mols in zijn eenpersoonssportvliegtuigje over de hoogstamkersenboomgaard richting Amerongen vloog, mijmerde hij over het defecte buitenboordkoelwatersysteem.”

Het Nederlands kent potentieel ‘oneindig’ veel woorden, doordat je steeds nieuwe samenstellingen kunt vormen. Eigennamen vormen een probleem apart. De spellingcorrector moet dus goed rekening houden met woorden die niet in woordenboeken voorkomen, maar die wel degelijk correct zijn.

Suggesties voor spellingscorrecties van de spellingchecker van Word van Office 2000.

Suggesties

Er is nog een onderdeel waarop we de correctieprogrammatuur moeten verbeteren. Als een woord als ‘verdacht’ of ‘fout’ is aangemerkt, wil je graag direct een suggestie krijgen voor het goede woord, en dat blijkt geen sinecure. Het kost niet veel moeite om het onderstaande rijtje te produceren met Word van Office 2000, de meest recente versie van de huidige standaard tekstverwerker voor pc’s.

De problemen bij spellingcorrectie zijn bekend, maar een eventuele oplossing vergt veel van de computer waarop deze software draait. Inmiddels zijn pc’s zo krachtig dat de computerhardware geen knelpunt meer hoeft te zijn. Dat is de reden dat we in een samenwerkingsverband tussen Van Dale en TNO nu onderzoeken hoe we de spellingcorrectie op een hoger niveau kunnen brengen.

Het is niet alleen een onderzoeksproject, het moet ook leiden tot een werkende spellingcorrector die op een moderne pc draait en samenwerkt met tekstverwerkingsprogrammatuur. Deze nieuwe spellingchecker is vooral bedoeld voor professionele gebruikers, die zware eisen stellen aan spellingcontrole.

Samenstellingen

Ook al heeft een spellingcorrector een lange lijst met goedgekeurde woorden, voor het Nederlands is de lijst nooit lang genoeg, vanwege de voortdurende productie van nieuwe samenstellingen. Als je twee zelfstandige naamwoorden aan elkaar plakt, heb je een nieuw woord: ‘voorverkoop’ + ‘adres’ = ‘voorverkoopadres’, ‘rechtsbijstand’ + ‘verzekering’ = ‘rechtsbijstandverzekering’. We moeten de techniek van de spellingcheckers uitbreiden om samenstellingen te herkennen.

Dat werkt met een ontleedprogramma, want met lijsten gaat het niet. Het programma analyseert of een woord is opgebouwd uit twee woorden die in de lijst zijn opgenomen. Voor de gebruiker van de spellingcorrector lijkt het nu alsof de woordenlijst oneindig lang is. De spellingcorrector rekent zo veel minder vaak een goed woord fout.

Veel bestaande spellingcheckers hebben een module voor de analyse van samenstellingen. Deze probeert aan het begin of aan het eind van een binnenkomend woord een zo lang mogelijk woorddeel te vergelijken met de ijklijst van de spellingcorrector. Het deel van het woord dat overblijft, zoekt de spellingchecker ook weer op in de lijst.

Als hij het vindt, rekent hij het te beoordelen woord goed. De techniek heeft een keerzijde, namelijk dat de precisie dreigt af te nemen. Soms schrijft iemand per ongeluk woorden aaneen. De spellingchecker komt deze fout niet meer op het spoor als de module om samenstellingen te herkennen aan staat.

De Van Dale-spellingcorrector probeert dit te ondervangen door te kijken of de delen die achter elkaar zijn gezet redelijkerwijs een samenstelling kúnnen vormen. Hij houdt rekening met de productiviteit van linker- en rechterdelen van samenstellingen en met de woordklasse van samenstellende delen. Zo kunnen voorzetsels en lidwoorden achter elkaar geen samenstelling vormen, dus ‘aande’ mag de corrector niet opvatten als samenstelling van ‘aan’ en ‘de’.

Tussenletters

Een ander probleem bij toepassing van de ontleedtechniek is dat de precisie kan afnemen bij incorrect gebruik van tussenletters. Iemand die ‘blindendarmonderzoek’ intypt, maakt een samenstelling die is opgebouwd uit drie goede woorden. Maar het woord is in deze spelling uiterst onwaarschijnlijk; het zou betekenen: “darmonderzoek voorbehouden aan blinden”. De schrijver bedoelt waarschijnlijk: “onderzoek naar blindedarmen”. Onze spellingcorrector houdt rekening met het feit dat de combinatie ‘blindedarm’ zonder tussen-n wordt geschreven.

De corrector zal melden dat de nieuwe samenstelling ook zonder ‘n’ moet. Ook bij fout geschreven woorden die, uiteraard in hun correcte vorm, wél bekend zijn in de ijklijst, ligt dit gevaar op de loer. Een woord als ‘hoogtenkaart’ komt in deze spelling niet voor in de ijklijst, maar zou door ontleding in ‘hoogten’ + ‘kaart’ ten onrechte worden goedgekeurd, als we geen speciale maatregelen treffen.

De computer kan erachter komen hoe een tussenletter tussen twee samenstellende delen moet worden geschreven, door te kijken naar andere samenstellingen die wel in het woordenboek staan.

Aangezien er veel samenstellingen zijn die beginnen met ‘hoogte’, maar geen enkele met ‘hoogten’, kan de computer weten dat ‘hoogtenkaart’ fout is. Nu zijn er wel een aantal gevallen waarbij beide versies goed zijn. Het woord ‘blinde’ moet in ‘blindedarm’ zonder, maar in ‘blindenstok’ met ‘n’. Aangezien dit verschil in het gebruik van de ‘n’ ligt aan de betekenis van ‘blinde(n)’, is het moeilijk om bij nieuwe combinaties te voorspellen wat de goede variant is. Bij ‘blindenbegeleider’ kan de computer niet zelf beslissen.

De enige oplossing is de gebruiker zoveel mogelijk informatie geven, waarmee die zelf een goed oordeel kan vellen. De computer biedt van elke variant een aantal voorbeelden aan zodat de gebruiker zelf kan bepalen waar zijn woord het dichtst bij komt. Gelukkig zijn er niet heel veel woorddelen die in samenstellingen ambigu zijn, dus de gebruiker hoeft niet vaak zelf te kiezen.

Door slim gebruik van zeer grote woordenlijsten met morfologische informatie (zoals samenstellingsgrenzen), kunnen we het aantal valse alarmmeldingen flink reduceren zonder dat dit ten koste gaat van de precisie van de spellingcorrectie.

Goudrenetten, goudrentje, goedrenet?

Behalve goede woorden kunnen we ook voorspelbare fouten verzamelen in een aparte lijst. Het systeem hoeft bij zo’n fout maar één suggestie aan de gebruiker te geven: de goede. Dat is een grote vooruitgang in vergelijking met de huidige spellingcheckers, die soms de meest ongelofelijke alternatieven voorstellen.

De eerste groep interessante fouten bestaat uit woorden die sinds 1995 een nieuwe spelling hebben. De oude spellingen staan in de spellingcorrector als zodanig gemarkeerd. Als de gebruiker dat wil, kan de corrector ze automatisch vervangen door de nieuwe spelling.

Als uitbreiding van deze categorie nemen we een foute vorm op van alle woorden die een ‘stomme e’ op de samenstellingsgrens hebben: ‘boekebon’, ‘hoogtenmeter’, enzovoort. De tweede groep bevat woorden die berucht zijn vanwege hun moeilijkheid: ‘onmiddelijk’, ‘hopenlijk’, ‘onderscheidelijk’, ‘enigzins’, ‘pijama’ en nog vele andere, zijn frequent gemaakte fouten.

Een ander probleem is het schrijven van een enkele of dubbele medeklinker na een onbeklemtoonde klinker. Hierdoor ontstaat twijfel bij ‘bal(l)ustrade’, ‘satel(l)iet’ en ‘il(l)ustratie’. Daarom worden ‘ballustrade’, ‘sateliet’ en ‘ilustratie’ opgenomen in de foutenlijst.

Ten slotte is er een groep woorden die erg moeilijk te spellen zijn omdat er weinig relatie is tussen spelling en uitspraak: ‘lychee’, ‘lynx’ en ‘consciëntieus’. Omdat bij Van Dale van alle woorden de uitspraak bekend is, mag een gebruiker een woord zo typen als hij of zij het uitspreekt: ‘oberzjine’, ‘oberzjien’ of zelfs ‘eaubergien’, leiden eenduidig tot ‘aubergine’.

Fouten tegen diakritische tekens (tekens die de juiste uitspraak van een letterteken aanduiden) hoeven we niet in lijsten op te nemen. Van elk woord staat een ‘zoekwoord’ in het lexicon, ontdaan van alle accenten, streepjes en trema’s. Dus ‘café’, ‘pêle-mêle’ en ‘hiërarchieën’ staan opgenomen als ‘cafe’, ‘pelemele’ en ‘hierarchieen’. Dat is mogelijk doordat diakritische tekens in het Nederlands nauwelijks ambiguïteit voorkómen; een tegenstelling als ‘officieren’ versus ‘officiëren’ is een grote zeldzaamheid.

Meer fouten in één woord

In één woord kan iemand meer fouten maken. Bij ‘consequent’ kun je twijfelen over de ‘c’ en over ‘qu’. In een foutenlijst zouden we het woord ‘consequent’ dan drie keer moeten opnemen: ‘konsekwent’, ‘konsequent’ en ‘consekwent’. Twee fouten in een woord is beslist niet het maximum, een woord als ‘fysiotherapeutisch’ kan gemakkelijk op vijf plaatsen mis gaan. In ‘aubergine’ wordt de ‘au’ misschien als ‘ou’ geschreven, maar ‘o’ is eveneens denkbaar. Dit geeft aan dat de twijfel zich niet altijd tot twee vormen beperkt.

We willen voorkomen dat de lijst van voorspelbare fouten absurd uitdijt door een combinatorische explosie van mogelijkheden. In plaats van alles uit te schrijven, coderen we op welke manieren de schrijver een letter of groepje letters fout kan schrijven, zoals ‘f[y|i|ie][s|z]io[th|t]erap[eu|ui]t[isch|ies]’. Lees hier: “neem van de door paaltjes ‘|’ gescheiden alternatieven tussen blokhaken steeds de linkse optie om het goede woord te krijgen.” De expressie comprimeert zo 3 × 2 × 2 x 2 × 2 –1 = 47 foute vormen, die alle direct leiden tot de correct gespelde vorm ‘fysiotherapeutisch’.

Fuzzy

Zelfs de meest uitgebreide lijst van foutief gespelde woorden kan niet compleet zijn. Het is mogelijk bepaalde typen fouten te voorspellen, zoals “onmiddelijk”, “hondehok” of “ballustrade”, maar het is niet doenlijk om alle typefouten op te nemen waarbij per ongeluk een letter is verdwenen, vervangen of toegevoegd, of waarbij letters zijn omgewisseld, zoals bij “beshcoeiing”. Het is voor mensen bij dit voorbeeld vrijwel onmiddellijk duidelijk wat er mis gaat, en van de spellingcorrector mogen we ook het enige serieuze alternatief “beschoeiing” als suggestie verwachten.

De computer kan dat met fuzzy matching. Het werkt als volgt: van elk onbekend woord wordt een rij overlappende combinaties van drie letters gemaakt, zogeheten trigrammen. De fout “spelllign” bijvoorbeeld, wordt opgedeeld in de volgende onderdelen: “_sp”, “spe”, “pel”, “ell”, “lll”, “lli”, “lig”, “ign” en “gn_”. Van elk bestaand woord is vooraf berekend uit welke trigrammen het bestaat.

Er zijn inclusief spaties 273 = 19.683 trigrammen mogelijk, dus daarmee zijn woorden sterk te karakteriseren. Het zoeken van het te corrigeren woord “spelllign” verloopt nu in twee stappen: eerst zoekt de computer van elk trigram van “spelllign” de bijbehorende bestaande woorden. Vervolgens zet hij binnen de gevonden verzameling woorden het woord dat de meeste trigrammen gemeenschappelijk heeft bovenaan de lijst.

Zo komt de correctie “spelling” vanzelf bovendrijven. ‘Fuzzy matching’ met trigrammen werkt prima voor lange woorden, maar bij korte woorden wil het nog wel eens misgaan. De trigrammen kunnen korte woorden niet voldoende karakteriseren. Wat gebeurt er bijvoorbeeld met de fout “neit”? Deze fout heeft geen enkele trigram gemeen met het waarschijnlijk bedoelde “niet”, en als schrijver zit je niet te wachten op suggesties als “nest”, “neig” of “neet”.

Daarom is bij korte woorden gekozen om niet naar trigrammen te kijken, maar naar tweeletterige combinaties: ‘bigrammen’. Op deze manier wordt “niet” tenminste in overweging genomen, maar helaas ook de minder relevante suggesties als “neet”, “noot” en “nat”, die alle de bigrammen “_n” en “t_” met “neit” delen.

Om onzinnige suggesties te voorkomen, werken de bi- en trigrammen uitsluitend als een grove, eerste selectie. Het resultaat verwerken we verder in een tweede stap, waarin we de ‘afstand’ tussen het foute woord en de gevonden suggesties bepalen. De spellingchecker biedt woorden met de kleinste afstand als eerste suggestie aan. De afstand tussen twee woorden bepalen we door het aantal handelingen dat nodig is om van het ene woord tot het andere woord te komen.

De mogelijke handelingen zijn het toevoegen, verwijderen of vervangen van één letter of het omwisselen van twee naburige letters. Als elke handeling meetelt, is de afstand tussen “neit” en “noot” twee en tussen “neit”, “niet” en “neet” één. Om te voorkomen dat de corrector in het geval van “neit” als eerste “neet” aanbiedt, sorteert hij woorden met een gelijke afstand op de frequentie waarmee ze voorkomen. De frequentste wint.

Contextafhankelijk

Er zijn ook spellingcheckers die pretenderen fouten op zinsniveau te kunnen opsporen. Ze kijken dan niet alleen naar losse woorden maar gebruiken ook woorden die er omheen staan, de context dus.

Dit is de enige manier om fouten als ‘herkent’ in “Jan heeft Marie herkent” op het spoor te komen. Zowel ‘herkent’ als ‘herkend’ zijn correct gespelde, normale Nederlandse woorden. Alleen echter als je weet dat op de laatste positie van dit zinnetje een voltooid deelwoord hoort en niet een persoonsvorm, weet je dat het woord fout is. Als onderzoeksterrein is contextafhankelijke spellingcontrole buitengewoon interessant, want uiteindelijk kunnen we bepaalde spellingsmoeilijkheden uitsluitend op basis van de context oplossen.

Zo wordt ‘wort’ plotseling acceptabel in een tekst over het brouwen van bier. Met de technieken die we nu kennen, kunnen we computers echter nog niet betrouwbaar genoeg laten bepalen dat een woord fout is; heel vaak is er helemaal niets aan de hand. De Van Dale- spellingcorrector maakt daarom geen gebruik van dit soort technieken.

Onze spellingcorrector overschrijdt de woordgrens wel voor een ander type probleem. Er zijn in het Nederlands versteende uitdrukkingen waarin mensen veel spelfouten maken. Het gaat om verbindingen als ‘te(n?) alle(n?) tijde(n?)’. Er zijn een heleboel manieren waarop je dit fout kan schrijven: ‘ten alle tijde’, te alle tijden’, ten allen tijde’. Wanneer de schrijver hiermee een fout maakt, zal het programma de correctie voorstellen.

Architectuur van de nieuwe Van Dale-spellingcorrector.

Functionaliteit

Als we alle hierboven besproken onderdelen bij elkaar voegen, ontstaat een spellingcorrector die een veel complexere structuur heeft dan de eerste generatie spellingcheckers. Het oorspronkelijke idee van het opzoeken van woorden in lijsten blijft, maar er is inmiddels veel meer functionaliteit.

De ijklijst zelf is sterker gestructureerd. Zo is er een afdeling in het lexicon met gewone, veel voorkomende woorden, een deel met wat zeldzamer woorden, een deel met eigennamen (voor- en achternamen, geografische aanduidingen, enzovoort), een afdeling met foute woorden en woorden in de oude spelling. Woorden die op zich goed zijn gespeld, maar waarmee toch iets aan de hand is (bijvoorbeeld ‘wort’, ‘gelt’ en ‘heeften’), zijn als gevaarvorm gemarkeerd in het lexicon.

Als de spellingchecker een woord vindt in het grote lexicon, dan houdt hij rekening met de positie van het woord in het lexicon. Als er iets bijzonders aan de hand is (het woord is fout of ‘speciaal’), dan wordt dat aan de gebruiker gemeld. Gebruikers kunnen tot op zekere hoogte instellen van welke zaken ze meldingen willen hebben, en welke delen van het lexicon de spellingchecker mag gebruiken. Op deze wijze beïnvloeden ze zelf het spanningsveld tussen de valse alarmmeldingen en het risico fouten over het hoofd te zien.

Een woord dat de corrector niet in het lexicon vindt, geeft hij aan de samenstellingsmodule. Die kan twee dingen concluderen over het woord: het woord is goed; dan hoeft er niets mee te gebeuren; of het is fout geschreven, en dan moet hij de goede schrijfwijze geven. Wanneer de samenstellingsanalyse helemaal niets kan concluderen over het woord, dan gaan we ervan uit dat het woord fout is en moet de corrector suggesties geven. Hiervoor geeft hij het woord door aan de laatste module, de fuzzy matching.

Alle onderdelen bij elkaar leveren een spellingcorrector op die relatief zware eisen aan de computer stelt. Er is meer intern en extern geheugen nodig om alles te verwerken, maar dat is met moderne pc’s steeds minder een probleem. Veeleisende schrijvers krijgen een spellingchecker tot hun beschikking die preciezer dan voorheen doet wat ze willen: fouten vinden zonder voortdurend gezeur.

Nog steeds kan de corrector niet alle fouten vinden zonder valse alarmmeldingen. Daarvoor is een grondige contextanalyse uiteindelijk de enige weg, maar dat is voor de huidige toepassingen nog een brug te ver.

Zie ook:

Dit artikel is een publicatie van Natuurwetenschap & Techniek.
© Natuurwetenschap & Techniek, alle rechten voorbehouden
Dit artikel publiceerde NEMO Kennislink op 01 december 1999

Discussieer mee

0

Vragen, opmerkingen of bijdragen over dit artikel of het onderwerp? Neem deel aan de discussie.

NEMO Kennislink nieuwsbrief
Ontvang elke week onze nieuwsbrief met het laatste nieuws uit de wetenschap.