Geotaggen van overheidsbekendmakingen

Bekendmakingen

'The Hitchhikers Guide to the Galaxy' begint met de onverwachte sloop van het huis van de hoofdpersoon Arthur Dent omdat hij de gemeentelijke bekendmaking van een wegenaanleg heeft gemist. Tegelijkertijd blijken de aardbewoners een bekendmaking van ruimtevolk de 'Vogons' over het hoofd te hebben gezien waarin een nieuwe intergalactische rondweg wordt aangekondigd. Helaas moet hiervoor de gehele aarde worden geruimd. Arthur weet gelukkig net op tijd weg te komen door met een ruimteschip mee te liften.

In Nederland werden zulke aankondigingen tot een jaar of 20 terug in een glazen vitrine aan het gemeente- of provinciehuis opgehangen en afgedrukt in het plaatselijke sufferdje. Sommige vooruitstrevende overheden publiceerden de aankondigen ook op hun eigen websites, elk op een eigen manier met wisselende nauwkeurigheid en continuïteit. Maar sinds 2011 is er in de wet vastgelegd dat alle bekendmakingen ook elektronisch moeten worden gepubliceerd.

Nu worden die elektronische bekendmakingen van Nederlandse overheden centraal door het Ministerie van Binnenlandse Zaken gepubliceerd via overheid.nl. Denk hierbij bijvoorbeeld aan bekendmakingen over bouwvergunningen, het kappen van bomen, verkeersbesluiten, COVID19-maatregelen van de veiligheidsregio's, water- en dijkvergunningen van de waterschappen, natuur-ontheffingen van de provincies, enz. Het gaat in de praktijk om zo'n 1500 tot 3000 bekendmakingen per werkdag.

Plaatsaanduidingen en coördinaten

De meeste bekendmakingen hebben betrekking op geografische locatie(s). Het kan daarbij gaan om de plek van 1 boom of het adres van een gebouw (punt) of om een wegvak of een hele straat (lijn) of om een hele gemeente of provincie (vlak). Die plaatsaanduidingen worden door de opsteller van de bekendmaking in de tekst opgenomen en optioneel ook handmatig in de metadata voorzien van coördinaten (m.b.v. kaart-software). Deze coördinaten worden bijvoorbeeld gebruikt door de attenderingsservice. Via deze service kun je automatisch per email worden geattendeerd op bekendmakingen die binnen een bepaalde straal van je adres liggen.

GeoTaggen

Geodan heeft in 2008 eens een zogenaamde 'geotagger' voor de gemeente Nijmegen gebouwd. Een geotagger scant tekst op locatieaanduidingen zoals straatnamen, buurtnamen en points of interest en zoekt de bijbehorende coördinaten automatisch op in een database. De term 'geotaggen' is wat anders dan 'geocoderen'. Een geocoder vertaalt 1 gegeven plaatsaanduiding zoals een adres of plaatsnaam naar coördinaten. Een geotagger zoekt naar alle plaatsaanduidingen in een gewone algemene tekst en koppelt alle bijbehorende coördinaten aan die tekst. De Nijmeegse geotagger uit 2008 bleek in de praktijk aardig goed te werken, allerlei gemeentelijke documenten konden redelijk succesvol automatisch van coördinaten (geotags) worden voorzien. Eind 2020, heeft Geodan samen met het Ministerie van Binnenlandse Zaken een proof of concept (POC) opgezet om te kijken of er ook een zinvolle automatische geotagger voor de overheidsbekendmakingen kon worden gemaakt. Het geotaggen van centraal gepubliceerde overheidsdocumenten is wat moeilijker dan de vraag van Nijmegen, omdat de context van elke bekendmaking steeds anders is. Als in een Nijmeegs document bijvoorbeeld wordt gerept van een 'kerkstraat', dan is direct duidelijk dat het gaat om de kerkstraat in Nijmegen. Als echter de 'kerkstraat' in een document van de Provincie Noord-Holland wordt genoemd, dan is niet direct duidelijk over welke kerkstraat in welke woonplaats het gaat.

POC automatisch geotaggen van bekendmakingen

De POC bestaat voor een deel uit een online demo waarmee de dagelijks gepubliceerde bekendmakingen interactief kunnen worden ge-geotagged. In de demo kun je linksboven een datum instellen voor de bekendmakingen die je wilt bekijken. Er zijn alleen bekendmakingen op werkdagen, ze worden gepubliceerd vanaf  ongeveer 10.00 uur. Onder de datum verschijnt een lijst van bekendmakingen voor die dag. Als je op zo'n bekendmaking in de lijst klikt, verschijnt rechtsboven de tekst van de bekendmaking met daarin in het geel gemerkt het eerste woord van alle mogelijke plaatsaanduidingen in de tekst. De overeenkomstige punten, lijnen en vlakken (geofeatures) bij die plaatsaanduidingen worden in de kaart eronder in het geel getoond. De geotagger maakt op basis van de tekst en de context een verdere analyse waarbij de geofeatures worden voorzien van een score. De geofeatures met een voldoende hoge score worden met groen gemarkeerd. Het is de bedoeling dat de met groen gemarkeerde geofeatures de geotags zijn die door de automatische geotagger aan het document worden gekoppeld.

Werking van de Geotagger

Tools

Aan het begin van het project hebben we gekeken naar verschillende manieren om het probleem van het geotaggen aan te pakken. Er zijn tools zoals indexeermachine 'Lucene' en zogenaamde Natural Language Processing (NLP) tools met namen als 'compromise' en 'frog' om menselijke teksten met de computer te analyseren. Dit soort tools zijn bijvoorbeeld goed in het herkennen van varianten van hetzelfde woord zoals enkelvoud en meervoud ('boom', 'bomen') of werkwoordsvervoegingen ('lopen', 'liep', 'gelopen') of synoniemen ('etage', 'verdieping') of afkortingen('enz.', 'enzovoort') of begrippen met gelijksoortige betekenis ('gracht', 'kanaal'). Voor het geotaggen is vooral het herkennen van eigennamen (van straten, plaatsen, gemeenten, personen, points of interest) belangrijk. Bij een aantal proeven bleken de tools dit niet eens zo heel goed te kunnen. Soms werd een werkwoord als 'leiden' aangezien voor de plaatsnaam 'Leiden', in andere gevallen werden straatnamen als 'de Meent' voor achternaam aangezien.

Data

Voor het koppelen met coördinaten (geofeatures) moest er sowieso een database worden ingericht. Hierbij is gebruik gemaakt van zo veel mogelijk open data: de Basisregistratie Adressen en Gebouwen (BAG) voor adressen, postcodes, woonplaatsen, gemeenten en provincies, de CBS buurten en wijken voor de buurt- en wijknamen, een bestand met Waterschapsgrenzen en Waterschapsnamen, de lijst van Veligheidsregios en OpenStreetmap voor de straatnamen en bijbehorende ligging van wegen en straten. Bij nader inzien hadden we voor de straatnamen ook het Nationaal Wegenbestand (NWB) kunnen gebruiken omdat het NWB voor straten veelal exact dezelfde naamgeving gebruikt als de BAG. We gebruiken het NWB niet vaak omdat de wegtypen er niet goed in staan en omdat het ook niet goed te gebruiken is voor routeren, maar voor het geotaggen gelden deze nadelen niet. De Basisregistratie Kadaster (BRK) is ook klaargezet omdat in sommige bekendmakingen kadastrale perceelnummers worden gebruikt (maar voor de POC worden deze nog genegeerd).

Met deze bronbestanden is het volgende datamodel gemaakt (vereenvoudigd):

Alle geofeatures (adrespunten, straten, woonplaatsen, provincies, enz.) zijn samengevoegd in 1 tabel 'geofeature'. Alle namen van deze geofeatures zijn samengevoegd in 1 tabel 'naam' en alle woorden die voorkomen in de namen in 1 tabel 'woord'. Merk op dat 1 naam kan worden gekoppeld aan vele geofeatures (vrijwel elke woonplaats heeft bijvoorbeeld een eigen 'kerkstraat') en 1 geofeature kan worden gekoppeld aan meerdere namen (bijvoorbeeld 'Den Bosch' en 's-Hertogenbosch).

Tekst parsen

Hoewel de verschillende bekeken tools aardige hulpmiddelen zouden kunnen zijn bij het analyseren van teksten, bleek het installeren en koppelen met die tools een flinke klus. Er is daarom eerst gekeken of er ook zonder zulke tools snel resultaat kon worden verkregen. Een tekst kan namelijk al met een enkele 'regular expression' worden opgesplitst in een array van individuele woorden. Met een enkele SQL query kunnen vervolgens alle woorden worden gefilterd die voorkomen in tabel 'woord' en dus onderdeel zouden kunnen zijn van een geografische naam. In een volgende stap kunnen alle kandidaat-woorden (een klein deel van alle woorden) worden vergeleken met de overeenkomende geografische namen uit tabel naam. Op deze manier kunnen heel snel en nauwkeurig alle kandidaat-namen uit de tekst worden gefilterd (in de user-interface met geel gemarkeerd).

Kandidaten scoren

In een laatste stap worden de bij de namen gevonden geofeatures van een score voorzien. Bij de naam 'kerkstraat' passen bijvoorbeeld vele geofeatures (in elke woonplaats 1). Door te kijken naar de context kunnen veel geofeatures al worden weggestreept. Als een document bijvoorbeeld is gepubliceerd door de Provincie Noord-Holland, dan krijgen alleen de geofeatures die binnen Noord-Holland liggen een hogere score, dus de 'kerkstraat' in alle andere provincies vallen alvast af. Er wordt ook gekeken naar het gebruik binnen 1 zin. Als bijvoorbeeld geofeatures 'kerkstraat' en 'haarlem' in dezelfde zin worden gebruikt, dan kijkt de database of er geofeatures met die naam elkaar overlappen (intersect). Voor het geval van geofeature 'Kerkstraat' in 'Haarlem' blijft er dan nog maar 1 kandidaat over. Voor het geotaggen van overheidsdocumenten worden in de POC zes verschillende scoringsfuncties toegepast waarmee een acceptabel resultaat wordt bereikt. Sommige scoringsfuncties zijn heel specifiek. In het geval van bekendmakingen worden bijvoorbeeld vaak locaties genoemd waar je de stukken kunt inkijken of waar je bezwaar kunt maken. Die locaties worden door een speciale scoringsfunctie uit de resultaten verwijderd.

Techniek / Software

Een flink deel van het geotag werk wordt door de database gedaan. Hierbij zijn ook ruimtelijke functies (zoals ruimtelijk overlappen / intersect) nodig. Hiervoor is PostGIS als database ingezet. De User Interface is een web-applicatie. Web-applicaties bestaan (vrijwel) altijd uit Javascript en HTML/CSS, dus ook voor de Geotagger. De serverkant (de 'back-end') is ook in Javascript ontwikkeld. Bij het ontwikkelen van de geotagger krijg je al gauw wat complexere datastructuren in de vorm van in elkaar geneste JSON objecten. Om daar een beter grip op te houden is Javascript extensie 'Typescript' toegepast in zowel de web-app als de backend-server. Met deze extensie wordt afgedwongen dat je overal dezelfde structuur gebruikt. Ook kan de Typescript ontwikkelomgeving sneller en uitgebreider suggesties doen bij het invoeren van nieuwe code.

Resultaat

Het POC eindresultaat is te bekijken op https://research.geodan.nl/geotagger. De werking van de UI wordt hierboven beschreven in hoofdstuk 'POC automatisch geotaggen van bekendmakingen'. Bij het testen is vastgesteld dat de automatische geotagger in ongeveer 80% van de gevallen dezelfde geotags vindt als de handmatige ingestelde geotags. In ongeveer 20% van de gevallen zijn er belangrijke afwijkingen. Soms komt dat doordat de handmatige geotag gewoon verkeerd is ingesteld, soms komt dat doordat de automatische geotagger een fout heeft gemaakt. Dit gebeurt vooral bij teksten waarin perceelnummers worden genoemd (to do), teksten met spelfouten in de plaatsaanduidingen (spelfouten worden opzettelijk streng genegeerd zodat de opsteller van de tekst kan zien dat er iets niet klopt) en teksten zonder plaatsaanduiding in de tekst (sommige mededelingen hebben alleen een coördinaat in de metadata). Bij gemeentelijke herindelingen veranderen gemeentenamen. De nieuwe gemeenten zijn (nog) niet allemaal verwerkt in deze POC, wat leidt tot minder goede geotags.