Verslag: AI-workflow voor het ophalen van partijprogramma's

Project: Analyse Wassenaarse verkiezingsprogramma's 2026 · Datum: 12 maart 2026
Doel: Documenteren van de aanpak en prompts voor collega's die willen leren van deze oefening

1. Context

Bij de gemeenteraadsverkiezingen van Wassenaar (2026) doen negen partijen mee. Om hun programma's te analyseren, moeten de teksten eerst digitaal beschikbaar zijn. Sommige programma's staan alleen op websites in HTML en moeten worden omgezet naar platte tekst (.txt) voor verdere verwerking.

Deelnemende partijen (lijstnummers):

Bestandsstructuur: Alle programma's volgen de naamgeving Verkiezingsprogramma<lijstnummer><Partijnaam>.txt (bijv. Verkiezingsprogramma2HartvoorWassenaar.txt) voor eenvoudige controleerbaarheid.


2. Alle prompts (chronologisch)

Prompt 1 – Ophalen Hart voor Wassenaar

"We gaan de Wassenaarse verkiezingsprogramma's analyseren! Leuk!! ik heb je nodig. Het gaat om deze programma's: [lijst met partijen en lijstnummers]

ik ben bezig de partijprogramma's te downloaden; maar enkele daarvan staan op de website, in html en moeten eerst als tekst worden gedownload om te kunnen gebruiken. Laten we eerst beginnen met Hart voor Wassenaar om te zien of dit lukt. Sla het bestand als .txt bestand op. Hier is het te vinden: https://hartvoorwassenaar.nl/standpunten/"

Belangrijke elementen: context, concrete taak, één partij als pilot, expliciete URL.

Prompt 2 – Verslag voor collega's

"Ik bedenk me iets leuks; mijn collega's willen graag leren van deze excercitie. Kun je een goed leesbaar verslag maken van de prompts en hoe je te werk bent gegaan? Ik denk dat de publicatie op ons intranet een mooie veilige plek is om de informatie te delen."

Belangrijke elementen: doel (leren delen), gewenst product (verslag), doelgroep (collega's), publicatieplek (intranet).

Prompt 3 – Uitbreiding workflow

"werk dat verslag bij met elke prompt. kun jij dat zelf in de gaten houden?

verder wil ik dat alle 9 verkiezingsprogramma's dezelfde structuur in de naam hebben; <Verkiezingsprogramma><het volgnummer><NaamvandePartij>. Dat maakt het makkelijker controleerbaar als de collega's letterlijke formulering erbij willen zoeken.

Opdracht 2: zet alle tekst van de verkiezingsprogramma's volledig en letterlijk in één bestand om de performance te optimaliseren en de controleerbaarheid van de tekst te maximaliseren."

Belangrijke elementen: drie deelopdrachten (verslag bijwerken, bestandsnamen standaardiseren, gecombineerd bestand), expliciete redenen (controleerbaarheid, performance).

Prompt 4 – GroenLinks-PvdA PDF verwerken

"ik heb nu ook groenlinkspvda.pdf toegevoegd. analyseer die op dezelfde wijze"

Context: De gebruiker had eerder de VVD-PDF verwerkt met het script pdf_naar_txt.py. GroenLinks-PvdA stond als PDF in de map. Dezelfde aanpak werd gevraagd: tekst extraheren en opslaan als Verkiezingsprogramma4GroenLinksPvdA.txt.

Belangrijke elementen: verwijzing naar bestaande workflow ("op dezelfde wijze"), nieuw bestand toevoegen aan de reeks.

Actie: Het script pdf_naar_txt.py werd uitgebreid om een PDF-bestand als argument te accepteren. Uitvoer: Verkiezingsprogramma4GroenLinksPvdA.txt (38.109 tekens).

Prompt 5 – Promptgeschiedenis bijwerken en HTML voor collega's

"zorg je ervoor dat onze promptgeschiedenis ook wordt bijgewerkt? die wil ik goed leesbaar als html beschikbaar maken voor de collega's, remember?"

Belangrijke elementen: verslag actueel houden, extra formaat (HTML) voor intranet/publicatie, doelgroep (collega's).

Actie: Dit verslag bijwerken met de nieuwe prompts én een HTML-versie genereren voor eenvoudige publicatie op het intranet.

Prompt 6 – Lokaal Wassenaar: PDF-link, concept-notitie, bronvergelijking

"Lokaal wassenaar - ja loop die ook langs. die hebben ook een link naar het programma, een beetje verstopt. https://lokaalwassenaar.nl/wp-content/uploads/2026/02/Programma-2026-2030-concept-v1.pdf voeg de link toe aan het tekst bestand. Onthoud: ALLES MOET TRACEERBAAR zijn. werk ons promptlogboek ook steeds bij. Oh ja; maak de notitie EXPLICIET dat op het pdf dat je kunt downloaden van de site in de titel 'concept' staat. wel V1. maar laat de collega's daar notie van nemen. ze hebben best een uitgebreide gewone pagina met inhoud https://lokaalwassenaar.nl/?page_id=50 misschien moet je eerst de analyse doen of er verschil zit, inhoudelijk, tussen de pdf en de webpagina. Voer deze stappen in een logische volgorde uit."

Belangrijke elementen: traceerbaarheid, PDF-link toevoegen, expliciete waarschuwing over "concept" in PDF-bestandsnaam, vergelijking PDF vs webpagina vóór aanpassingen, verslag bijwerken.

Actie (uitgevoerd in volgorde): (1) PDF gedownload en tekst geëxtraheerd voor vergelijking. (2) Webpagina opgehaald en inhoudelijk vergeleken met PDF. (3) Bevinding: PDF en webpagina komen inhoudelijk overeen; PDF is concept (v1); bevat extra kandidatenlijst. (4) Verkiezingsprogramma3LokaalWassenaar.txt bijgewerkt met beide bronlinks, expliciete concept-notitie voor collega's, en samenvatting van de PDF-vs-webpagina-analyse. (5) Dit verslag bijgewerkt.

Prompt 7 – GroenLinks-PvdA: PDF analyseren en extraheren

"glpvda; analyseer pdf en extraheer naar tekst."

Actie: PDF gedownload, tekst geëxtraheerd met pdf_naar_txt.py naar Verkiezingsprogramma4GroenLinksPvdA.txt (38.094 tekens). Bronvermelding en verificatielinks toegevoegd.

Prompt 8 – CDA: PDF analyseren en extraheren

"ok ik check = is ok . nu cda"

Actie: PDF gedownload, tekst geëxtraheerd naar Verkiezingsprogramma5CDA.txt (17.907 tekens). Parser parse_cda toegevoegd. Database en HTML opnieuw gegenereerd (70 CDA-standpunten).

Prompt 9 – D66: PDF lokaal extraheren

"super. nu d66 pdf staat in de map lokaal"

Actie: PDF lokaal. Tekst geëxtraheerd naar Verkiezingsprogramma6D66.txt (48.268 tekens). Parser parse_d66 toegevoegd. Database en HTML opnieuw gegenereerd (81 D66-standpunten).

Prompt 10 – Democratische Liberalen Wassenaar: kopjes herstellen

"top - bij de democratische LIBERALEN zie ik dat de kopjes zijn weggevallen"

Actie: Aparte parser parse_dlw toegevoegd die genummerde kopjes (1 EEN BETROUWBAAR..., 2 WONEN..., etc.) herkent en bullet points aan het juiste thema koppelt. DLW nu 13 thema's en 85 standpunten (was 1 thema). Database en HTML opnieuw gegenereerd.

Prompt 11 – Forum voor Democratie: scrapen van website met submenus

"mooi. fvd is lastig met submenus alleen op de website. kun jij die scrapen? https://fvd.nl/gemeentes/wassenaar"

Actie: Script scrape_fvd_wassenaar.py toegevoegd dat de Nuxt-payload uit de HTML parseert. Alle 10 hoofdstukken geëxtraheerd. Parser parse_fvd toegevoegd. FvD nu 10 thema's en 130 standpunten in de database.

Prompt 12 – Volt: PDF lokaal extraheren

"super. doe volt nu, ik check fvd" / "hij staat lokaal he"

Actie: Volt-PDF lokaal (verkiezingsprogramma-program-2026-volt-wassenaar.pdf). Tekst geëxtraheerd met pdf_naar_txt.py. Parser parse_volt toegevoegd. Volt nu 10 thema's en 50 standpunten in de database.

Promptdocumentatie actueel houden

De AI-assistent onthoudt prompts niet automatisch tussen sessies. Tip: maak aan het einde van elke sessie een vaste afsluiting, bijvoorbeeld: "Werk het verslag bij met de prompts van deze sessie." Of: "Zorg dat de promptgeschiedenis wordt bijgewerkt en als HTML beschikbaar is voor collega's." Dan blijft de promptdocumentatie up-to-date.


3. Werkwijze van de AI-assistent

Stap 1: Webpagina ophalen

De assistent gebruikte een web fetch-tool om de inhoud van de URL op te halen. De tool haalt de pagina op en zet de HTML om naar leesbare tekst (Markdown-achtig formaat).

Stap 2: Verkenning van de projectmap

Er werd gekeken welke bestanden al in de projectmap stonden. Daarbij viel op dat er al een bestand Verkiezingsprogramma_2-Hart voor Wassenaar.txt was, maar dat dit onvolledig was (alleen kopjes en een deel van Financiën).

Stap 3: Tekst opschonen en structureren

De opgehaalde inhoud werd:

Stap 4: Bestand opslaan

Het resultaat werd opgeslagen als Verkiezingsprogramma2HartvoorWassenaar.txt in de projectmap (na Prompt 3: hernoemd naar standaardstructuur).

Stap 5: PDF naar tekst (voor programma's als PDF)

Voor programma's die als PDF beschikbaar zijn (zoals VVD en GroenLinks-PvdA) wordt het Python-script pdf_naar_txt.py gebruikt. Het script ondersteunt PyMuPDF (fitz) voor snelle extractie. Gebruik:

python pdf_naar_txt.py <pdf-bestand> [uitvoer-bestand]

Bijvoorbeeld: python pdf_naar_txt.py Verkiezingsprogramma4GroenLinksPvdA.pdf Verkiezingsprogramma4GroenLinksPvdA.txt


4. Gebruikte tools

ToolDoel
Web fetchOphalen van webpagina-inhoud via URL
Glob/file searchZoeken naar bestaande bestanden in het project
ReadBestaande bestanden lezen om duplicatie te voorkomen
WriteNieuw tekstbestand aanmaken of bestaand bestand overschrijven
pdf_naar_txt.pyTekst extraheren uit PDF-bestanden (PyMuPDF)

5. Resultaat

Individuele bestanden (standaardnaamgeving):

Gecombineerd bestand: Alle_verkiezingsprogrammas_gecombineerd.txt bevat alle beschikbare programma's volledig en letterlijk in één bestand voor optimale performance en controleerbaarheid.

Verificatie door collega's: In alle tekstbestanden en in Gebruikte_verkiezingsprogrammas.txt staan links naar de originele PDF's en websites op internet. Zo kunnen collega's de bronnen zelf controleren.


6. Tips voor collega's: hoe krijg je goede resultaten?

✅ Do's

  1. Geef context – Leg uit wat je wilt doen en waarom.
  2. Begin klein – Test eerst met één voorbeeld (zoals Hart voor Wassenaar).
  3. Geef de URL – Als je webinhoud wilt ophalen, vermeld de exacte URL.
  4. Specificeer het formaat – Bijvoorbeeld: "opslaan als .txt" of "als Markdown".
  5. Stel vervolgvragen – Vraag om hetzelfde voor andere partijen of om aanpassingen.
  6. Sluit af met: "Werk het verslag bij met de prompts van deze sessie."

❌ Don'ts

  1. Niet te vaag – "Haal iets van internet" is minder effectief dan "Haal de standpunten van deze URL op".
  2. Niet te veel in één keer – Eerst één partij, daarna uitbreiden.
  3. Bron niet vergeten – Zonder URL kan de assistent de juiste pagina niet ophalen.

7. Mogelijke vervolgstappen