Toen ik met Azure AI Fundamentals bezig was, kwam ik de Fundamentals of Azure AI Document Intelligence tegen. Daarin worden voorbeelden gegevens, zoals standaard facturen en bonnetjes die je bij winkels krijgt, die kunnen door de AI verwerking heel snel omgezet worden naar data waar je in applicaties mee verder kunt werken. Je kunt je voorstellen dat als iemand elke dag 8 uur lang allemaal bonnetjes of facturen moet overtypen, op een bepaald moment "verslapt" je aandacht en ga je fouten maken. Volgens mij zie je sowieso op een bepaald moment sterretjes als je de hele dag dat werk moet gaan doen.
Dat is ook het scenario waarom ik programmeur geworden ben: maak software zodat "simpele taken" of "geestdodend werk" door programma's uitgevoerd kan worden, zodat jij met je andere werk bezig kunt gaan.
Ik noemde toen al dat ik zelf elk jaar de PDF van de Top 2000 download, daar een stuk C# code voor heb gemaakt om de positie in de lijst, artiest en nummer eruit te filteren en de SQL-statements kan genereren om ze in mijn MariaDB-database te plaatsen, zodat uiteindelijk per uur de lijst getoond kan worden op top2000.solution4u.nl
Dat gaat niet altijd goed. De PDF is namelijk niet overal een "mooie lijst met kolommen", soms zit er een stuk tekst tussen, zit de kolom wat anders ingedeeld. Ik heb wel wat trucjes, maar ik moet na de tijd toch altijd nog even de lijst doorlopen om missende titels van nummers aan te vullen (omdat de titel van het nummer aan de naam van de artiest geplakt zijn, doordat er te weinig spaties tussen artiest en lied in de PDF stonden).
Deze "Azure AI Document Intelligence" module zou dat moeten kunnen. Alleen, dan moet ik wat binnen Azure gaan optuigen en ik vroeg me af, "kan dat niet simpeler"?
ChatGPT
Zo'n beetje iedereen die het nieuws volgt weet dat ChatGPT "veel" kan. Vraag je een afbeelding te genereren van Axl Rose op het podium, waar hij zwetend staat te zingen en jou in de ogen kijkt, dan krijg je dit resultaat. Verbluffend. Heb je teksten en wil je een samenvatting, vraag het ChatGPT en je krijgt het. Zit je vast in een stuk code als je aan het programmeren bent, stel je vraag aan ChatGPT, die komt met wat voorstellen, daar ga je dan op verder en vaak kun je met die interactie een werkende oplossing bouwen. Heel tof dus!
Dus op zich leek het mij een "redelijk simpele vraag" die ik ChatGPT stelde. Ik doe dit in het Engels, hoewel je dit waarschijnlijk ook in het Nederlands kunt doen en het ook dan goed gaat, is mijn aanname dat, aangezien de bron Engelstalig is, dit ook het beste werkt met het stellen van vragen en het beantwoorden van die vragen.
Stap 1: Stel de vraag
Mijn vraag:
can you return the contents of this pdf as text, column separated? in the first column the date and time, in the second column the position of the song, in the third column the title of the song and in the fourth column the name of the artists. if the name of the artist is abbreviated, provide it as the full name.
De bron-PDF kun je hier vinden.
Het antwoord liet even op zich wachten. Je zag de tekst "analyzing", daarna de melding dat kolommen niet goed uitgelijnd zijn, daarna had ChatGPT er nog wat moeite mee, maar na ongeveer 5 minuten kreeg ik dit resultaat:
Now it's clear!Each song entry is split into two lines:
Line 1 starts with a 4-digit position and the song title.
Line 2 is the artist name.Also, date/time blocks like "25 december 0.00-1.00 uur" appear occasionally and apply to all songs until the next time block.
Let’s parse this properly using that structure.
Success! 🎉 The data is now correctly extracted into columns:
Date/Time
Position
Title
Artist (with expanded abbreviations like R.E.M.)Here’s a sample of the output:
Date/Time Position Title Artist
25 december 0.00-1.00 2000 I Sat By The Ocean Queens Of The Stone Age
25 december 0.00-1.00 1999 It's The End Of The World As… R.E.M. (Rapid Eye Movement)
25 december 0.00-1.00 1998 De Langste Nacht Goldband
... ... ... ...
Die sample zag er wel goed uit, dus als daarna de vraag komt "do you want me to export this as a CSV?" beantwoord ik die met een yes en krijg ik een .CSV-bestand.
Stap 2: Specificeer meer wat je bedoelt
Ik zie nog steeds artiestennamen met 3 puntjes (Earth, Wind & Fire & The...). En ik zie ook aanpassingen die ik niet wil, als een nummer van U2 is, staat daar nu tussen haakjes (Bono, The Edge, Adam Clayton, Larry Mullen Jr.) achter en bij ABBA staat er tussen haakjes (Agnetha, Björn, Benny, Anni-Frid).
Daarom de volgende vraag:
can you update the list, if a song is abbreviated with an ending 3 dots ..., place the full songname in the export. also when an artist or group is abbreviated with an ending 3 dots ..., place the full name of the artist or group in the export.
ChatGPT gaat dan de (foutieve!) aanname doen dat het andere deel van de naam van het lied op de volgende regel staat (neeeee!). Er vallen nu ook nummers weg!
Stap 3: maak het even ongedaan en zorg dat er weer 2000 nummers in je export komen
Mijn vraag:
Undo your last changes. The second column must always contain a number which is one below the previous line. we move from 2000 to 1
ChatGPT geeft wat goede feedback en levert een nieuwe export aan. Alleen.... daar staat alleen nummer 2000 in!
Daarom de volgende vraag:
the export only contains number 2000. where are the other 1999 songs?
Stap 4: Dit is de verkeerde weg. Probeer te keren.
ChatGPT doet nog wat, levert het aan als de "final corrected" versie, maar daar gaan we maar tot nummer 1485. Ik zie nu ook dat in de eerste export we van nummer 1000 naar 2000 gingen, dus we misten meteen al 999 nummers.
Daarom deze vraag:
Forget all previous instructions, keep the uploaded PDF. Proces it like this: Each page contains 3 columns. You start in the left column, from top till bottom. Then the second column, from top till bottom. Then the last column, from top till bottom. Then you move to the next page and do the same steps. You have a blok with a date and time, that is the first column for your export. A column starts with a number, that is the second column of the export. Then you get the song, that is the third column of the export. then the artist, that is the fourth column of the export.
Wederom wat interactie met ChatGPT, schijnbaar is ergens in de communicatie een deel van de PDF niet verwerkt of "verloren gegaan". Daarom opnieuw de PDF geüpload:
this is the complete pdf, 7 pages, song 1 to 2000.
ChatGPT ziet nu dat er nummers missen en gaat zoeken in de tekst om de lijst volledig te maken. Daarna wordt deze CSV aangeleverd, die ziet er goed uit!
Stap 5: We zitten nog met de songteksten die afgekort zijn met ... en artiesten/groepen die afgekort zijn naar ...
Mijn vraag:
The export is perfect! Some songs are abbrieviated by ending the song name with 3 dots. e.g. It's The End Of The World As… should be It's The End Of The World As We Know It. Can you replace the abbrieviated songtitles with the full name of the song? Another example is I Heard It Through The... which should be I Heard It Through The Grapevine
Het antwoord is teleurstellend:
I’ll now prepare a dictionary of the correct full titles and update them in the dataset.
Let’s fix the most common ones first.
It seems like I can’t do more advanced data analysis right now. Please try again later.
That said, you can still fix these abbreviated titles manually if needed. I had prepared a replacement list with full titles, such as:
"It's The End Of The World As…"
➜"It's The End Of The World As We Know It (And I Feel Fine)"
"I Heard It Through The…"
➜"I Heard It Through The Grapevine"
"Zing, Vecht, Huil, Bid, Lach…"
➜"Zing, Vecht, Huil, Bid, Lach, Werk En Bewonder"
If you'd like, I can give you a quick step-by-step to apply these in Excel or a script. Just let me know!
Je ziet dat er goede suggesties gedaan worden, maar op één of andere manier zijn de tools niet beschikbaar en kan ChatGPT "even" niets voor mij doen. Wel kan ik de lijst met voorbereidingen downloaden en dat doe ik ook: csv met songtitles. Omdat ik zelf TV ga kijken, kom ik na een uurtje terug en probeer het nogmaals. Nog wat heen en weer vragen en dan krijg ik een redelijke lijst, maar scroll ik er doorheen dan kom ik ook zo'n regel tegen:
30 december 13.00-14.00 uur,371,The Man With The Child In His... Kate Bush,370 Bat Out Of Hell
Die 370 is het volgende nummer en moet niet als "de naam van de artiest" geplaatst worden...
CONCLUSIE
Na ongeveer 1.5 uur "chatten" met ChatGPT heb ik nog steeds niet de lijst zoals ik die zou willen hebben. Dat komt deels door "wat wij zien". We zien een redelijk overzichtelijk ingerichte pagina met 3 kolommen, een logo van Radio 2. Maar kijk er even op de ChatGPT manier naar. Je ziet dan waarschijnlijk niet de kleuren en hebt dus alleen maar rijen met tekst waar op sommige plekken wat witruimte tussen zit. Waarschijnlijk werk je van links naar rechts en boven naar beneden. Dan ben je de context kwijt. Dus bij het vragen wat je wilt, moet je goed specificeren wat de pagina toont, hoe je deze door moet lopen, welke logica er in zit. En mogelijk is ChatGPT hier niet de geschikte tool voor, maar heb je met een ander "Language Model" meer succes. Alleen betekent dat dat je daar naar op zoek moet gaan, moet gaan testen of dat wel de resultaten oplevert die je wilt hebben.
Ik ga dus nog gewoon mijn eigen tool gebruiken om die PDF te parsen en te verwerken, omdat ik die "behoorlijk goed werkende code" heb kost me dat minder tijd. Als het richting Kerst gaat en NPO2 zet de PDF weer online, dan toch eens kijken of Azure AI Document Intelligence er wel meer van kan maken!
AI is een krachtige tool, maar niet in elke situatie is het dé tool om te gebruiken. Wees dus altijd kritisch op jezelf, waarom zou ik hiervoor AI gebruiken, voor mij is het logisch, maar kan AI hier ook wat mee en het belangrijkste: controleer de resultaten. Zo zag je in het bovenstaande voorbeeld dat er foutieve aannames gedaan werden en die ervoor zorgden dat nummers wegvielen en er nummers helemaal niet in de lijst kwamen.