Relationer i SOUniversum

Att lägga ut sorlet från SOUer visade sig leda till intressanta uppslag. Bland annat har idé- och vetenskapshistorikern Gustav Holmberg gjort en inventering av amatörbegreppet genom hela SOU-korpuset, Copyriot har skrivit, och Peter Krantz på KB har gjort en graf av datamängden.

Väldigt roligt! Nu kommer en uppföljning som bitvis är teknisk, men som bör läsas mera som en humanvetenskaplig ingång som har råkat ta hjälp av några digitala verktyg.


Work in progress alltså! Det är inte vackert, men det kommer en bild på slutet!

Jag tänker att det finns två approacher till materialet; data och metadata. Att söka i innehållet (data) visar sig vara mycket kraftfullt, speciellt om man tillämpar sökverktyg som är snabbare än grep. Men här tänkte jag ge ett litet uppslag till hur man kan extrahera/skapa metadata ur SOUerna. Exakt vad det skulle vara användbart till vet jag inte riktigt ännu, men ibland måste data komma före frågorna för att man ska veta vad man ska fråga.

Inspirerad av Peter Krantz graf, började jag harva runt i SOUerna för att hitta regelbundenheter som går att ta som utgångspunkt för relationer mellan texterna. En sådan regelmässig konvention tycks vara hur man anger SOU som en källa: årtal kolon nummer, exempelvis 1945:68, eller 19\d{2}:\d{2} med reguljära uttryck.

Om jag nu ställer mig i katalogen för varje SOU som enskild fil (en sådan katalog skapas om man laddar ned och packar upp denna datamängd) så kan jag köra grep -r -Eo '19\d{2}:\d{2}' * för att söka efter detta mönster, som vi känner igen som en referens. Detta gör att datorn spottar ur sig ungefär:


20tal/Betänkande och förslag i fråga om kvinnors tillträde till statstjänster. - SOU 1923:22.txt:1923:11
20tal/Betänkande och förslag rörande understöd åt den civila luftfarten - SOU 1929:21.txt:1929:21
20tal/Betänkande om inkomst- och förmögenhetsskatt. - SOU 1923:70.txt:1923:41

Det fetade mönstret identifierar filnamnet för den SOU som vi läser ur och det kursiverade numret visar att datorn har hittat en referens till en SOU (inuti en SOU). Det är inte mera konstigt än att det finns referenser längst bak i en bok eller i en artikel. SOUer hänvisar till andra SOUer. Detta bildar ett litet SOUniversum som vi kan visualisera. Men vägen dit kräver att man processar detta brutala output till något som kan läsas av exempelvis Gephi. För att man ska få fina sociologiska monader måste man definiera vad som är noder och vad som är relationer i ett nätverk.

Det mest gångbara formatet för sociala nätverksdata är nog .gexf. Det är öppet, enkelt och läses av Gephi och Sigma.js.

Varje enskild SOU är en nod, och varje gång en SOU citerar en annan SOU har vi att göra med en ”relation”. Relationen som enskild händelse (haecceitet) kan vi inte veta så mycket om – någon eller några författare har skrivit en SOU och ”laddat ned” andra SOUer till sitt tänkande. Det enda spåret vi har bland de 166 miljoner rader (!) text som alla SOUer utgör är en ”referens”.

För att bygga om det output som vi fick ovan till .gexf-formatet så körde jag några ”hemmasnickrade” regex-sökningar. Jag tar inte alla detaljer utan skissar mest några exempel. På denna sträng:

20tal/Betänkande och förslag rörande understöd åt den civila luftfarten – SOU 1929:21.txt:1929:21

Kan vi ta allt före den första noden – 1929:21 – söka upp med ^(.*?)SOU som vi ersätter med source=". Sedan kan vi söka efter \.txt: och ersätta med " target=". Några vändor fram och tillbaka börjar vi närma oss relationer, som bör se ut ungefär så här:


source="1951:13" target="1948:42"
source="1951:13" target="1948:42"
source="1951:13" target="1948:42"
source="1951:13" target="1945:51"
source="1951:13" target="1945:51"
source="1950:21" target="1926:18"

Men, för att de ska begripas måste de numreras. Det går att lösa med ett enkelt pythonskript som ungefär lyder:


#!/usr/bin/python

items = [‘source=”1951:13″ target=”1948:42″‘, ‘source=”1950:21″ target=”1926:18″‘, ‘source=”1950:21″ target=”1926:18″‘, osv. alla edges efter varandra.]
number = 0
for item in items:
print(number, item)
number = number + 1

Skriptets output kör man sedan > fil.gexf, så har man en numrerad lista på alla relationer. Med detta gjort är det bara att fortsätta att sök-ersätta med reguljära uttryck tills man börjar få något i stil med:


edge id="0" source="1951:13" target="1948:42" /
edge id="1" source="1951:13" target="1948:42" /
edge id="2" source="1951:13" target="1948:42" /

Därefter tar man alla unika SOU-nummer och skapar en lista. Enklast är att ta filen man sparat med ovanstående information och bara suga ut varje enskild SOU med grep -Eo '19\d{2}:\d{2}' fil.gex > baranoderna.gexf. För att sedan spara lite plats kan man ta och radera duplikata nummer. Sedan kan man bygga noder som ser ut så här:

node id="1951:13"

Men för att det ska bli komplett ska varje nod ha en ”label”. För att göra labels till noderna kan man göra ungefär så här i en avancerad texteditor så som Textwrangler eller Notepad++ (glöm inte att slå på Grep).

Find

node id="(19\d{2}:\d{2})" /

Replace

node id="\1" label="\1" /

Så får man snyggt:


node id="1951:13" label="1951:13" /
node id="1948:42" label="1948:42" /
node id="1945:51" label="1945:51" /

(allt detta ska sedan vara inom < > i .gexf-filen)

Fint. Resten är bara en fråga om lite meta-uppmärkning och vi har oss en .gexf-fil som går att öppna i Gephi.

Pust. Det är nu jag tänker att någon som kan programmera kan göra allt detta så mycket fortare/smidigare. Men, skam den som ger sig!

Med lite modularitetsfilter för att lägga färger och ”degree” för att göra noderna större ju oftare de är citerade får vi en sån är liten bild:

50talet

SOU 1956:39 heter Offentliga byggnader och verkar vara den mest omtalade och citerade ”nätverkade” SOUn under 50-talet (Degree, dvs. både inkommande och utgående länkar) (jag begränsade min datamängd till 50-talet för detta test). Om vi visualiserar med raka relationslinjer ser vi tydligare riktningarna på citeringarna.

Detta var bara ett test och proof of concept. Kanske finns det något i detta som ger uppslag till tankar och funderingar på hur man kan forska vidare.

10 reaktioner till “Relationer i SOUniversum”

  1. Ursäkta en trivial kommentar, men som kronolog har jag svårt att förstå poängen med att visualisera SOU-relationerna i en stor blobb. Vore det inte på alla sätt rimligare att göra det utmed en tidslinje?

  2. Rasmus: Du sätter fingret på en viktig begränsning med (statiska) visualiseringar: tidsdimensionen faller ofta bort.

    Det man kan göra, men som inte är helt enkelt, är att skapa ett så kallat ”dynamiskt” nätverk. Detta innebär att man skapar en serie av ”blobbar” som förgrenar sig över tid. Det är ganska enkelt i detta fall eftersom varje SOU är tidsmärkt dels med Årtal, men även med Nummer (vilka jag antar kommer ”efter” varandra).

    Ska se om jag kan fixa ett sådant exempel. Tror det räcker med några ytterligare regex-handpåläggningar, har gjort det tidigare för annan data.

  3. OK! Jag tänker mig alltså en ”skägglav”, som jag skrev i förra kommentarsfältet.
    Tror det räcker att ha ettårig upplösning på tidsaxeln. Det är ändå inte så vanligt att SOU:er hänvisar till andra SOU:er från samma år (utom kanske när samma utredning delar upp sin produktion i flera betänkanden).
    En poäng med tidsaxel är att det blir tydligt åt vilket håll (bakåt) som hänvisningarna löper. Kanske kan man då också få ett hum om vilka ämnesområden som är ”långsamma” respektive ”snabba”.

    Efter att ha tittat lite på visualiseringen, med start i SOU:er jag själv har forskat i, får jag intrycket att det är stabil data. Det är såklart en stor fördel att SOU:erna inte använder standardformateringen (typ ”SOU 1956:25”) just i den avslutande listningen av innevarande års alla SOU:er.

  4. Länkar in en historisk överblick på frekvens och omfång av SOUerna som Peter Kranz har gjort.

    Ska fortsätta fundera på skägglaven.

    Jag måste även börja räkna ut vad som ska göras med olika sökanomalier som framträder systematiskt:

    Dels för att skriva ut SOU finns flera varianter, exempelvis:


    (St. off. utr. 1937:45)
    STATENS OFFENTLIGA UTREDNINGAR 1945:60
    (Statens offentliga utredningar 1939:39)

    Dessa fångas alla av ett utryck som '19\d{2}:\d{2}'.

    Men, vad man får se upp med då är:

    Vad som är intressant här, är ju att det borde gå att hitta "utreferenser" ur "SOUniversumet". Hur ofta citeras läkartidningen eller en proposition?

  5. Johan: Det är görbart. Tyvärr är Histcite ganska stängt och kräver en del handpåläggning. Men det tar ISI/Web of Science-formaterade referenser… Vilket man kanske skulle tvinga SOUerna till att följa.

    Bättre är kanske CitNetExplorer som fungerar på lite nyare system, men också är anpassat efter ISI-formatet.

  6. Ja, HistCite är en utmärkt idé som i praktiken suger eftersom den (a) i praktiken kräver Windows och IE och (b) är beroende av ISI. Dubbelt dumt, med andra ord. Förvånar mig att inte Google har hackat ihop ett motsvarande verktyg. CitNetExplorer kände jag inte till, tack för tipset. Och gött jobbat – har minst två projekt där jag kommer att ha stor nytta av dina SOU.txts.

  7. Kalle P: Sonia har fördelen att det är byggt för att visualisera dynamiska nätverk över tid. Problemet är att det är svårt att få igång det på moderna operativsystem. Själv får jag det mest att krascha…

    Det som gäller mera nu verkar vara visualiseringsbibliotek av typen D3 och sigma.js.

    Johan: Kul att materialet kommer till användning!

Kommentera

E-postadressen publiceras inte. Obligatoriska fält är märkta *

Time limit is exhausted. Please reload CAPTCHA.