Snabblabb med SOU-data
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
.gitignore
LICENSE
README.md rm2 Jun 18, 2015
build_db.py
features.txt
gen_count.py
gen_graph.py with length and name attributes in nodes Jun 3, 2015
gen_length_csv.py lite frekvenser Jun 3, 2015
gen_word2vec.py word2vec Jun 15, 2015
parsesou.py parsesou relations Jun 4, 2015
requirements.txt

README.md

SOUlab

Snabblabb med SOU-data efter blogginlägg. Läs mer på http://www.christopherkullenberg.se/relationer-i-souniversum/

Har du labbat själv? Bidra gärna med kod/analyser här.

Installera dependencies

pip install -r requirements.txt

Experiment

Dessa utgår från att textfiler för SOU:er finns tillgängliga i katalogen "data". Ladda hem SOU-zipfil (ca 800 Mb) och packa upp i mappen "data".

1. Skapa grafdata för användning i Gephi

Mycket simpel strängmatchning av "SOU \d\d\d\d:..." i SOU-texterna för att möjliggöra referensanalys. Bygg SOU-databas med build_db.py först (en SQLite-databas kommer skapas):

python build_db.py ./data

Läs ut relationerna mellan SOU:er:

python parsesou.py ./data

Bygg grafdata i gexf-format med gen_graph.py:

python gen_graph.py soudata.gexf

Den sista filen kan sedan användas i verktyget Gephi för visualisering.

2. Frekvensanalys

Givet att grunddata har byggts upp enligt ovan är det enkelt att generera antalet SOU:er per år med:

python gen_count.py > frekvens.csv

3. Hitta platsnamn

Filen features.txt innehåller svenska ortnamn hämtade från geonames.org. Verktyget grep har stöd för strängmatchning med Aho-Corasick. För att mappa SOU:er mot ortnamn som förekommer i dem kör:

grep -owf features.txt data/30tal/*.txt

4. Deep learning med word2vec

Word2vec tar en corpus av text och omvandlar till ordvektorer. Med dessa går det att göra andra typer av analyser, t.ex. avständ mellan ord mm. Det borde gå att arbeta med SOU-korpusen i word2vec för att kunna göra andra typer av analyser även om OCR-underlaget troligtvis kommer skapa en del problem. gen_word2vec.py tränar en modell med SOU-datat:

python gen_word2vec.py ./data/

Körtiden kan vara någon timme för att skapa informationen. När det är klart utforskar man enklast datamängden från python på kommandoraden. Starta en ny python-tolk och testa enligt nedan:

import gensim

# ladda den genererade modellen
model = gensim.models.Word2Vec.load("gensim2.model")


model.most_similar(u"amatör")
# [(u'amatörteater', musikföreningar', 0.7612131834030151), (u'folkdans', 0.7437361478805542), (u'symfonisk', 0.7418662309646606), (u'allsång', 0.7417885661125183)] ...


model.doesnt_match("stat kommun landsting ambassad".split())
# ambassad


model.most_similar(positive=[u'integritet', u'lag'], topn=1)
# [(u'datalagen', 0.7018075585365295)]