https://github.com/peterk/soulab
Snabblabb med SOU-data
https://github.com/peterk/soulab
Last synced: 2 months ago
JSON representation
Snabblabb med SOU-data
- Host: GitHub
- URL: https://github.com/peterk/soulab
- Owner: peterk
- License: mit
- Created: 2015-06-03T17:18:12.000Z (about 11 years ago)
- Default Branch: master
- Last Pushed: 2015-06-18T07:17:27.000Z (about 11 years ago)
- Last Synced: 2025-01-20T13:35:33.503Z (over 1 year ago)
- Language: Python
- Size: 223 KB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 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)](http://scientometrics.flov.gu.se/files/SOUtxtDecadeFiles.zip) 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](http://en.wikipedia.org/wiki/Aho–Corasick_string_matching_algorithm). 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](https://docs.google.com/a/peterkrantz.se/file/d/0B7XkCwpI5KDYRWRnd1RzWXQ2TWc/edit)
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:
```python
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)]
```