ID.nl logo
Programmeren in Python met ChatGPT - Deel 3
© Dahina - stock.adobe.com
Huis

Programmeren in Python met ChatGPT - Deel 3

In deel 2 van deze artikelreeks leerde je hoe je verslagen van vergaderingen kon samenvatten met de OpenAI-API in de programmeertaal Python. Maar je kunt nog meer: het taalmodel achter ChatGPT is in staat om teksten te analyseren en daaruit besproken onderwerpen te halen. Zo kun je documenten automatisch op onderwerp ordenen.

In dit derde deel laten we ChatGPT onze teksten analyseren om daaruit de onderwerpen te extraheren, zodat we zelf gemakkelijker onze teksten kunnen taggen of ordenen:

  • Eerst zorgen we ervoor dat de juiste bestanden gevonden worden
  • Daarna laten we de bestanden analyseren
  • Tot slot zorgen we ervoor dat de gevonden onderwerpen worden omgezet in tags

Lees ook: Weg met de chaos! Organiseer je bestanden met TagSpaces

Code downloaden In deze workshop worden wat voorbeelden van stukken code gegeven. Omdat overtikken van code erg foutgevoelig is, kun je die code beter downloaden en daarna bekijken of kopiëren. Via deze link kun je twee bestanden downloaden: het bestand extract_tags.py (dat het eindresultaat van deze workshop bevat) en het bestand gptcode-dl3.txt (dat alle losse opdrachten uit deze hele aflevering bevat).

In deel 2 zagen we al dat ChatGPT veel meer kan dan gewoon conversaties voeren. Het taalmodel draait zijn hand bijvoorbeeld niet om voor de taak om teksten samen te vatten. We kunnen dat principe in nog veel extremere vorm doorzetten: vraag om de besproken onderwerpen van een tekst te geven in enkele woorden. Dat is ideaal om automatisch tags aan teksten toe te kennen om ze daarna sneller terug te vinden. In dit deel realiseren we dit met de OpenAI-API in Python waar je ondertussen al wat vertrouwd mee bent.

Alle bestanden doorlopen

Kopieer het Python-script summarize_docx_files.py uit deel 2. Dit bestand gebruiken we als basis en passen we hier aan. Vervang allereerst de systeemprompt in het begin:

SYSTEM_PROMPT = "Beschrijf de vijf belangrijkste onderwerpen die in de volgende tekst besproken zijn."

We gaan de systeemprompt later nog verder aanpassen, want zoals we in de vorige delen van de reeks hebben gezegd, moet die prompt zo specifiek mogelijk zijn. Maar we moeten ergens beginnen.

Voor het samenvatten van verslagen gingen we ervan uit dat alle Word-bestanden zich in dezelfde directory bevonden. Nu willen we veel meer bestanden verwerken, ook als ze zich in subdirectory’s bevinden. Daarom veranderen we de functie process_docx_files in:

Met rglob krijgen we een lijst van alle paden die op .docx eindigen. We controleren dan nog voor de zekerheid of het om een bestand gaat en niet om een directory waarvan de naam eindigt op .docx. Daarna lezen we de inhoud met de functie read_docx die we vorige keer hadden gemaakt.

Sla in Visual Studio Code met Ctrl+S het script op onder de naam extract_tags.py en open een opdrachtregelvenster met het menu Terminal / New Terminal. Voer het programma hierin als volgt uit:

python extract_tags.py directorymetdocumenten

Vervang directorymetdocumenten door het daadwerkelijke pad waarin al je te analyseren documenten staan.

Grotere bestanden analyseren

Als je dit nu toepast op een directory met grotere documenten, crasht je Python-programma met een foutmelding zoals:

openai.error.InvalidRequestError: This model's maximum context length is 4097 tokens. However, your messages resulted in 4202 tokens. Please reduce the length of the messages.

Dat is een beperking van het model gpt-3.5-turbo, dat maar iets meer dan 4000 tokens kan verwerken. Met een ander model kunnen we meer tokens verwerken, maar allereerst willen we dat het programma niet meer crasht en gewoon doorgaat met de volgende teksten als één specifieke tekst te lang is. Vervang daarom de regel print(get_completion(text, SYSTEM_PROMPT)) helemaal op het einde door:

Voor elk document dat te groot is, krijgen we nu nog altijd de foutmelding. Maar het programma gaat dan verder met het volgende document.

Zoals gezegd kunnen we ook nog het model in het begin van het programma vervangen:

DEFAULT_MODEL = "gpt-3.5-turbo-16k"

Dit 16K-model ondersteunt vier keer zoveel tokens, maar je betaalt er wel twee keer zoveel voor per token.

Van onderwerpen naar tags

Als je de voorgaande code uitvoert, krijg je volledige zinnen of korte steekwoorden terug met beschrijvingen van de onderwerpen. Dat is niet onze bedoeling. We moeten dus in de systeemprompt duidelijk maken wat we wél willen: korte tags van één of twee woorden:

SYSTEM_PROMPT = "Geef de vijf belangrijkste tags die de volgende tekst beschrijven. Elke tag is één of twee woorden lang. Scheid de tags van elkaar door een komma."

Het resultaat is deze keer wel wat we verwachten, al slipt er soms een tag van drie woorden door. Maar als dat iets als ‘Raspberry Pi Pico’ is, zien we dat door de vingers. Als we deze tags verder willen verwerken, moeten we ze wel consistent maken. Daarvoor schrijven we een extra functie.

Nabewerking

Een voorbeeld maakt dit duidelijk. Stel dat ons programma de volgende tags uit een tekst haalt: Zigbee, Z-Wave, Bluetooth Mesh, Thread, Domoticaprotocollen. Dan willen we daar een lijst van maken met tags zigbee, z-wave, bluetooth-mesh, thread en domoticaprotocollen. Dat doen we met de volgende functie:

De parameter tags is gewoon een string zoals ‘Domoticacontroller, Home Assistant, Raspberry Pi, Domoticatoestellen, Installatie’ die we van de OpenAI-API terugkrijgen. We splitsen die op elke komma, waardoor we een lijst met tags krijgen. Voor elke tag in die lijst halen we met strip() eerst alle spaties in het begin en eind weg, zetten we met lower() alle letters om naar kleine letters en vervangen we dan elke spatie in het midden door een koppelteken (-).

Om nu de tags te normaliseren, vervangen we de regel print(get_completion(text, SYSTEM_PROMPT)) op het einde van het script door:

Je krijgt nu voor elk document de tags te zien in de vorm van een lijst in Python:

['zigbee', 'z-wave', 'bluetooth-mesh', 'thread', 'domoticaprotocollen']

Artikelen per tag

Tot nu toe gebruiken we de tags gewoon als een heel beknopte samenvatting van documenten. Maar we kunnen het ook omdraaien: na het extraheren van alle tags, kunnen we aan elke tag de documenten koppelen die door deze tag worden beschreven. Zo kunnen we achteraf heel eenvoudig opvragen welke documenten bij een specifieke tag horen.

Hoe doen we dit? Daarvoor vervangen we de hele for-lus op het einde van het programma door de volgende code:

We maken dus eerst een lege dictionary documents aan. Daarna lopen we weer door alle bestanden met hun overeenkomstige tekst. We vragen aan de OpenAI-API om de tags uit te tekst te extraheren en we normaliseren die. Voor elke tag bekijken we dan of die al in de dictionary zit. Zo nee, dan voegen we die toe met als bijbehorende waarde een lege lijst. Daarna voegen we het pad van het geanalyseerde document aan die tag toe.

Uiteindelijk wanneer we alle bestanden op deze manier hebben geanalyseerd, bevat de dictionary documents tags met een lijst van bijbehorende bestanden. Die laten we nu tag na tag zien. En zo weet je onmiddellijk welke documenten je nodig hebt als je meer over een onderwerp wilt weten!

Volgende week maandag het vierde deel van deze reeks! Hierin laten we ChatGPT in Python teksten vertalen en geschreven opdrachten omzetten in een computertaal.

Lees ook:

▼ Volgende artikel
Waar voor je geld: 5 populaire koelkasten met een hoge reviewscore
© Odua Images
Huis

Waar voor je geld: 5 populaire koelkasten met een hoge reviewscore

Bij ID.nl zijn we dol op kwaliteitsproducten waar je niet de hoofdprijs voor betaalt. Een paar keer per week speuren we binnen een bepaald thema naar zulke deals. Ben je op zoek naar een koelkast die hoge ogen gooit bij andere gebruikers? Vandaag hebben we vijf interessante modellen voor je gespot.

Hisense RB329N4AWE

De Hisense RB329N4AWE is een goede betaalbare koelkast. Ruim twintig reviewers komen tot een gemiddelde score van een 8,7. Naast de lage prijs waarderen diverse consumenten onder meer de stille werking (38 decibel) en ruime inhoud. Daarnaast valt de no frost-functie in de smaak, want hierdoor is er in het vriesgedeelte nooit sprake van ijsvorming. Dat scheelt weer ontdooien. Is de draairichting ongunstig? Geen probleem, want je kunt de deur omkeren. De bediening is eenvoudig, want bovenaan het koelvak bevinden diverse knopjes. Daarmee selecteer je onder meer de gewenste temperatuur.

Deze koelkast bevat meerdere ventilators die de koude lucht gelijkmatig verdelen. Dat komt de houdbaarheid van de producten ten goede. Voor het snel invriezen van voedsel activeer je desgewenst de Fast Freeze-optie. Zo bewaar je beter de smaak van producten. Het koelgedeelte heeft een inhoud van 188 liter, terwijl het vriesvak goed is voor 67 liter. Deze vrijstaande koelkast is 180 centimeter hoog. Tot slot is de diepte van 56 centimeter een pluspunt. Hierdoor plaats je de RB329N4AWE netjes in een standaard keuken.

Samsung RS65DG5403S9EF

Met een totale inhoud van 635 liter is de Samsung RS65DG5403S9EF een perfecte koelkast voor gezinnen. Het betreft een Amerikaans model met twee deuren. Achter de linkerdeur bevindt zich een vrieskast van 218 liter. Met vier legplanken en twee transparante lades kun je heel wat etenswaren invriezen. Er is in de deur ook nog een ijsblokjesmaker verwerkt. Het koelgedeelte heeft dezelfde indeling als het vriesvak, maar is een stuk breder. Daardoor bedraagt de inhoud van dit compartiment maar liefst 417 liter.

Zoals je van een moderne koelkast in deze prijsklasse mag verwachten, ondersteunt de RS65DG5403S9EF diverse nuttige functies. Verbind het apparaat bijvoorbeeld met wifi en houd in een app op je smartphone het actuele stroomverbruik in de gaten. Verder ondersteunt dit model no frost, zodat je de vrieskast niet hoeft te ontdooien. Een ander pluspunt is het lage geluidsniveau van slechts 37 decibel. Vijf Kieskeurig.nl-testers voelden deze Amerikaanse koelkast al eens aan de tand. Zij deelden alleen maar achten en negens uit. Lees hier hun testverslagen. Het product is in een zilverkleurige en zwarte uitvoering te koop.

Liebherr CNC 5703 Pure

Het Duitse merk Liebherr staat bekend om zijn kwalitatieve witgoedproducten. De CNC 5703 Pure is daarvan een goed voorbeeld. Niet voor niets beoordelen een kleine twintig Kieskeurig.nl-bezoekers het product met een gemiddeld cijfer van een 9. Je hoeft deze koelkast niet ergens in de bijkeuken of schuur neer te zetten, want het apparaat maakt nauwelijks geluid. Het opgegeven volumeniveau bedraagt slechts 35 decibel. Zet hem dus gerust naast een bank of keukentafel. Dankzij de geïntegreerde deurgrepen is de buitenzijde helemaal vlak. Handig voor het afnemen van vuil en stof!

De koelkast is ruim twee meter hoog. Dit resulteert in flink wat ruimte. Het koelvak heeft dan ook een riante inhoud van 268 liter. Met 103 liter is het vriesgedeelte eveneens erg ruim. Van ijsvorming is geen sprake, want de CNC 5703 Pure ondersteunt no frost. Voor het bewaren van groente en fruit komt de zogenoemde EasyFresh-lade goed van pas. Dankzij een hoge luchtvochtigheid blijven de producten hierin langer goed. Wie dit product binnen een half jaar kosteloos registreert, ontvangt acht jaar garantie op alle onderdelen en het arbeidsloon. Naast de hier besproken witte uitvoering is deze koelkast ook in een RVS-variant verkrijgbaar.

Lees ook: 🧊 Houd je eten langer vers: zo deel je je koelkast optimaal in

Inventum KV550B

Zoek je een tafelmodel met een goede reputatie? Kijk dan eens naar de Inventum KV550B. Op Kieskeurig.nl heeft deze compacte koelkast een gemiddelde score van een 9,1. De reviewers prijzen onder andere de stille werking (39 decibel), geïntegreerde verlichting en ruime groentelade. Verder heeft de koelkast ook nog twee legplanken en drie deurvakken. Dankzij de superkoelen-functie breng je vers bewaarde etenswaren snel op temperatuur.

De afmetingen zijn 85 × 55 × 58 centimeter, waardoor je deze koelkast makkelijk in een hoekje van een garage, schuur, tuinhuis of (bij)keuken kwijt kunt. Ondanks het compacte formaat heeft de koelkast een inhoud van 113 liter. Daarnaast is er ook nog een apart vriesvak van 16 liter. Plaats hierin bijvoorbeeld ijsjes of een heel brood. Nuttig om te weten is dat je de draairichting van de deur zo nodig kunt omkeren. Deze koelkast is in een zwarte en witte behuizing te koop.

ETNA AKV678RVS

Met een prijskaartje van minder dan duizend euro is deze Amerikaanse koelkast van ETNA momenteel goedkoper dan ooit. Bovendien heeft de AKV678RVS ook nog eens een hoge gemiddelde beoordeling van een 8,6. Buiten deze zilverkleurige uitvoering kun je als alternatief de zwarte versie overwegen. Achter de linkerdeur heb je toegang tot een vrieskast van 185 liter. De twee beschikbare lades vriezen wegens no frost-ondersteuning niet aan. Verder heeft de vriezer vijf legplanken en vier deurvakken.

Aan de rechterkant bevindt zich het koelgedeelte met een inhoud van 334 liter. Dankzij vijf draagplateaus, twee lades en drie deurvakken kun je een heleboel producten koel bewaren. Houd vanwege de hoge capaciteit wel rekening met een behoorlijke omvang van 178,6 × 91 × 64,3 centimeter. Een voordeel is het fluisterstille geluidsniveau van 35 decibel. Hierdoor ervaar je tijdens het televisiekijken en muziek luisteren geen hinder. Je stelt via het bedieningspaneel aan de buitenzijde de gewenste temperatuur in.

▼ Volgende artikel
❄️ Koud hè? Zo vind je jouw perfecte elektrische deken
© Tatyana Gladskih
Huis

❄️ Koud hè? Zo vind je jouw perfecte elektrische deken

In de koude wintermaanden is wat extra warmte in huis geen overbodige luxe. Steeds meer mensen kiezen daarom voor een elektrische deken: zo blijf je niet alleen heerlijk warm, maar bespaar je ook op stookkosten. Hoe je een elektrische deken kiest die bij je past, lees je hier.

⏱ In het kort:

Elektrische dekens zijn tegenwoordig mateloos populair, en met het ruime aanbod kan het lastig zijn om de juiste keuze te maken. Daarnaast heb je misschien speciale wensen voor je elektrische deken, afhankelijk van wáár je hem gebruikt, met wie je hem eventueel gebruikt en hoeveel warmte je nodig hebt. In dit artikel helpen we je aan de beste elektrische deken voor jou, rekening houdend met:

  • • De soort deken (onderdeken of bovendeken)
  • • Het formaat dat bij je bed of lichaam past
  • • Het aantal warmtestanden
  • • De veiligheid van de deken
  • • Hoe makkelijk je de deken wast

Lees ook: 10 tips om warm te blijven zonder te stoken

Soort deken

Er zijn twee soorten elektrische dekens: onderdekens en bovendekens. Een onderdeken verwarmt je bed, een bovendeken is ideaal voor op de bank. Lig je dus elke avond te klappertanden in bed, dan is een onderdeken voor jou waarschijnlijk de beste keuze. Vind je het lekker om 's avonds onder een (warm!) kleedje op de bank te kruipen én wil je misschien je stookkosten wat omlaag brengen, dan kies je voor een bovendeken.

Een onderdeken plaats je tussen je matras (of topper) en hoeslaken, zodat de deken het bed van onderaf verwarmt. Je kunt een onderdeken aanzetten op het moment dat je in bed stapt, maar vaker worden onderdekens met behulp van een timer ingeschakeld vóór het liggen, zodat het bed al heerlijk warm is. Vaak regelt een timer ook dat de deken zichzelf na een uur (of twee) vanzelf uitschakelt, zodat er tijdens het slapen geen veiligheidsrisico's ontstaan.

©Leonid Iastremskyi

In tegenstelling tot een elektrische onderdeken leg je een elektrische bovendeken (zoals de naam al zegt) bovenop je, bijvoorbeeld als je op de bank of je favoriete stoel zit. Je herkent deze dekens aan hun extra zachte materiaal, zoals fleece of microvezel. Een bovendeken zet je pas aan op het moment dat je eronder gaat zitten of liggen. Net als onderdekens schakelen de meeste bovendekens zichzelf na verloop van tijd vanzelf uit. Je kunt een bovendeken natuurlijk ook mee naar bed nemen voor wat extra warmte, dus eigenlijk zijn deze dekens multifunctioneel!

Formaat

Zowel onder- als bovendekens zijn verkrijgbaar in verschillende afmetingen. Bedenk dus van tevoren goed hoe groot je je elektrische deken wenst. Onderdekens komen qua breedte overeen met de standaardafmetingen van matrassen: een eenpersoons-onderdeken is meestal 80 centimeter breed, een tweepersoons-onderdeken 140 centimeter. In de lengte zijn ze doorgaans iets korter dan een matras, omdat ze alleen het lichaam hoeven te verwarmen. Handig: veel tweepersoons-onderdekens beschikken over twee schakelaars waarmee je de temperaturen van beide helften apart van elkaar kunt instellen. Scheelt weer geruzie met je partner.

Bovendekens zijn er in compacte, middelgrote en extra grote varianten. Compacte bovendekens hebben een afmeting van (rond de) 100 x 70 centimeter en zijn bedoeld om alleen je schoot of bovenlichaam mee te verwarmen. Middelgrote dekens gaan richting de 150 x 70 centimeter en zijn perfect om je hele lichaam in tewikkelen. Kruip je het liefst samen met je partner onder een kleed? Ga dan voor een extra grote variant van bijvoorbeeld 180 x 130 centimeter.

Warmtestanden

Aan een elektrische deken wil je geen honderden euro's uitgeven, en dat hoeft natuurlijk ook niet. Maar gris ook niet de eerste de beste deken uit de schappen. Sommige elektrische dekens (en dan met name de goedkopere) beschikken namelijk maar over één warmtestand, en de kans is groot dat jij die stand nét te warm of juist te koud vindt. Ook als je de deken op verschillende plekken in huis gaat gebruiken – misschien is je slaapkamer een stuk frisser dan je woonkamer – is het fijn als je de temperatuur van je elektrische deken naar wens kunt instellen. De meeste standaardmodellen hebben vier tot zes warmtestanden, maar er zijn ook dekens met meer dan zeven warmtestanden. Sommige elektrische onderdekens beschikken zelfs over verschillende warmtezones voor schouders, rug en voeten – extra fijn als je snel koude voeten hebt!

Veiligheid

Comfortabel onder (of op) een elektrische deken liggen gaat alleen als je weet dat de deken honderd procent veilig is. Kies voor je eigen gemoedsrust dus voor een deken van een betrouwbaar merk; daarmee weet je zeker dat je een veilig product in huis haalt. Let er ook op dat de deken een automatische uitschakelfunctie én een oververhittingsbeveiliging heeft, zodat-ie nooit te heet wordt. Vermijd het kopen van een tweedehandsdeken, omdat een versleten of beschadigd deken vatbaarder is voor brand en kortsluiting.

©Mariana Rusanovschi

Wasbaarheid

Ook het gemak waarmee een elektrische deken gewassen kan worden, is voor veel mensen belangrijk. Vooral als je kleine kinderen hebt die maar al te graag onder de warme deken kruipen, is de kans op morsen of andere ongelukjes groot. En als je een onderdeken op je bed hebt liggen, wil je die natuurlijk ook regelmatig kunnen opfrissen. Gelukkig kunnen de meeste elektrische dekens na het verwijderen van de elektrische bediening gewoon op 30 graden in de wasmachine worden gewassen. Check wel altijd goed de instructies, want dit geldt niet voor iedere elektrische deken. Elektrische dekens kunnen meestal niet in de droger.

Hoe zuinig is een elektrische deken?

Kun je nauwelijks meer onder je elektrische deken vandaan komen en begin je je zorgen te maken over je energierekening? Nergens voor nodig: een elektrische deken kost namelijk niet meer dan een paar cent per avond. Ja, je leest het goed! Gemiddeld verbruikt een elektrische deken zo'n 50 watt per uur (0,05 kWh), wat met een stroomprijs van € 0,40 neerkomt op twee cent. Lig je dus drie uur onder je heerlijke warme deken, dan ben zo'n zes cent kwijt. Ter vergelijking: een paar uur de verwarming aan kost je al snel twee euro. Als je daadwerkelijk wilt besparen met je elektrische deken is het natuurlijk wel slim om de verwarming lager of helemaal uit te zetten, anders schiet je er alsnog weinig mee op.

P.S. Elektrische kussens zijn er ook!

Op zoek naar een warmtekussen?