{"id":9882,"date":"2020-05-02T21:34:43","date_gmt":"2020-05-02T19:34:43","guid":{"rendered":"https:\/\/openstate.eu\/nl\/?p=9882"},"modified":"2020-05-02T21:40:01","modified_gmt":"2020-05-02T19:40:01","slug":"nederlands-wat-zijn-de-sentimenten-in-berichten-van-lokale-politieke-partijen","status":"publish","type":"post","link":"https:\/\/openstate.eu\/nl\/2020\/05\/wat-zijn-de-sentimenten-in-berichten-van-lokale-politieke-partijen\/","title":{"rendered":"Wat zijn de sentimenten in berichten van lokale politieke partijen?"},"content":{"rendered":"<p><strong>Wie schrijft positief of juist negatief over klimaat, mantelzorg of hondenpoep? Kun je op geautomatiseerde wijze, betrouwbare uitspraken doen over de sentimenten in pers- en nieuwsberichten van lokale politieke partijen? Dat is wat onze stagiair Ludi van Leeuwen de afgelopen drie maanden onderzocht. Hier vertelt ze over haar bevindingen.\u00a0<\/strong><\/p>\n<p><span style=\"font-weight: 400;\">Mijn naam is Ludi, vierdejaars student filosofie en kunstmatige intelligentie aan de Rijksuniversiteit Groningen. De afgelopen drie maanden heb ik stage gelopen bij de Open State Foundation. Ondanks de rare Corona-tijd, heb ik het erg naar mijn zin gehad.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Tijdens mijn stage heb ik gewerkt aan een nieuwe versie van PoliFLW\u2019s sentiment-analyse. <a href=\"https:\/\/poliflw.nl\/\" target=\"_blank\" rel=\"noopener noreferrer\">PoliFLW<\/a> is een Open State-platform dat alle berichten van (bijna) alle lokale politieke partijen verzamelt, een goudmijn aan data dus. Sentiment-analyses zijn interessant omdat ze, zeker op grote schaal, inzicht zouden kunnen geven in de uitingen van lokale politieke partijen. Dit blog legt uit hoe sentiment-analyse werkt (en niet werkt), de problemen waar ik tegenaan liep tijdens het bouwen en wat je er uiteindelijk toch mee kan doen.<\/span><\/p>\n<p><strong>Positief, negatief of neutraal<br \/>\n<\/strong><span style=\"font-weight: 400;\">Je kan een sentiment-analyse gebruiken om te zien of een tekst <em>positief, negatief<\/em> of <em>neutraal<\/em> is. Als lezer doe je dit eigenlijk intu\u00eftief al: gebruikt de schrijver veel bijvoeglijk naamwoorden of schrijft ze juist heel vlakjes en neutraal? Dit kan je bekijken over de hele tekst en zo kan je een hele tekst classificeren als positief, neutraal of negatief.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Je kan ook verder inzoomen: Niet de hele tekst maar juist sentimenten op bepaalde onderwerpen analyseren: dezelfde schrijver kan neutraal schrijven over de opening van een cultureel centrum in het dorp, heel positief schrijven over het geweldige nieuwe ecoduct, en juist heel negatief over die afschuwelijke hondeneigenaren die de vieze drollen van hun luidruchtige hond niet opruimen. De sentimenten geven aan hoe de schrijver over de onderwerpen denkt.<\/span><\/p>\n<p><b>Geautomatiseerde sentiment-analyse<br \/>\n<\/b><span style=\"font-weight: 400;\">Je kan sentiment-analyse met de hand doen, maar dat is tijdrovend en daarom heb ik twee niveaus van sentiment-analyse geautomatiseerd: binnen Poliflw zelf krijgt een hele tekst een classificatie van positiviteit en subjectiviteit, door middel van een API. Op wie.poliflw.nl kan je de sentimenten op specifieke onderwerpen analyseren. Jij selecteert een onderwerp, de sentiment-analyser vindt de teksten in Poliflw die relevant zijn en toont je de gevonden sentimenten op die onderwerpen.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Een voorbeeld: Als je zou willen weten hoe verschillende partijen denken over het onderwerp \u2018mantelzorg\u2019, kan je die term op wie.poliflw.nl invoeren en kiezen hoeveel berichten je wilt meenemen in je analyse. Daar komt een csv-bestand (spreadsheet) uit, waar je vervolgens de mediaan polariteit (hoe positief of negatief iets beschreven wordt) op het woord &#8216;mantelzorg&#8217; kan bepalen, per politieke partij.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Zo is in onderstaande grafiek te zien dat partijen verschillende <\/span><i><span style=\"font-weight: 400;\">mediaan polariteiten<\/span><\/i><span style=\"font-weight: 400;\"> hebben op \u2018mantelzorg\u2019. De SGP is het meest positief, met een mediaan polariteit van ongeveer +37 (polariteit gaat tussen de -100 voor negatief en de +100 voor positief). De andere partijen lijken minder positief dan de SGP &#8211; de PvdA met een mediaan van ongeveer +10 het minst. Voor de goede orde: Dit zijn dus de sentimenten op \u2018mantelzorg\u2019 geanalyseerd op 200 berichten.\u00a0<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-9884\" src=\"https:\/\/openstate.eu\/wp-content\/uploads\/sites\/14\/2020\/05\/distributie-620x305.jpeg\" alt=\"\" width=\"620\" height=\"305\" srcset=\"https:\/\/openstate.eu\/wp-content\/uploads\/sites\/14\/2020\/05\/distributie-620x305.jpeg 620w, https:\/\/openstate.eu\/wp-content\/uploads\/sites\/14\/2020\/05\/distributie-630x310.jpeg 630w, https:\/\/openstate.eu\/wp-content\/uploads\/sites\/14\/2020\/05\/distributie-768x378.jpeg 768w, https:\/\/openstate.eu\/wp-content\/uploads\/sites\/14\/2020\/05\/distributie.jpeg 1400w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/p>\n<p><b>&#8216;De gemeenteraad verroert geen vin&#8217;<br \/>\n<\/b><span style=\"font-weight: 400;\">Het is belangrijk om te vermelden dat mijn sentiment-analyse zoals hij nu is, niet goed genoeg is om serieuze conclusies te trekken over het taalgebruik van politieke partijen. De analyse mist nog te veel aspecten die taal zo leuk en divers maken en pakt alleen eenvoudige, makkelijk te herkennen sentimenten op (en zelfs dat niet altijd op een goede manier).\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Deze sentiment-analyse daarom gezien worden als een tool om onderwerpen te verkennen, en om te kijken of er interessante patronen zitten in de berichten van politieke partijen. Het is geen methode die leidt tot betrouwbare, statistisch-onderbouwde conclusies. Daarvoor\u00a0 is gewoon nog niet genoeg waterdicht. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Hieronder wat voorbeelden die de gebreken van de sentiment-analyse demonstreren:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><b>Spreekwoorden en ironie<\/b><span style=\"font-weight: 400;\">. \u2018De gemeenteraad verroert geen vin\u2019, lijkt mij een overwegend negatief sentiment maar dit wordt niet opgepakt in de analyse. <\/span>En ook <a href=\"https:\/\/assen.sp.nl\/blog\/alle\/jelle-hofstra\/2020\/02\/allemaal-naievelingen\" target=\"_blank\" rel=\"noopener noreferrer\">in deze tekst<\/a><span style=\"font-weight: 400;\">, kan mijn sentiment-analyse niet begrijpen dat \u2018dom volkje\u2019 ironisch is bedoeld.<\/span><\/li>\n<li style=\"font-weight: 400;\"><b>Uitgespreide sentimenten<\/b><span style=\"font-weight: 400;\">: \u2018Een nieuwe kerncentrale in ons dorp? Dat nooit\u2019, wordt niet opgevat als een negatief sentiment rond het onderwerp \u2018kerncentrale\u2019, omdat \u2018kerncentrale\u2019 en \u2018dat nooit\u2019 in twee verschillende zinnen staan. En met de zinnen: \u2018een nieuwe kerncentrale in ons dorp? Over mijn lijk!\u2019 zal de sentiment-analyse al helemaal niks kunnen.<\/span><\/li>\n<li style=\"font-weight: 400;\"><b>Foutpositief &#8211; een sentiment zien waar het niet is:<\/b><span style=\"font-weight: 400;\"> Het woord \u2018naar\u2019 wordt vaak door de Spacy-zinsontleder (<\/span><a href=\"https:\/\/spacy.io\"><span style=\"font-weight: 400;\">https:\/\/spacy.io<\/span><\/a><span style=\"font-weight: 400;\"> ) gezien als een sentiment. Denk aan \u2018een nare man\u201d, in plaats van \u2018ik ga naar de bank\u2019. De bank is, in dit fragment tenminste, niet \u2018naar\u2019.<\/span><\/li>\n<li style=\"font-weight: 400;\"><b>Foutnegatief &#8211; geen sentiment zien waar er wel een is<\/b><span style=\"font-weight: 400;\">: Er komen veel sentimenten in teksten voor, die mijn sentiment-analyse niet herkent als sentimenten. Soms komt dat doordat <a href=\"https:\/\/github.com\/clips\/pattern\" target=\"_blank\" rel=\"noopener noreferrer\">de lijst met sentimenten die ik gebruik <\/a><\/span><span style=\"font-weight: 400;\">niet volledig is. Het woord \u2018genereus\u2019 staat er bijvoorbeeld niet in. Dit zou ik met de hand kunnen toevoegen, maar wanneer hou je op met aanvullen? <\/span>Soms komt dit ook doordat taal heel lastig is, en de functie die ik heb geschreven om sentimenten aan onderwerpen te koppelen bepaalde zinsconstructies niet kan herkennen. Dit is zeker iets om naar te blijven kijken als taaltechnologie zich blijft verbeteren.<\/li>\n<\/ul>\n<p><b>Ok, toch \u00e9\u00e9n voorzichtige conclusie<br \/>\n<\/b><span style=\"font-weight: 400;\">Ondanks al deze beperkingen is het toch mogelijk om rond te kijken in de data en enigszins generalistisch iets te zeggen over sentimenten.\u00a0<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Zo blijkt bijvoorbeeld dat de volledige nieuwsberichten van politieke partijen bijna altijd <\/span><i><span style=\"font-weight: 400;\">positief<\/span><\/i><span style=\"font-weight: 400;\"> of <\/span><i><span style=\"font-weight: 400;\">neutraal<\/span><\/i><span style=\"font-weight: 400;\"> zijn. De teksten kunnen wel negatieve sentimenten bevatten op een bepaald onderwerp, maar de overgrote meerderheid van de sentimenten in de tekst zijn meestal positief. <\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ik heb zes semi-willekeurige onderwerpen geanalyseerd (met 100 teksten elk). Daar is dezelfde verdeling te zien: de meeste teksten zijn<\/span><i><span style=\"font-weight: 400;\"> gemengd neutraal <\/span><\/i><span style=\"font-weight: 400;\">(positieve en negatieve uitingen), daarna komen de <\/span><i><span style=\"font-weight: 400;\">eenduidig positieve<\/span><\/i><span style=\"font-weight: 400;\"> teksten (vooral positieve uitingen). Teksten zijn eigenlijk nooit negatief (gemengd of eenduidig). Dit is onafhankelijk van het onderwerp, zoals te zien is in de staafgrafiek hieronder.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-9886\" src=\"https:\/\/openstate.eu\/wp-content\/uploads\/sites\/14\/2020\/05\/mantelzorg-620x340.png\" alt=\"\" width=\"620\" height=\"340\" srcset=\"https:\/\/openstate.eu\/wp-content\/uploads\/sites\/14\/2020\/05\/mantelzorg-620x340.png 620w, https:\/\/openstate.eu\/wp-content\/uploads\/sites\/14\/2020\/05\/mantelzorg-566x310.png 566w, https:\/\/openstate.eu\/wp-content\/uploads\/sites\/14\/2020\/05\/mantelzorg-768x421.png 768w, https:\/\/openstate.eu\/wp-content\/uploads\/sites\/14\/2020\/05\/mantelzorg.png 1400w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/p>\n<p><b>Kijk met ons mee!<br \/>\n<\/b><span style=\"font-weight: 400;\">Natuurlijk valt er te twisten over onder meer de categorisatie: waar leg je precies de grens tussen <\/span><i><span style=\"font-weight: 400;\">gemengd neutraal <\/span><\/i><span style=\"font-weight: 400;\">en <\/span><i><span style=\"font-weight: 400;\">eenduidig positief<\/span><\/i><span style=\"font-weight: 400;\">? Maar dan nog blijft het sterke verschil tussen de hoeveelheid positieve en de negatieve berichten opvallend.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Hoe dan ook: het is duidelijk dat er nog een lange weg te gaan is met betrekking tot sentiment-analyse. Er zijn nog teveel fouten en beperkingen om er blind (of zelfs slechtziend) op te varen. Maar geautomatiseerde sentiment-analyse is wel bruikbaar om snel een indicatie te krijgen van wat verschillende lokale politieke partijen zeggen over een onderwerp (en dat later misschien te vergelijken met wat er in hun verkiezingsprogramma staat) of als manier om te beginnen aan een onderzoek over woordgebruik door politici.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ben jij zelf op idee\u00ebn gekomen? Wat vinden lokale partijen over onderwerpen die jij belangrijk vindt? Ga zelf aan de slag met sentiment-analyse en vindt sentimenten op specifieke onderwerpen op (<\/span><a href=\"https:\/\/wie.poliflw.nl\"><span style=\"font-weight: 400;\">https:\/\/wie.poliflw.nl<\/span><\/a><span style=\"font-weight: 400;\">), kijk naar de sentiment-classificaties op (<\/span><a href=\"https:\/\/poliflw.nl\"><span style=\"font-weight: 400;\">https:\/\/poliflw.nl<\/span><\/a><span style=\"font-weight: 400;\">), of clone de repo op github (<\/span><a href=\"https:\/\/github.com\/aludi\/wieVindtWatWaarvan\"><span style=\"font-weight: 400;\">https:\/\/github.com\/aludi\/wieVindtWatWaarvan<\/span><\/a><span style=\"font-weight: 400;\">). En laat het ons vooral <a href=\"mailto:contact@openstate.eu\">weten<\/a>!<\/span><\/p>\n<p><em>Hoofdafbeelding van <a href=\"https:\/\/pixabay.com\/nl\/users\/geralt-9301\/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=1219546\">Gerd Altmann<\/a> via <a href=\"https:\/\/pixabay.com\/nl\/?utm_source=link-attribution&amp;utm_medium=referral&amp;utm_campaign=image&amp;utm_content=1219546\">Pixabay<\/a><\/em><\/p>","protected":false},"excerpt":{"rendered":"<p>Wie schrijft positief of juist negatief over klimaat, mantelzorg of hondenpoep? Kun je op geautomatiseerde wijze, betrouwbare uitspraken doen over de sentimenten in pers- en nieuwsberichten &hellip; <a href=\"https:\/\/openstate.eu\/nl\/2020\/05\/wat-zijn-de-sentimenten-in-berichten-van-lokale-politieke-partijen\/\">Lees meer<\/a><\/p>\n","protected":false},"author":49,"featured_media":9888,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,531,14,542],"tags":[],"class_list":["post-9882","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news","category-poliflw-2","category-politwoops","category-scripties"],"acf":[],"_links":{"self":[{"href":"https:\/\/openstate.eu\/nl\/wp-json\/wp\/v2\/posts\/9882","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/openstate.eu\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/openstate.eu\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/openstate.eu\/nl\/wp-json\/wp\/v2\/users\/49"}],"replies":[{"embeddable":true,"href":"https:\/\/openstate.eu\/nl\/wp-json\/wp\/v2\/comments?post=9882"}],"version-history":[{"count":5,"href":"https:\/\/openstate.eu\/nl\/wp-json\/wp\/v2\/posts\/9882\/revisions"}],"predecessor-version":[{"id":9890,"href":"https:\/\/openstate.eu\/nl\/wp-json\/wp\/v2\/posts\/9882\/revisions\/9890"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/openstate.eu\/nl\/wp-json\/wp\/v2\/media\/9888"}],"wp:attachment":[{"href":"https:\/\/openstate.eu\/nl\/wp-json\/wp\/v2\/media?parent=9882"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/openstate.eu\/nl\/wp-json\/wp\/v2\/categories?post=9882"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/openstate.eu\/nl\/wp-json\/wp\/v2\/tags?post=9882"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}