Door Roland de Bonth
Het is haast niet meer voor te stellen, maar er is een tijd geweest dat studenten Nederlands geen gebruik konden maken van het internet. Om een antwoord te krijgen op een onderzoeksvraag – ik startte in 1985 – was ik aangewezen op een nauwelijks te overziene hoeveelheid papieren boeken, verspreid over de instituutsbibliotheek en de universiteitsbibliotheek. Bij het vak heuristiek maakte ik via het onder oudere neerlandici welbekende Vermakelijk bibliografisch ganzenbord van A.M.J. van Buuren, W.P. Gerritsen en A.N. Paasman kennis met de naslagwerken en hulpmiddelen die noodzakelijk waren voor het schrijven van werkstukken en scripties, zoals de Bibliografie van de Nederlandse Taal- en Literatuurwetenschap (BNTL), het Nieuw Nederlandsch Biografisch Woordenboek (NNBW) en Brinkman’s Cumulatieve Catalogus van Boeken.
De afgelopen 34 jaar is het internet enorm uitgedijd. Dat is zowel een zegen als een vloek. Een zegen omdat je nu waar dan ook met één eenvoudige zoekopdracht in Delpher honderden jaargangen van tientallen kranten kunt doornemen. Uitgebreider, sneller én nauwkeuriger dan uren lang aan een tafel in de leeszaal van de universiteitsbibliotheek vergeelde ingebonden jaargangen van een beperkt aantal dagbladen doornemen en de resultaten met een pen overschrijven op papier. Als je tenminste iets gevonden had, want die garantie had je van tevoren niet.
De uitgebreidheid van het huidige internet kan helaas ook een vloek zijn. Soms levert een zoekopdracht zoveel treffers op dat het onbegonnen werk is, alle resultaten één voor één te bestuderen. Het is daarom de kunst ervoor te zorgen dat een zoekopdracht zodanig geformuleerd is dat die uitsluitend oplevert waarnaar je op zoek bent. Hoewel het zeker zijn charme heeft om een speld in een hooiberg te vinden – die ene brief in het 10 meter lange familiearchief van een beroemde taalkundige –, het is nog plezieriger om voortdurend spelden te vinden.
Voor de onderzoeker die veelvuldig gebruik maakt van het internet, loont het echt de moeite zich te verdiepen in opzoekvaardigheden. Deze tijdsinvesting betaalt zich later dubbel en dwars terug, net als met tien vingers blind leren typen. Het neemt enige tijd in beslag, maar je profiteert er de rest van je leven van.
Een boek dat eigenlijk verplichte kost zou moeten zijn in het middelbaar en hoger onderwijs is het boekje Slimmer zoeken op internet. De snelste route naar de beste informatie van de bekende taalhistoricus en journalist Ewoud Sanders. In nog geen honderd pagina’s laat Sanders je nadenken over zoekstrategieën, de betrouwbaarheid van gevonden informatie en leert hij hoe je daarbij filters kunt toepassen. Ook maakt hij je wegwijs in sneltoetsen, toetscombinaties en zoekcommando’s voor Google (Scholar), Bing, databanken en Twitter, die niet alleen in het boek zelf maar ook op twee handzame, los bijgeleverde kaarten zijn afgedrukt. Ideaal voor naast je toetsenbord!
Mocht je dit boek als je broekzak kennen of gewoonweg geïnteresseerd zijn in om met zo min mogelijk moeite zoveel mogelijk resultaat te boeken, dan kan deze bijdrage van nut zijn. Na een beknopte uitleg zal ik namelijk aan de hand van een paar concrete voorbeelden laten zien dat een basale kennis van zogeheten reguliere expressies bijzonder handig is voor onderzoekers in de humaniora.
Reguliere expressies
Wat is een reguliere expressie, vaak ook kortweg regex genoemd? Wikipedia definieert het begrip als ‘’een manier om patronen te beschrijven waardoor een computer softwarematig tekst kan herkennen.’’ Omdat het object van studie voor lezers van Neerlandistiek doorgaans taaluitingen in het Nederlands, beperk ik me hier tot het zoeken naar patronen in woorden en zinnen. Niet langer handmatig grote hoeveelheden tekst doorzoeken, maar dit arbeidsintensieve zoekwerk uit handen geven aan een razendsnelle computer. Zo blijft er meer kostbare tijd over om de gevonden onderzoeksresultaten in een artikel of boek voor het voetlicht te brengen.
Waar het bij reguliere expressies – en eigenlijk bij elk onderzoek (waarbij teksten centraal staan) – om draait, is de vraag waar je precies naar op zoek bent. Kun je deze vraag beantwoorden, dan ben je ook in staat om daar een bijpassende reguliere expressie voor te bedenken. En het mooie is dat er niet slechts één manier is om de gewenste informatie te vinden. Er leiden inderdaad verschillende wegen naar Rome: met verschillende zoekopdrachten kun je toch tot hetzelfde resultaat komen.
Een snelcursus
De meest eenvoudige reguliere expressie is een tekenreeks die exact specificeert naar welk patroon je op zoek bent. Wil je nagaan hoe vaak naamwoord in een tekst voorkomt, dan is de volgende reguliere expressie daarvoor geschikt:
naamwoord
Als het programma of de webapplicatie die je gebruikt, het zoeken met reguliere expressies ondersteunt, geef je namelijk de opdracht te zoeken naar tekenreeksen die exact voldoen aan het patroon ‘naamwoord’.
Het zal duidelijk zijn dat in deze vorm reguliere expressies weinig voordelen bieden. Echt interessant worden ze dan ook pas door het inzetten van metatekens. In het onderstaande overzicht presenteer ik een – lang niet uitputtende – lijst van vaak gehanteerde metatekens. Veel van de voorbeelden hebben betrekking op bekende 17e– en 18e-eeuwse schrijvers: vanwege de grote variatie in de spelling van eigennamen kunnen reguliere expressies het zoeken naar naamsvarianten aanzienlijk vergemakkelijken.
Indeling naar types
Jokerteken en kwantoren
. | Komt overeen met elk willekeurig alfanumeriek teken (letter of cijfer) | Hu.decoper komt overeen met Huidecoper, Huydecoper |
? | Geeft aan dat het voorgaande teken nul of één keer mag voorkomen | Huygh?ens komt overeen met Huygens, Huyghens |
+ | Geeft aan dat het voorgaande teken één of meer keer mag voorkomen | Wolf+ komt overeen met Wolf en Wolff |
* | Geeft aan dat het voorgaande teken nul of meer keer mag voorkomen | Bred*ero komt overeen met Bredero en Breero |
| | Maakt een OF-overeenkomst | Vondel|Vos komt overeen met Vondel of Vos |
{n} | Betekent n keer het voorafgaande teken (of de voorafgaande groep); {1,3} komt overeen met 1 tot en met 3 keer, {3} komt exact overeen met 3, {3,} komt overeen met drie of meer | regex=(Z|z){3,} levert – in het WNT – z.z.z, Zzz en Zzzzzzzzz op
|
Ankers
^ | Geeft de naastliggende tekens aan het begin van een tekenreeks aan | ^Huy komt overeen met Huy, Huydecoper en Huygens |
$ | Geeft de naastliggende tekens aan het eind van een tekenreeks aan | oper$ komt overeen met Huydecoper en Paardekooper |
^…$ | Geeft elke tekenreeks weer van de tekens tussen de ankers | ^Cats$ |
Groepen
() | Komt overeen met de tekens tussen haken in exacte volgorde op een willekeurige plaats (begin, midden of einde) in een tekenreeks | St(oc|ock|ok)ske komt overeen met Stocske, Stockske en Stokske |
[] | Komt overeen met de tekens tussen haken in elke volgorde op een willekeurige plaats (begin, midden of einde) in een tekenreeks | ^[bdjln]ood$ levert bood, dood, jood, lood en nood op |
[^…] | Sluit de tekens tussen de vierkante haken uit in elke volgorde op een willekeurige plaats (begin, midden of einde) in een tekenreeks | ^[^bd]ood$ levert jood, lood en nood op, maar niet bood en dood |
– | Maakt een reeks van tekens tussen haken die wordt gevonden op een willekeurige plaats in een tekenreeks; [A-Z] komt overeen met een willekeurige hoofdletter, [a-z] met een willekeurige kleine letter, [0-9] met een willekeurig getal | ^c[a-z][a-z][a-z]$ levert alle vierletterwoorden op die beginnen met een c en worden gevolgd door drie willekeurige andere letters, zoals cent en code |
Escape
\ | Geeft aan dat het volgende naastliggende teken letterlijk moet worden geïnterpreteerd en niet als een metateken voor reguliere expressies | P\.C\. Hooft komt overeen met P.C. Hooft |
Merk op dat het vraagteken (?) en de asterisk (*) in reguliere expressie niet dezelfde betekenis hebben als bij zoekopdrachten in andere databases of zoekmachines. Zo staat het vraagteken (?) op de online site van het Groene Boekje – woordenlijst.org – voor exact één willekeurig karakter, terwijl de (*) aangeeft dat op die plaats geen, één of meer willekeurige karakters mogen voorkomen.
Na deze korte uitleg van de verschillende metatekens die gebruikt worden in reguliere expressies, zal ik nu aan de hand van enkele voorbeelden duidelijk maken waarom kennis hiervan bijzonder handig is bij het verrichten van neerlandistisch e-onderzoek. (Een kort en handig overzicht van het gebruik van reguliere expressies voor neerlandistisch onderzoek is te vinden op etymologiebank.nl door in het tabblad ‘’zoeken’’ te klikken op de link reguliere expressies.)
Voorbeeld 1 spellingvarianten
Een van de problemen waarmee een onderzoeker van historische teksten zich geconfronteerd ziet, zijn de talloze spellingvarianten van een woord. Wil iemand de vorm- of betekenisontwikkeling van een woord of begrip nagaan, dan levert zoeken op de hedendaagse spelling lang niet altijd de gewenste gegevens op.
Laten we als voorbeeld het zelfstandig naamwoord wereld nemen. In het Woordenboek der Nederlandsche Taal (WNT) lezen we bij het lemma wereld dat er behalve deze vorm ook een variant met een a bestaat: wareld. Als het hierbij was gebleven dan zouden twee zoekopdrachten – één naar wereld en één naar wareld – volstaan. Maar één blik op de citaten die vermeld worden bij het lemma wereld, maakt al snel duidelijk dat dit ijdele hoop is. We treffen onder andere de volgende vormen aan – meervoudsvormen en verbogen vormen zijn gemakshalve buiten beschouwing gelaten.
- waereld
- weereld
- weerelt
- weerlyt
- wereld
- wereldt
- werelt
Om al deze vormen met één zoekopdracht te vinden, bieden reguliere expressies uitkomst. Bij het formuleren van de zoekvraag moeten we eerst goed kijken naar de gemeenschappelijke kenmerken van deze woorden. We zien dan dat alle deze spellingen beginnen met een w, gevolgd worden door één of meer keer de klinker a of e, door de medeklinkers r en l, en eindigen op een d en/of t, waarbij tussen de r en l en tussen de d en t soms wel en soms geen letter staat. Een reguliere expressie zou er als volgt uit kunnen zien:
^wa?e+re?ly?(d|t)t?$
Dit oogt ingewikkeld, maar als je stap voor stap nagaat welke opties er zijn voor een volgende positie in het woord, wordt de structuur vanzelf helder:
- ^ markeert het begin van de tekenset, in dit geval een woord
- w de letter w
- a? de letter a mag nul of één keer voorkomen (vanwege waereld)
- e+ de letter e mag één of meer keer voorkomen (vanwege wereld en weereld)
- r de letter r
- e? de letter e mag nul of één keer voorkomen (vanwege weerlyt)
- l de letter l
- y? de letter y mag nul of één keer voorkomen (vanwege weerlyt)
- (d|t) de letter d of de letter t (vanwege wereld en werelt)
- t? de letter t mag nul of één keer voorkomen (vanwege wereldt)
- $ markeert het einde van de tekenreeks
Wie meer visueel ingesteld is, kan zijn zoekopdracht invoeren op een website als regexper.com waar een diagram duidelijk laat zien wat de reguliere expressie doet. Start links en volg de zwarte lijn naar het eind van de lijn. Hiermee zijn in elk geval alle zeven vermelde varianten van wereld te vinden.
Gebeurt het toch dat de zoekopdracht niet de gewenste resultaten oplevert, dan zijn er op internet websites te vinden als regex101.com waarin een reguliere expressie getest kan worden op een zelf ingevoerde tekenreeks. Bij de zoekopdracht wordt precies uitgelegd waarnaar elk metateken uit de reguliere expressie zoekt en welke van de ingevoerde woorden overeenkomen.
Voorbeeld 2 voltooid deelwoord van zwakke werkwoorden
Het Woordenboek der Nederlandsche Taal zal voornamelijk gebruikt worden om de betekenis van woorden op te zoeken, wat uiteraard ook de primaire functie ervan is. Maar met het beschikbaar komen van de online webapplicatie biedt het WNT ook mogelijkheden voor andersoortig onderzoek.
Binnen elk zoekveld van het WNT kan namelijk met reguliere expressies worden gezocht. Belangrijk is het wel om op te merken dat elke reguliere expressie voorafgegaan dient te worden door regex=. In de helpfunctie wordt een mooi voorbeeld van een zoekopdracht gegeven: voer je bij het zoekveld ‘Origineel trefwoord’ het volgende commando in
regex=^ge.*[fkschp]t$
dan levert dat 585 treffers op. De bijbehorende visuele weergave (van regexper.com) wil ik u niet onthouden:
Combineer je deze reguliere expressie met de keuze Bnw. (bijvoeglijk naamwoord) bij ‘Woordsoort’, dan worden de resultaten beperkt tot een overzicht van 134 treffers met vormen als gebanvloekt, gebeeldwerkt, gebeft, gebekt en geblokt. Zo heb je dus op eenvoudige wijze alle voltooid deelwoorden gevonden die als adjectief een eigen lemma hebben gekregen.
Voorbeeld 3 verkleinwoorden
Ook voor morfologisch onderzoek kunnen reguliere expressies een handig hulpmiddel zijn. Stel dat je geïnteresseerd bent in de etymologie van verkleinwoorden die eindigen op de vormvariant –pje van het diminutiefsuffix –je. In de etymologiebank kun je bij het zoeken dan de volgende reguliere expressie invoeren:
^.*pje$
Bij het doornemen van de resultatenlijst blijkt dat die zoekopdracht niet verfijnd genoeg is, want we vinden dan ook woorden als aapje, badlapje en klopje. Wordt aan de reguliere expressie vóór de p ook nog de letter m toegevoegd – dus ^.*mpje$ — dan krijgen we wél uitsluitend verkleinvormen met het suffix –pje.
Heb je belangstelling voor álle verkleinwoorden op –mpje die voorkomen in het WNT, dan kun je ervoor kiezen deze reguliere expressie – voorafgegaan door “regex=” – in te voeren in het zoekveld ‘Origineel trefwoord’ (regex= ^.*mpje$). Dat levert 134 treffers op.
Nederlab
Net als op etymologiebank.nl en in de webapplicatie van het WNT is het ook mogelijk reguliere expressies in te zetten bij zoekacties in Nederlab. In het zoekformulier ‘geavanceerd zoeken’ is het mogelijk om bij Corpus Query Language te kiezen voor regex, zoals in de onderstaande schermafbeelding te zien is.
Nederlab biedt talloze mogelijkheden om te zoeken in de beschikbare collecties en dat kan bij een eerste kennismaking overweldigend overkomen. Om de beginnende gebruiker wegwijs te maken in de vele mogelijke toepassingen is er een uitgebreid aandacht besteed aan het tabblad ‘help’. Hierin is niet alleen een uitgebreide ‘hulp bij het zoeken’ te vinden, maar ook zes – lange, Engelstalige tutorials met verschillende hypothetische onderzoeksvragen en een lijst met frequently asked questions.
Tot slot
Uiteraard is het in het bestek van deze bijdrage niet mogelijk een complete cursus reguliere expressies te verzorgen – een prettige online tutorial met eenvoudige, interactieve oefeningen is regexone. Maar daar was het mij niet om te doen. Aan de hand van een aantal voorbeelden met enkele veel voorkomende metatekens heb ik laten zien dat reguliere expressies niet alleen iets zijn waar computernerds of databasespecialisten gebruik van maken, maar dat juist ook onderzoekers uit de humaniora – met enige oefening – de vruchten kunnen plukken van reguliere expressies.
Joop Kiefte (@LaPingvino) zegt
Ik vind het heerlijk om een bericht als dit te lezen. Voorheen zijn computerwetenschappelijke en anderswetenschappelijke kruisbestuivingen ook zeer succesvol geweest, zoals bij het Human Genome Project, dat een paar jaar vóór planning zijn mijlstonen op deze manier heeft weten te bereiken. Ik hoop dat we door dit soort benaderingen vormen van “computerfobie” weten te verminderen en toegang tot handige “hackerstrucjes” meer gemeengoed kunnen maken.
DirkJan zegt
Heel nuttig deze concrete tips om verfijnd te zoeken binnen bepaalde databases. Maar niet iedere database heeft de beschikking over een uitgebreide set aan zoekfuncties. Kennelijk wel het aangehaalde WNT en de Etymologiebank. Maar die zijn ook redelijk handig en snel te bereiken via Google, omdat al hun data door de immense zoekmachine zijn opgenomen en geïndexeerd. Voor Google Search kun je echter maar een beperkt aantal zoekexpressies gebruiken, maar daar staat tegenover dat de algoritmes doorgaans al zo slim uit zichzelf zijn dat je met wat handige invoertermen ook een heel eind komt en dan is je zoekstrategie niet alleen beperkt tot een of een paar databases.
(Jammer dat de data van Delpher – en veel andere afgesloten databases – niet ook via Google doorzoekbaar zijn, zoals bijvoorbeeld wel Google Books.)