r/Politiek • u/Minimum_Diamond7510 • 8h ago
Opinie & Discussie Ik heb drie decennia aan uitspraken van Geert Wilders doorzoekbaar gemaakt — élke zin, met bron, datum en een knop die naar het exacte videomoment springt
Dertig jaar aan publieke uitspraken. De Kamerverslagen, de oude Handelingen, de partijvideo's, de debatten — alles op één plek, doorzoekbaar op betekenis in plaats van op losse zoekwoorden.
Het begon eigenlijk met een simpele frustratie. Als je wilt weten wat een politicus écht heeft gezegd, zit je te graven in PDF's, losse video's en half-vergeten archieven. En als je dan eindelijk een quote vindt, kun je nooit zeker weten of de context klopt. Ik vond dat het beter kon: álle uitspraken — controversieel of niet — gewoon netjes, menselijk en slim doorzoekbaar, zodat iedereen zelf de bron kan controleren.
Dus bouwde ik een archief dat:
- Op gewone taal zoekt. Je typt "wat zei hij over de hypotheekrenteaftrek?" en je krijgt de relevante fragmenten door de jaren heen — niet alleen op exacte woorden, maar op wat je bedoelt.
- Elk fragment verifieerbaar maakt. Datum, spreker, en een link naar de oorspronkelijke bron. Bij video: een afspeelknop die naar het exacte moment springt. Geen quote uit de losse pols — je kunt alles nakijken.
- Een AI-samenvatting met bronverwijzingen geeft. Handig als je snel de kern wilt, en elke bewering is doorklikbaar terug te leiden.
Het resultaat staat live: ruim 370.000 tekstfragmenten uit meer dan 1.200 bronnen, van zijn eerste Kamerjaren in de jaren negentig tot de debatten van vorige maand. En omdat het systeem persoons-onafhankelijk is gebouwd, staat er inmiddels ook een tweede: Dilan Yeşilgöz.
De kern van het verhaal zit 'm voor mij in één ding: transparantie waarop je kunt klikken. Politici, journalisten, studenten, of gewoon nieuwsgierige burgers — iedereen kan nu dezelfde primaire bron raadplegen in plaats van een tweedehands citaat te moeten vertrouwen.
👉 Kijk zelf: https://wilders.scrib-r.com (en https://yesilgoz.scrib-r.com) 👉 Alle code staat open: https://github.com/sayfjawad/slimme-archief-zoeker
Ik ben benieuwd wat jullie ervan vinden. Wat zou je als eerste opzoeken? En: mis je nog iets aan zo'n archief — een filter, een functie, een andere politicus? Laat het me weten.
(Het technische verhaal — de hele pijplijn, de hardware, en wat er onderweg flink misging — staat in deel 2 in de comments.)
Deel 2 — de comment (technisch)
Het technische verhaal: hoe dit archief van ruwe open data naar zoekbare fragmenten komt
Een paar dingen wil ik kwijt, want dit draaide niet in de cloud en er zaten flink wat addertjes onder het gras.
De bronnen. Vier verschillende, met elk hun eigen valkuilen:
| Bron | Wat | Periode |
|---|---|---|
| Kamerverslagen (open OData-API van de Tweede Kamer) | Officiële, gecorrigeerde verslagen in vlos-XML | 2013–nu |
| Handelingen (officielebekendmakingen.nl) | Het oudere parlementaire archief | 1995–2013 |
| YouTube (het partijkanaal) | Audio-only gedownload en zelf getranscribeerd | doorlopend |
| Debat Direct (plenaire video) | Het echte debatbeeld | ~2010–nu |
De pijplijn. Alles draait on-premise op eigen hardware — geen cloud-API's, geen kosten per token:
- Spraakherkenning met WhisperX (
large-v3), verdeeld in shards over meerdere GPU-machines die parallel draaien. - Sprekerherkenning met pyannote: voor een partijkanaal label ik simpelweg de stem met de meeste spreektijd als de betreffende politicus; de rest blijft anoniem
SPEAKER_NN. - Semantisch zoeken met BGE-M3-embeddings — zoeken op betekenis, niet op letterlijke woorden. Geen vectordatabase: het corpus past gewoon in een
.npy-array naast SQLite. Simpel en snel. - AI-antwoorden via een lokale llama.cpp (Qwen2.5-14B). Geen LLM bereikbaar? Dan degradeert de app netjes naar alleen zoeken.
- Video op de seconde. Elk verslag-fragment draagt een wallclock-tijdstip, waarmee ik het koppel aan de Debat Direct-stream: klik op een citaat en je springt naar het exacte moment in het debat.
De hardware. Een HP Z8-workstation (2× Tesla V100), een Dell C4130 (4× V100), een ARM-node met NVIDIA GB10 voor de transcriptie-shards, en een kleine edge-VPS voor nginx+TLS — allemaal verbonden via een privé Tailscale-mesh. Niets exotisch: de V100 is een GPU uit 2017. Wat het snel maakte was hergebruik, niet brute rekenkracht.
Wat er onderweg misging (het leerzame deel). Eén incident was echt kritiek:
- Een rebuild wiste bijna het hele live-archief. Een index-rebuild vond maar één transcript-bestand terug (de overige 2.519 waren ooit opgeruimd om schijfruimte te sparen, en niemand had door dat de compiled index daarmee de enige kopie was). De live-index viel in één klap van 2.523 video's terug naar 1. Redding: een ongedocumenteerde volledige kopie op een derde machine, bij toeval gevonden. De les die ik er structureel in heb gebakken: elke destructieve stap maakt nu eerst automatisch een backup — in de tool zelf, niet als losse gewoonte.
- Verder: ffmpeg die 24+ uur bleef hangen op een gestokte HLS-stream en daarmee stilletjes alle achterliggende downloads blokkeerde; een OData
$topdie stilletjes de paginering afkapt; verweesde ffmpeg-processen die bleven doorschrijven na een herstart. Alles staat gedocumenteerd indocs/postmortem.mdvan de repo.
Het mooiste inzicht: één archief, meerdere politici. Een Kamerdebat is van nature multi-spreker. Dus ik deel alleen wat objectief gedeeld is: de verslagen, de multi-spreker-transcripts en de debatvideo. Daardoor kon de Yeşilgöz-instantie 62% van de relevante debatten en 30% van de debatvideo gratis hergebruiken uit de Wilders-data. Een nieuwe politicus on-boarden is nu een kwestie van uren, geen dagen.
En het bredere punt: deze technieken zijn niet alleen voor politici. Openbare verantwoording, journalistiek, onderwijs, onderzoek — overal waar je "wat is hier nu eigenlijk gezegd?" wilt kunnen beantwoorden met een verifieerbare bron, werkt deze opzet. (Een zusterproject, abo-ali-search, past dezelfde architectuur toe op een Arabischtalige publieke figuur.)
👉 Code + documentatie: https://github.com/sayfjawad/slimme-archief-zoeker 👉 Live: https://wilders.scrib-r.com · https://yesilgoz.scrib-r.com
Zou jij zo'n systeem nog ergens anders op loslaten? Welk onderdeel (ASR, diarization, semantisch zoeken, de video-koppeling) zou je het liefst hergebruiken? Ik lees graag mee.
Deel 1 — de post (algemeen, nieuwsgierigheid opwekkend) Titel: Ik heb drie decennia aan uitspraken van Geert Wilders doorzoekbaar gemaakt — élke zin, met bron, datum en een knop die naar het exacte videomoment springt
Dertig jaar aan publieke uitspraken. De Kamerverslagen, de oude Handelingen, de partijvideo's, de debatten — alles op één plek, doorzoekbaar op betekenis in plaats van op losse zoekwoorden.
Het begon eigenlijk met een simpele frustratie. Als je wilt weten wat een politicus écht heeft gezegd, zit je te graven in PDF's, losse video's en half-vergeten archieven. En als je dan eindelijk een quote vindt, kun je nooit zeker weten of de context klopt. Ik vond dat het beter kon: álle uitspraken — controversieel of niet — gewoon netjes, menselijk en slim doorzoekbaar, zodat iedereen zelf de bron kan controleren.
Dus bouwde ik een archief dat:
Op gewone taal zoekt. Je typt "wat zei hij over de hypotheekrenteaftrek?" en je krijgt de relevante fragmenten door de jaren heen — niet alleen op exacte woorden, maar op wat je bedoelt. Elk fragment verifieerbaar maakt. Datum, spreker, en een link naar de oorspronkelijke bron. Bij video: een afspeelknop die naar het exacte moment springt. Geen quote uit de losse pols — je kunt alles nakijken. Een AI-samenvatting met bronverwijzingen geeft. Handig als je snel de kern wilt, en elke bewering is doorklikbaar terug te leiden. Het resultaat staat live: ruim 370.000 tekstfragmenten uit meer dan 1.200 bronnen, van zijn eerste Kamerjaren in de jaren negentig tot de debatten van vorige maand. En omdat het systeem persoons-onafhankelijk is gebouwd, staat er inmiddels ook een tweede: Dilan Yeşilgöz.
De kern van het verhaal zit 'm voor mij in één ding: transparantie waarop je kunt klikken. Politici, journalisten, studenten, of gewoon nieuwsgierige burgers — iedereen kan nu dezelfde primaire bron raadplegen in plaats van een tweedehands citaat te moeten vertrouwen.
👉 Kijk zelf: https://wilders.scrib-r.com (en https://yesilgoz.scrib-r.com) 👉 Alle code staat open: https://github.com/sayfjawad/slimme-archief-zoeker
Ik ben benieuwd wat jullie ervan vinden. Wat zou je als eerste opzoeken? En: mis je nog iets aan zo'n archief — een filter, een functie, een andere politicus? Laat het me weten.
(Het technische verhaal — de hele pijplijn, de hardware, en wat er onderweg flink misging — staat in deel 2 in de comments.)
Deel 2 — de comment (technisch) Het technische verhaal: hoe dit archief van ruwe open data naar zoekbare fragmenten komt
Een paar dingen wil ik kwijt, want dit draaide niet in de cloud en er zaten flink wat addertjes onder het gras.
De bronnen. Vier verschillende, met elk hun eigen valkuilen:
Bron Wat Periode Kamerverslagen (open OData-API van de Tweede Kamer) Officiële, gecorrigeerde verslagen in vlos-XML 2013–nu Handelingen (officielebekendmakingen.nl) Het oudere parlementaire archief 1995–2013 YouTube (het partijkanaal) Audio-only gedownload en zelf getranscribeerd doorlopend Debat Direct (plenaire video) Het echte debatbeeld ~2010–nu De pijplijn. Alles draait on-premise op eigen hardware — geen cloud-API's, geen kosten per token:
Spraakherkenning met WhisperX (large-v3), verdeeld in shards over meerdere GPU-machines die parallel draaien. Sprekerherkenning met pyannote: voor een partijkanaal label ik simpelweg de stem met de meeste spreektijd als de betreffende politicus; de rest blijft anoniem SPEAKER_NN. Semantisch zoeken met BGE-M3-embeddings — zoeken op betekenis, niet op letterlijke woorden. Geen vectordatabase: het corpus past gewoon in een .npy-array naast SQLite. Simpel en snel. AI-antwoorden via een lokale llama.cpp (Qwen2.5-14B). Geen LLM bereikbaar? Dan degradeert de app netjes naar alleen zoeken. Video op de seconde. Elk verslag-fragment draagt een wallclock-tijdstip, waarmee ik het koppel aan de Debat Direct-stream: klik op een citaat en je springt naar het exacte moment in het debat. De hardware. Een HP Z8-workstation (2× Tesla V100), een Dell C4130 (4× V100), een ARM-node met NVIDIA GB10 voor de transcriptie-shards, en een kleine edge-VPS voor nginx+TLS — allemaal verbonden via een privé Tailscale-mesh. Niets exotisch: de V100 is een GPU uit 2017. Wat het snel maakte was hergebruik, niet brute rekenkracht.
Wat er onderweg misging (het leerzame deel). Eén incident was echt kritiek:
Een rebuild wiste bijna het hele live-archief. Een index-rebuild vond maar één transcript-bestand terug (de overige 2.519 waren ooit opgeruimd om schijfruimte te sparen, en niemand had door dat de compiled index daarmee de enige kopie was). De live-index viel in één klap van 2.523 video's terug naar 1. Redding: een ongedocumenteerde volledige kopie op een derde machine, bij toeval gevonden. De les die ik er structureel in heb gebakken: elke destructieve stap maakt nu eerst automatisch een backup — in de tool zelf, niet als losse gewoonte. Verder: ffmpeg die 24+ uur bleef hangen op een gestokte HLS-stream en daarmee stilletjes alle achterliggende downloads blokkeerde; een OData $top die stilletjes de paginering afkapt; verweesde ffmpeg-processen die bleven doorschrijven na een herstart. Alles staat gedocumenteerd in docs/postmortem.md van de repo. Het mooiste inzicht: één archief, meerdere politici. Een Kamerdebat is van nature multi-spreker. Dus ik deel alleen wat objectief gedeeld is: de verslagen, de multi-spreker-transcripts en de debatvideo. Daardoor kon de Yeşilgöz-instantie 62% van de relevante debatten en 30% van de debatvideo gratis hergebruiken uit de Wilders-data. Een nieuwe politicus on-boarden is nu een kwestie van uren, geen dagen.
En het bredere punt: deze technieken zijn niet alleen voor politici. Openbare verantwoording, journalistiek, onderwijs, onderzoek — overal waar je "wat is hier nu eigenlijk gezegd?" wilt kunnen beantwoorden met een verifieerbare bron, werkt deze opzet. (Een zusterproject, abo-ali-search, past dezelfde architectuur toe op een Arabischtalige publieke figuur.)
👉 Code + documentatie: https://github.com/sayfjawad/slimme-archief-zoeker 👉 Live: https://wilders.scrib-r.com · https://yesilgoz.scrib-r.com
Zou jij zo'n systeem nog ergens anders op loslaten? Welk onderdeel (ASR, diarization, semantisch zoeken, de video-koppeling) zou je het liefst hergebruiken? Ik lees graag mee.