01Vad verktyget visar
Politikerfokus svarar på en avgränsad fråga: vilka sakfrågor driver en enskild riksdagsledamot, och återkommer ledamoten till dem över tid?
Underlaget är de dokument ledamöterna själva skriver (motioner, skriftliga frågor och interpellationer) under mandatperioden. Verktyget läser inte rubrikerna utan yrkandena: de numrerade, konkreta krav som står i varje motion.
Detta är ett mått på vad ledamoten driver, inte på vad ledamoten får igenom.
Nästan alla motionsyrkanden avslås, oavsett parti. Se avsnitt 10 för siffrorna och varför verktyget därför inte har något genomslagsbetyg.
02Källor
Två källor, båda offentliga och fritt tillgängliga. Ingen inloggning krävs, och verktyget lägger inte till några egna bedömningar i uppgifterna.
| Källa | Används till | Format |
|---|---|---|
| data.riksdagen.se Sveriges riksdag |
Alla dokument, yrkanden, undertecknare, utskottstillhörighet och beslut | dokumentlista och dokument, JSON |
| SND ”Vi vill!” Svensk nationell datatjänst |
Partiernas valmanifest 2022 | Arkiverad text |
Valmanifest finns inte i riksdagens data. De ligger helt utanför och hämtas från SND:s forskningsarkiv i stället för partiernas egna webbplatser, dels för att arkivet är stabilt över tid och citerbart, dels för att flera partiers webbplatser stoppar automatisk nedladdning (Vänsterpartiets egen PDF går till exempel inte att hämta, servern svarar 403).
03Vad som hämtas
Hela mandatperioden sedan valet 2022, fram till senaste uppdateringen. Inga dokument har valts bort. Allt av dessa typer under dessa riksmöten ingår.
| Dokumenttyp | 2022/23 | 2023/24 | 2024/25 | 2025/26 | 2026/27 | Totalt |
|---|---|---|---|---|---|---|
Motioner mot | 2 287 | 2 522 | 3 278 | 4 112 | 112 | 12 311 |
Skriftliga frågor fr | 979 | 1 122 | 1 418 | 1 015 | 1 | 4 535 |
Interpellationer ip | 432 | 853 | 751 | 591 | 0 | 2 627 |
| Summa | 3 698 | 4 497 | 5 447 | 5 718 | 113 | 19 473 |
Av dessa har 19 354 (99,4 %) uppgift om vem som står bakom dem. Resterande 119 saknar undertecknare i riksdagens egna uppgifter och kan därför inte kopplas till någon ledamot. De räknas inte alls.
För varje motion hämtas dessutom hela dokumentet för att komma åt yrkandena. Det gav 45 795 yrkanden ur 13 090 motioner. 127 motioner saknar strukturerade yrkanden, oftast tillbakadragna motioner eller rena budgettabeller.
04Från motion till yrkande
En motionsrubrik är en etikett. Yrkandet är det faktiska kravet. Nästan alla yrkanden är skrivna enligt en standardformulering (97,6 % följer exakt samma mall), och den säger inget om innehållet. Den skalas därför bort och kvar blir kravet i ledamotens egna ord.
Etisk avel
Riksdagen ställer sig bakom det som anförs i motionen om att utreda införandet av en kartläggning av trubbnosdjur med andningssvårigheter och tillkännager detta för regeringen.
utreda införandet av en kartläggning av trubbnosdjur med andningssvårigheter
Det är alltså yrkandet som analyseras, inte hela dokumentet. Ett typiskt yrkande (median) är 13 ord långt, och en motion innehåller i snitt 3,5 yrkanden. De 2,4 % som har en annan inramning (budgetyrkanden, ”Riksdagen avslår propositionen” och liknande) läses inte som sakfrågor.
Skriftliga frågor och interpellationer har inga yrkanden. För dem används rubriken, som i praktiken är frågan (”Sveriges stöd till Somaliland”). Rubriken säger mindre än ett yrkande, vilket är bra att veta när man läser en profil som mest består av frågor.
05Vilka dokument räknas som ledamotens egna
Bara dokument ledamoten själv står bakom bidrar till ledamotens sakfrågor:
- Motion: räknas bara för den som står först bland undertecknarna.
- Skriftlig fråga och interpellation: räknas för frågeställaren. Det ansvariga statsrådet registreras separat och räknas aldrig som avsändare.
Skälet är att en partimotion kan ha ett tjugotal undertecknare. Att skriva under en sådan säger lite om ledamotens egna prioriteringar. Att stå först säger betydligt mer. Skillnaden är stor i praktiken: en ledamot står först på 609 av sina 630 motioner, en annan på nästan inga.
Båda talen visas därför var för sig i profilen (egna motioner och medundertecknade), och profilen varnar uttryckligen när någon nästan bara medundertecknar, eftersom antalet underskrifter då säger mer om partiets arbete än om personen.
06Hur sakfrågor rangordnas
Först tas de fasta formuleringar bort som vissa partier lindar in kravet i, som ”ge lämplig myndighet i uppdrag att” och ”Sverige som enskilt land såväl som medlem i EU och FN ska”. Utan det steget blir lämplig myndighet en av kammarens största sakfrågor, trots att frasen bara betyder ”någon”.
Därefter analyseras texten grammatiskt med spaCy:s svenska modell, som körs lokalt. Den avgör bara varje ords ordklass och grundform, aldrig vad texten betyder. Ur texten plockas sedan fraser på ett till fyra ord. En fras måste sluta på ett substantiv, och bara substantiv, adjektiv, prepositioner och konjunktioner får ingå. Annars blir resultatet grammatiska rester: ett adjektiv vars substantiv hamnade utanför (cirkulär ur ”cirkulär växtnäring”), ett ägande ord utan det som ägs (kvinnors och flickors) eller en ensam prepositionsfras (hos kronofogden). Två substantiv i rad räknas som en gräns mellan två fraser, eftersom svenskan skriver sammansättningar som ett ord.
Att bara räkna hur ofta en fras förekommer fungerar inte. Då hamnar ord som införande, reformering och säkerställande överst hos alla. Det är ord för att styra, inte ämnen. Att filtrera på frekvens hjälper inte heller: bekämpning och varg förekommer i nästan lika många dokument. Fyra faktorer avgör i stället:
Hur få andra ledamöter som använder frasen. En fras hela kammaren använder beskriver ingen.
Ett verkligt ämne ligger i ett politikområde: varg hamnar till 100 % i miljö- och jordbruksutskottet, lärarutbildningen till 100 % i utbildningsutskottet. Styrandets verb sprider sig över alla femton: införande har bara 17 % i sitt största utskott. Det är den här faktorn, inte frekvensen, som skiljer ämne från verb.
En fråga som återkommer flera riksmöten är en prioritering. En som dyker upp en gång är sällan det.
En flerordsfras namnger något; ett ensamt substantiv gör det ofta inte. Prepositioner och konjunktioner räknas inte, så ”rätt till tolk” har två ord.
Faktorerna multipliceras med antalet yrkanden. Därefter slås fraser ihop som beskriver samma sak: en kortare fras stryks om en längre säger samma sak tydligare, och två olika fraser som pekar på samma yrkanden räknas som en. Fraser med färre än två yrkanden visas inte, och högst tolv sakfrågor per ledamot redovisas.
Ett ensamt vanligt substantiv måste dessutom hamna till minst 45 % i ett och samma utskott, räknat över hela kammaren, för att visas alls. Ord som information och samarbete sprids över många utskott och faller bort, medan skola och fiske står kvar. Egennamn är undantagna, eftersom Gaza eller Skåne av naturen spänner över flera utskott.
Siffran vid varje sakfråga är antal yrkanden, markeringarna visar vilka riksmöten. Klickar man fram underlaget visas yrkandena i klartext. Yrkanden som lämnats in ordagrant flera gånger visas en gång, med ×N, eftersom många ledamöter lämnar in samma krav år efter år.
Sakfrågor över flera ledamöter
Fliken Sakfrågor visar samma fraser, grupperade tvärs över ledamöter i stället för inom en enda. Utgångspunkten är grundformen: biståndet och bistånd räknas som samma sakfråga och visas med kammarens vanligaste skrivning. Men att två ledamöter använt samma ord betyder inte att de driver samma sak, och samma krav kan skrivas med olika ord. Varje gruppering prövas därför också mot vad yrkandena faktiskt säger, med språkmodellen från avsnitt 9. Varje ledamots sakfråga får ett eget läge i modellens betydelserum, räknat som medelvärdet av de yrkanden den bygger på. Sedan följer två steg.
Om en ledamots yrkanden inte liknar de andra ledamöternas under samma rubrik mer än två slumpvis valda yrkanden brukar göra, lyfts ledamoten ut ur gruppen. Frasen står kvar på ledamotens egen sida.
Två formuleringar blir en sakfråga bara om orden redan pekar åt samma håll: den ena rubriken är en snävare version av den andra (tbe-vaccination och avgiftsfri tbe-vaccination för barn), eller båda handlar om samma ovanliga sak (betänketid vid äktenskapsskillnad och betänketiden vid skilsmässa). Dessutom måste varje par i gruppen nå gränsen, och två olika ortnamn stoppar en sammanslagning.
Modellen får aldrig föreslå en sammanslagning på egen hand. I det här materialet skiljer den väl mellan politikområden: sakfrågor från olika utskott har medianlikhet 0,27, och bara färre än 1 på 100 000 sådana par når 0,80. Men inom ett område uppfattar den olika saker som nästan identiska. bohusbanan och utbyggnad av södra stambanan ligger lika nära varandra som två formuleringar av samma krav. Utan kravet på gemensamma ord hade ledamöter hamnat under järnvägssträckor de aldrig yrkat på.
Under mandatperioden 2026–2030 delas 1 sakfrågor av minst två ledamöter. 0 av dem förenar olika formuleringar; raden visar då de andra formuleringarna under ”även”, och varje ledamot visas med sin egen. 0 ledamöter har lyfts ut ur en grupp. 0 sakfrågor bygger på text som språkmodellen inte har analyserat, främst rubriker på skriftliga frågor, och grupperas därför enbart på grundform.
En grupp där ledamöternas sakfrågor i median ligger under 0,65 märks brett ämne: rubriken är gemensam, kraven är det inte. 1 sakfrågor har den märkningen. Klicka fram yrkandena innan du räknar dem som en gemensam fråga.
Grupperingen är försiktig med avsikt. En felaktig sammanslagning tillskriver en ledamot ett krav ledamoten aldrig ställt; en missad gör bara listan kortare. Listan visar därför snarare för lite än för mycket av det som drivs över partigränserna: brottslighet och kriminalitet delar inga ord och slås inte ihop. En fras bara en enda ledamot använt visas inte här alls; den redovisas i stället på ledamotens egen sida under Ledamöter, eftersom den speglar en enskild ledamots vokabulär snarare än ett gemensamt ämne.
07Politikområden
Politikområdet är inte gissat. Det är det utskott riksdagen själv skickade motionen till (en officiell klassificering gjord av kammarkansliet, inte av det här verktyget). De femton utskotten översätts bara till läsbara namn: MJU blir ”Miljö, klimat och jordbruk”, SfU blir ”Socialförsäkring och migration”.
Beteckningarna ”specialiserad”, ”tydligt fokus” och ”bred agenda” i profilhuvudet visar hur samlat arbetet är. De bygger på ett koncentrationsmått (Herfindahl) över hur ledamotens motioner fördelar sig mellan utskotten: summan av kvadrerade andelar. Nära 1 betyder att nästan allt ligger i ett utskott, nära 0 att arbetet är spritt. Från 0,30 räknas ledamoten som specialiserad, från 0,16 som tydligt fokuserad.
08Vallöften
Fliken Vallöften kopplar 2022 års valmanifest till vad partiets egna ledamöter faktiskt lämnade in. Tre steg, alla med felkällor värda att känna till.
Att plocka ut löftena
Svenska valmanifest är oftast skrivna som ”Vi vill:” följt av punktlistor. Punkterna är löftena, så den uppdelning som forskningen normalt gör för hand är i praktiken redan gjord av partiet. Men hur ett parti markerar sin lista varierar, och en lista som inte känns igen gör att partiets manifest felaktigt behandlas som löpande text. Fyra former läses: punktlistor (oavsett vilket tecken partiets layoutprogram råkade använda), numrerade listor (Centerpartiets manifest 2026 är 314 numrerade löften, Liberalernas 2022 är 75), styckelistor (Kristdemokraterna markerar sina löften varken med tecken eller siffra, varje löfte är helt enkelt sitt eget stycke) och till sist en uppdelning i meningar för manifest som helt saknar listor.
En listpunkt är inte alltid ett löfte, och enheten beror på partiet. Socialdemokraterna skriver stycken med fyra–fem separata åtaganden i varje, så varje mening behandlas som ett eget löfte. Centerpartiets numrerade rubrik är åtagandet (”Inför ett förbud mot PFAS”) och stycket under argumenterar bara för det, medan Liberalernas rubrik är en slogan (”Fokus på svenska språket”) med åtagandena i brödtexten. Rubriken används därför när den går att pröva på egen hand, annars delas punkten upp i meningar.
Fyra skäl att inte redovisa siffror
Ett parti kan bli utan betyg av fyra skilda skäl. De betyder olika saker, och att ange fel skäl vore ett felaktigt påstående om partiet, så verktyget skiljer på dem.
Vänsterpartiet 2022: det enda manuella ingreppet i hela kedjan
Vänsterpartiet gick till val 2022 på en valplattform som kongressen antagit. Den beskriver en politisk riktning i löpande text och är ingen lista med löften. Skillnaden går att mäta utan att lita på den automatiska inläsningen: 1,7 % av plattformens meningar innehåller ett uttryckligt löftesord (vi vill, vi kräver, inför …), mot 3,9 % för det näst lägsta partiet och 11–17 % för fem av de övriga sju. Den automatiska inläsningen hittade bara fem löften i 7 834 ord.
Löftena är därför avgränsade för hand, vilket forskningen om löftesuppfyllelse gör rutinmässigt med sådana manifest. Det är det enda steget i hela processen där bedömningen inte är partiets egen, och det är begränsat på två sätt:
- Varje rad är ett ordagrant utdrag ur SND:s källtext. Ingenting är omskrivet eller sammanfattat, och programmet stoppar om någon rad inte finns ordagrant i manifestet. Kontrollen görs automatiskt i programmet och är inte bara ett löfte. Bedömningen gäller därmed bara var gränserna går, aldrig vad partiet lovat.
- Löftena är märkta som handavgränsade (
kodad) och blandas aldrig in i siffrorna för partier vars löften är deras egna punkter. Listan förs för hand och hålls åtskild från de hämtade uppgifterna.
De 46 löftena betygsätts inte. Ett utdrag ur löpande text får med sig omgivande bisatser och blir längre än en punktlistas löfte: 124 tecken i median mot 58–90 för punktpartierna. Mot yrkandena ger den extra ordmassan både falska träffar (”Det offentliga ska ta över ansvaret för elnätet” matchade ett yrkande om garantipension) och missade riktiga (”kalhyggesbruket fasas ut” missar ”hyggesfritt skogsbruk”). En stickprovskontroll av punktpartiernas svaga träffar vid samma gräns visade motsatsen: de flesta av deras är äkta. Betygen vore alltså inte jämförbara.
Att hitta matchande yrkanden
Sökningen görs med BM25, en vanlig metod för textsökning, över yrkandetexterna. Den är anpassad för svenska på två sätt. Sammansättningar delas mot de ord som faktiskt förekommer i yrkandena: utan det matchar ekocidlagstiftning aldrig ekocid, eftersom svenskan skriver ihop sammansättningar. Och träffstyrkan mäts som täckning av löftets nyckelord, inte som rå poäng, eftersom rå BM25-poäng växer med frågans längd och därför varken går att jämföra mellan löften eller sätta en gräns vid. Täckning är begränsad till 0–100 % och går att citera: ”det här yrkandet innehåller 71 % av löftets nyckelord”.
Betygen
| Betyg | Villkor | Betyder |
|---|---|---|
| Tydlig träff | ≥ 55 % | Ett yrkande upprepar löftets nyckelord. |
| Svag träff | 33–55 % | Delvis överlapp. Läs yrkandet och bedöm själv. |
| Ingen träff | < 33 % | Okänt: det är inte belagt att partiet struntat i frågan. |
| För vagt | < 4 ord | Löftet innehåller för lite som går att pröva och räknas inte alls. |
Procenttalet ”tydlig träff” beräknas på löften som går att pröva. Vaga löften räknas bort ur nämnaren, annars skulle ett parti straffas för att ha skrivit ett inspirerande manifest.
| Löftets längd | Antal | Tydlig träff | Ingen träff |
|---|---|---|---|
| under 60 tecken | 221 | 21,7 % | 38,0 % |
| 60–80 | 250 | 11,2 % | 54,4 % |
| 80–100 | 181 | 6,6 % | 56,9 % |
| 100–130 | 161 | 5,0 % | 61,5 % |
| över 130 | 111 | 4,5 % | 72,1 % |
Det är inte justerat, och skälet är detsamma som för Vänsterpartiets lista ovan. Att rätta till det kräver att löftena delas vid gränserna mellan åtagandena, alltså att någon annan än partiet bestämmer var ett löfte slutar och nästa börjar. Det är precis det ingrepp som gör Vänsterpartiets lista till en egen, obetygsatt kategori, och att göra det maskinellt åt sju partier vore ett svagare ingrepp än det som avvisades för ett. Tre tänkbara lösningar har mätts och förkastats: att normalisera täckningsmåttet för längd (måttet är redan normaliserat, och tre varianter flyttade siffrorna 0,0 procentenheter), att låta språkmodellen sätta betyg (den skiljer inte rätt träff från fel, se avsnitt 9), och att dela löften automatiskt vid ”och” (vinsten kommer av att texten halveras, inte av att ett åtagande hittas).
09Språkmodellen och vad den inte får göra
Ordbaserad sökning kan inte överbrygga en omformulering. Löftet ”sätta stopp för vinstjakten i skolan” och yrkandet ”förbud mot vinstutdelande aktiebolagsskolor” är samma politik utan ett enda gemensamt innehållsord. Alla yrkanden har därför också analyserats med KB-SBERT, en svensk språkmodell från Kungliga biblioteket, som körs lokalt.
Modellen påverkar inte betygen. För vallöften föreslår den bara texter att läsa själv. Under fliken Sakfrågor bekräftar den grupperingar som orden redan föreslagit (avsnitt 6).
Det är ett medvetet val efter mätning, inte försiktighet på känsla.
Om siffrorna i det här avsnittet: till skillnad från sidans övriga tal, som räknas om vid varje uppdatering, kommer tabellen nedan från ett engångsexperiment utfört 9 september 2026. Den beskriver ett metodval, inte ett löpande mått.
En första kontroll såg utmärkt ut: verkliga omformuleringar fick likhet 0,61–0,86, orelaterade par omkring 0,20. Den kontrollen var fel. Den rättvisande jämförelsen är inte ett slumpmässigt par, utan det bästa av 7 506 kandidater, och i en så stor mängd ligger alltid något nära. Mätt korrekt:
| Mätning | Likhet |
|---|---|
| MP:s löften mot MP:s egna yrkanden (bästa träff) | 0,823 |
| MP:s löften mot SD:s yrkanden (bästa träff) | 0,743 |
| Andel av dessa som ändå överstiger 0,60 | 97 % |
| Det rätta yrkandet, där ordmatchningen är säker | 0,843 |
| Bästa träffen hos ett parti som inte skrivit löftet | 0,867 |
Det rätta yrkandet får alltså i genomsnitt lägre likhet än brus från ett annat parti. Inte heller en regel som krävde en viss marginal mot bruset fungerade. En gräns för likhet hade visat att varje parti höll omkring 90 % av sina löften: en självsäker osanning.
Det modellen är bra på är att hitta rätt text i en stor mängd: för löftet om vinstjakten placerar den ”förbud mot vinstutdelande aktiebolagsskolor” som nummer 5 av 7 486. Sådana förslag visas under rubriken Närmast i betydelse med likhetstalet utsatt, uttryckligen som en läslista och aldrig som bevis.
Modellen rättade också ett av verktygets egna tidigare påståenden. En ordsökning hade gett slutsatsen att MP inte drivit arbetstidsförkortning; modellen hittade yrkandet ”se över hur normalarbetstiden kan sänkas ytterligare från 35 timmar i veckan”. Det är precis den sortens fel som gör att ”ingen träff” aldrig får läsas som ”har inte drivit”.
10Varför det inte finns något genomslagsbetyg
Den självklara frågan är ”hur mycket får ledamoten igenom?”. Den går inte att ställa meningsfullt, och det är ett resultat i sig. Riksdagens data innehåller kammarens beslut för varje enskilt yrkande. Över hela materialet:
| Kammarens beslut | Antal | Andel av avgjorda |
|---|---|---|
| Avslag | 45 412 | 99,73 % |
| Bifall | 71 | 0,16 % |
| Bifall delvis | 47 | 0,10 % |
| Övrigt | 6 | 0,01 % |
| Ännu inte avgjorda | 259 | räknas inte |
118 av 45 536 avgjorda yrkanden bifölls i någon form: 0,26 %. Andelen är i praktiken densamma för regeringspartierna som för oppositionen, eftersom regeringens politik går genom propositioner och inte genom ledamöters motioner. Ett genomslagsmått hade rangordnat 349 personer på en skala där alla får noll.
Avslagssiffran inkluderar de 55 yrkanden som avslagits i flera delbeslut (Avslag,Avslag och längre). Bifallssiffran inkluderar ett yrkande som delvis bifölls och delvis avslogs.
Det betyder inte att motionerna är meningslösa. De är hur en ledamot sätter en fråga på dagordningen, binder sig offentligt vid en ståndpunkt och håller ett ämne levande. Det är det verktyget mäter.
11Antaganden
Val som verktyget gör åt dig, och som du kan ha en annan uppfattning om:
Att stå först bland undertecknarna likställs med att driva frågan. I verkligheten kan ordningen ibland avspegla vem som suttit längst eller hur arbetet fördelats inom partiet snarare än vem som skrev texten.
Yrkanden räknas som likvärdiga enheter. En ledamot som delar upp en fråga i sex yrkanden framstår som mer aktiv i den frågan än en som samlar allt i ett.
Att lämna in samma krav flera riksmöten tolkas som ett långsiktigt engagemang. Det kan också vara rutin: samma text återanvänd utan större eftertanke.
Utskottet som behandlar motionen avgör vilket ämne den hör till. Frågor som spänner över flera områden hamnar i det utskott kammaren valde, inte nödvändigtvis där en läsare hade placerat dem.
Skriftliga frågor och interpellationer saknar yrkanden och läses via sin rubrik, som är kortare och mindre precis än en yrkandetext.
Vallöften hämtas ur det skrivna valmanifestet. Löften som gavs i debatter, utspel eller intervjuer finns inte med.
Ett partis löfte söks mot alla partiets ledamöters yrkanden, inte mot en enskild ledamots. Ingen enskild person hålls ansvarig för ett partilöfte.
55 % och 33 % täckning är valda så att en tydlig träff ska gå att försvara vid genomläsning. De är bedömningar, inte naturlagar, och andra gränser ger andra siffror.
Under den gränsen redovisas inga betyg, eftersom utfallet då säger mer om hur mycket underlag som finns än om partiet. Gränsen ligger i det observerade glappet mellan 1 230 och 4 037 yrkanden, men var i glappet den läggs är en bedömning.
Varje rad är ett ordagrant utdrag ur partiets egen text, maskinellt kontrollerat, men vilka stycken som räknas som löften är ett urval gjort för det här verktyget. Ett annat urval hade gett en annan lista. Därför betygsätts de inte.
Ordklass och grundform avgörs av ett statistiskt språkverktyg som ibland tar fel, till exempel läser ett adjektiv som ett substantiv. En felläsning kan släppa igenom ett fragment som sakfråga eller hålla borta en verklig.
Om två ledamöter driver samma sakfråga avgörs av orden plus en gräns på språkmodellens likhet. Gränsen 0,80 är satt efter genomläsning av gränsfallen. En lägre gräns hade slagit ihop fler verkliga omformuleringar men också fler olika krav; en högre hade gjort listan kortare och säkrare.
12Vad verktyget inte mäter
- Utskottsarbetet: där mycket av det verkliga inflytandet sker, bakom stängda dörrar och utan spår i dokumenten.
- Voteringar: hur ledamoten faktiskt röstat. Uppgifterna finns hos riksdagen men används inte här.
- Debatter och anföranden: talartid i kammaren ingår inte.
- Partimotioner och budgetmotioner: de räknas som medundertecknade och bidrar inte till sakfrågorna.
- Genomslag: se avsnitt 10.
- Kvalitet: ingenting här säger om ett förslag är bra, genomtänkt eller finansierat. Bara att det lagts fram.
13Tekniska detaljer
Avsnitten ovan förklarar vad som mäts och varför. Det här avsnittet är för den som vill se hur, med de faktiska parametrar som används.
Hämtning och extraktion
fetch.py bläddrar igenom riksdagens dokumentlista, 200 dokument per sida, och sparar varje sida som en egen fil. Ett stängt riksmötes sidor cachas för alltid; det pågående riksmötets sidor hämtas alltid på nytt, eftersom varje ny motion knuffar allt senare ett steg längre bak och en gammal förstasida då skulle dölja allt som tillkommit. Sidorna överlappar något vid gränsen mellan sidor (API:ets sortering är inte helt stabil mellan anrop), vilket gav 891 dubblettrader av 20 172 (4,4 %) innan de togs bort på dok_id.
Det går inte att hämta ett enskilt yrkande för sig: varje variant av anropet returnerar hela dokumentet, omkring 137 kB. enrich.py hämtar därför varje motion för sig, med 10 samtidiga trådar, plockar ut bara nummer, lydelse, utskott och kammarbeslut för varje yrkande, och kastar resten direkt i stället för att cacha ett gigabyte HTML. Körningen är återstartbar: redan extraherade dok_id läses ur den befintliga yrkanden.jsonl och hoppas över, och misslyckade hämtningar samlas för att försökas igen vid nästa körning. Båda skripten identifierar sig med ett eget User-Agent-huvud och gör om ett misslyckat anrop upp till fyra gånger med stigande väntetid.
Ordklasstaggningen i kod
Ledamöter lämnar ofta in samma krav ordagrant flera riksmöten, så den unika textmängden är mycket mindre än hela korpusen; spaCy taggar därför varje unik text en gång, inte varje förekomst, med sv_core_news_md och bara taggnings- och lemmatiseringsstegen inkopplade (satsdelsanalys och namnigenkänning stängs av, eftersom ingetdera används).
Modellens grundform accepteras inte rakt av. Den lemmatiserar efter sammanhang och generaliserar ibland för långt, till exempel äldre → gammal; en grundform godtas därför bara när ordet faktiskt börjar som sin egen grundform. En genitiv-s skalas bort för sig, bara när ordet är i genitiv och lemmat annars är oförändrat. Eftersom samma ord kan få två olika grundformer beroende på sammanhang (Trafikverket som namn respektive som vanligt substantiv), avgörs varje ords grundform till sist genom majoritetsröstning över hela korpusen, så att en sakfråga inte visas på två stavningar.
Språkmodellen: inställningar och trösklar
KB-SBERT körs lokalt via sentence-transformers, på CPU med alla kärnor. Modellens fönster är satt till 96 token i stället för standardens 384: ett medianyrkande är omkring 13 ord, så nästan hela beräkningen skulle annars gå åt till utfyllnad. Vektorerna normaliseras vid kodning, så att en skalärprodukt är cosinuslikhet utan ytterligare steg.
Inbäddningarna cachas i en komprimerad .npz-fil, sparade per dokument#yrkandenummer. En ny körning kodar bara de nycklar som saknas i cachen; en oförändrad korpus kostar därför i praktiken noll sekunder, och ett helt nytt riksmöte kostar bara sina egna nya yrkanden. Filens modellnamn sparas med den, så ett modellbyte upptäcks och tvingar fram en fullständig omkodning i stället för att tyst blanda vektorer från två modeller.
| Konstant | Värde | Används till |
|---|---|---|
SPLIT_MIN | 0,50 | Under denna liknar en ledamots yrkanden ingen annans under samma rubrik; ledamoten lyfts ut ur gruppen (avsnitt 6). |
MERGE_MIN | 0,80 | Varje par i en sammanslagen grupp måste nå hit, utöver att orden redan måste peka åt samma håll (avsnitt 6). |
BROAD_BELOW | 0,65 | Under denna medianlikhet märks en grupp ”brett ämne” (avsnitt 6). |
max_seq_length | 96 token | Kodningsfönstret, satt efter yrkandenas faktiska längd. |
Dessa tal styr bara grupperingen av sakfrågor på avsnitt 6. Löftesbetygen i avsnitt 8 sätts helt lexikalt, av skälet som förklaras där; modellen bidrar där bara en lista att läsa, aldrig ett betyg.
Löftessökningen i kod
Sökmotorn är en egen implementation av BM25 på omkring 40 rader (k1=1,2, b=0,75) i stället för ett beroende, med två svenskanpassningar. Sammansättningar delas mot korpusens egen ordlista i stället för mot en ordbok: ett ord på minst nio tecken provas vid varje tänkbar delningspunkt (plus den valfria länken -s-), och den delning väljs där båda halvorna finns minst tre gånger var i korpusen och den lägre av de två förekomsterna är störst. Det kräver ingen morfologi, bara att båda halvorna redan är ord ledamöterna faktiskt använder.
Träffstyrkan mäts som andelen av löftets sex mest särskiljande ord (rankade efter idf) vars sammanlagda vikt finns representerad i ett givet yrkande, inte som BM25:s råpoäng, eftersom råpoängen växer med frågans längd och varken kan jämföras mellan löften eller tröskelsättas. Ett ord som helt saknas i korpusen räknas som maximalt särskiljande, så att ett löfte aldrig kan krympa till sitt vagaste kvarvarande ord och matcha allt (se varningsrutan i avsnitt 8).
Manifesttexten läses som en av fyra strukturer, avgjort per parti: punktlistor (oavsett vilket tecken), numrerade listor, styckelistor (avgränsade på att stycket öppnar med ett imperativt verb eller en policyfras, inte på längd) och en meningsbaserad reserv för ren löptext, som kräver en uttrycklig åtagandemarkör (”vi vill”, ”ska införas”) och utesluter retoriska öppningar (”vi är”, ”därför”).
Hur sidan byggs
Ingen server och inget ramverk körs i produktion. build/build.py lägger in en enda JSON-datamängd direkt i en statisk HTML-mall; Vercel serverar sedan public/-mappen som rena filer. Det enda som skyddar datamängden från att läcka ut ur sin egen <script>-tagg är att varje </ i JSON-strängen skrivs om till <\/ innan den skrivs till filen.
De fem flikarna (Ledamöter, Sakfrågor, Senaste, Vallöften och förstasidan) är samma mall och samma inbäddade datamängd, omkring 4 MB var; det enda som skiljer dem åt är metataggarna och vilken flik som är förvald, så att en sökmotor eller en delad länk visar rätt vy innan någon JavaScript hunnit köra. Ledamöternas 412 enskilda sidor byggs på samma sätt men ur en mindre, separat mall, så att en enskild profil går att länka till och indexera utan att ladda hela appens datamängd.
Varje steg i kedjan cachar och kan återupptas för sig. En vanlig veckovis uppdatering under ett pågående riksmöte hämtar därför bara det riksmötets lista på nytt, extraherar bara nytillkomna motioner och kodar bara de yrkanden som är nya, i stället för att räkna om hela mandatperioden varje gång.
Uppgifterna laddas ned på nytt från källorna. Ingenting är förberett eller handplockat, med ett uttryckligt undantag: Vänsterpartiets löftesgränser (avsnitt 8). Om språkmodellens analys saknas stoppas bygget hellre än att publicera en metodtext som inte längre stämmer.
14Återanvändning och licens
Politikerfokus egna uppgifter och texter får återanvändas fritt, även kommersiellt, enligt Creative Commons Erkännande 4.0 Internationell (CC BY 4.0). Det gäller de härledda uppgifterna, alltså vilka sakfrågor varje ledamot driver, grupperingen av gemensamma sakfrågor, alla antal och bedömningarna av vallöftena, och sajtens egna texter, som den här metodbeskrivningen.
Ange källan så här: Politikerfokus (politikerfokus.se), byggt på data från Sveriges riksdag.
Licensen gäller inte underlaget, som har sina egna villkor. Riksdagens öppna data får användas fritt enligt riksdagens användningsvillkor, som kräver källangivelsen Källa: Sveriges riksdag och att det inte ser ut som om riksdagen står bakom det du gör. Valmanifesten kommer från SND:s arkiv, som har märkt samlingen som fri från kända upphovsrättsliga begränsningar. Yrkandenas ordalydelse är ledamöternas egna formuleringar och återges här som citat med länk till källdokumentet. De omfattas inte av Politikerfokus licens.
Uppgifterna tillhandahålls i befintligt skick och utan garantier. Kända antaganden och begränsningar står i avsnitt 11 och 12.
Hittar du ett fel? Det är den mest värdefulla återkopplingen som finns. Varje sakfråga och varje löftesträff går att klicka fram till det underliggande dokumentet på riksdagen.se. Jämför gärna, och hör av dig om något inte stämmer: Kontakt.
Källa: Sveriges riksdag (riksdagens öppna data) och SND:s manifestarkiv. Verktyget är fristående och har ingen koppling till riksdagen, något parti eller någon enskild ledamot. Innehållet får återanvändas enligt CC BY 4.0.