Leesbaar omdat de computer het zegt
Hoe leesbaar zijn Nederlandstalige juridische teksten? Deze vraag behandelde Arnoud Engelfriet zaterdag op zijn blog. Natuurlijk kan men daar leuke discussies over houden, maar het is natuurlijk veel leuker om een onafhankelijke computer te laten beslissen.
Hij vond een wiskundige formule, de Flesch Reading Ease test, maar nog geen implementatie voor de Nederlandse taal. Hij had wel de Nederlandse coëfficiënten voor deze formule.
De formule is simpel gebaseerd op het aantal zinnen, het aantal woorden en het aantal lettergrepen in een tekst. Probleem was echter: de eerste twee zijn nog wel redelijk eenvoudig te tellen, maar het laatste een stuk moeilijker. Ik heb hiermee aan de slag gegaan en het is mij gelukt om dit implementeren.
Het resultaat is hier te bezichtigen. U kunt hiermee zelf teksten laten doorrekenen op leesbaarheid. Het is niet beperkt tot juridische teksten. Gezakt voor het examen Nederlands? Misschien ligt hier het wiskundige bewijs dat het examen gewoon te moeilijk was.
Uiteraard wordt de tekst alleen eenvoudig bekeken en bijvoorbeeld niet moeilijkheid van de gebruikte woorden of de correctheid van de grammatica en spelling. Vooral met de spelling kan flink worden valsgespeeld: het los schrijven van samenstellingen bijvoorbeeld kan een gunstigere uitslag van de formule geven maar verslechtert in werkelijkheid juist de leesbaarheid. Ook het schrijven van bijzinnen als aparte zinnen, een populaire fout tegenwoordig, mag niet. Maar verhoogt wel de uitkomst van de formule. Wat ik zojuist deed was dus valsspelerij.
Het werkt in principe door gewoon karakter voor karakter door de invoer heen te lopen. Vooraf zijn twee booleaanse variabelen ingesteld die aangeven of de lezer nu in een zin respectievelijk in een woord zit. Binnen de lus wordt eerst gekeken of het einde van een zin is bereikt, daarna of het einde van een woord is bereikt en ten slotte of op deze plek een klank begint. Mijn algoritme kijkt dus naar het aantal klanken binnen een tekst en stelt vervolgens het aantal lettergrepen hieraan gelijk. De mogelijke klanken in het Nederlands zijn vooraf gedefinieerd in de broncode. Er wordt begonnen met het proberen te herkennen van klanken op aflopende volgorde van het aantal letters per klank. Zodra een klank is herkend, worden beide booleaanse variabelen op waar ingesteld zodra het woord en de zin zijn geteld, weer op onwaar. Als een klank is gevonden, springt de lezer over de klank heen, zo niet springt de lezer één teken verder.
Voorafgaand aan de vergelijking met de lijst klanken worden eerst alle accenten verwijderd, aangezien die de vergelijking verstoren. Trema's worden echter alleen verwijderd als ze op het eerste karakter van de mogelijke klank worden aangetroffen. Dit heeft tot gevolg dat een klank wel met een trema kan beginnen, maar niet een trema verderop in zijn karakters mag hebben. Op deze manier wordt ook het aantal lettergrepen in een woord met een trema correct geteld.
Tot slot verdient alleen het herkennen van het einde van een zin nog bijzondere aandacht. De eerste gedachte is de zin te laten eindigen zodra een punt, uitroepteken, vraagteken, puntkomma of dubbele punt wordt gezien, maar veel documenten op het Internet bevatten nu eenmaal webadressen en daarin komen dezelfde leestekens voor. Ik heb in mijn algoritme daarom de eis ingebouwd dat deze leestekens alleen worden meegenomen indien ze gevolgd worden door witruimte. Ook regelovergangen worden in mijn algoritme herkend als het einde van een zin.