resources/images/dhlab-logo-nb.png

1.9. Sammenlign metadata#

from dhlab.api.dhlab_api import get_document_frequencies
from dhlab import Corpus, Counts, totals
import dhlab.nbtext as nb
---------------------------------------------------------------------------
ModuleNotFoundError                       Traceback (most recent call last)
Cell In[1], line 1
----> 1 from dhlab.api.dhlab_api import get_document_frequencies
      2 from dhlab import Corpus, Counts, totals
      3 import dhlab.nbtext as nb

ModuleNotFoundError: No module named 'dhlab'

1.9.1. Undersøk korpus med metadata#

En viktig metode i undersøkelse av metadata og tekster er grafer og nettverk.

Metadata er alt som er om teksten, fra forfatter til forlag. Også innholdsord kan sees på som metadata.

1.9.1.1. Bygg korpus#

Korpuset defineres med metadata som dewey, emneord, navn , år, etc. Her kan Webdewey være til god hjelp.

Se eksempelfil om Korpusbygging for ulike måter å definere korpus.

bøker = Corpus(
   doctype="digibok",
   freetext="krig OR krigen OR soldater",
   from_year=1950,
   to_year=2010,
   ddk="9%",
   lang='nob',
   limit=300
)
bøker.frame.loc[:, ["title", "authors", "year"]]
title authors year
0 Tapte år : tilegnet Alma Pasjkurov , Ivan 1990
1 Hvis Hitler hadde vunnet krigen : nazistenes p... Giordano , Ralph / Seljelid , Åge 1991
2 Barn under krigen Nøkleby , Berit / Hjeltnes , Guri / Gullvåg , ... 2000
3 De Nære årene : norske kvinner og menn fortell... Jensen , Johan O. / Jensen , Johan O. 1986
4 Men arbeidet måtte gå : vegfolk forteller om k... Hegdalstrand , Kjell 1995
... ... ... ...
161 Over grensen ? : Hjemmefrontens likvidasjoner ... Moland , Arnfinn 1999
162 Russisk rulett Bočarov , Gennadij / Fremming , Espen 1990
163 I Tordenskiolds kjølvann Kavli , Guthorm 1990
164 Norsk krigsleksikon 1940-45 Dahl , Hans Fredrik / Hagen , Eirin 1995
165 Nordmenn i fangenskap 1940-1945 : alfabetisk r... Ottosen , Kristian / Knudsen , Arne 1995

166 rows × 3 columns

1.9.1.2. Undersøk forskjeller#

1.9.1.2.1. Undersøk forskjeller internt i korpuset#

Her samler vi sammen alle bøkene i korpus og summerer. Men først la oss se på en del av korpuset som en dokument term matrise

# tar de fem første og henter frekvensene for alle bøkene

bøker_dtm = Counts(bøker.head(5))
bøker_dtm 
100521520 100571027 100570822 100025743 100285115
. 5199.0 3537.0 2521.0 6114.0 5406.0
, 3362.0 2252.0 1424.0 3108.0 6932.0
og 2090.0 1805.0 1001.0 3185.0 3443.0
var 1989.0 1198.0 962.0 1396.0 1837.0
i 1841.0 1150.0 891.0 3010.0 3245.0
... ... ... ... ... ...
Mona 0.0 0.0 0.0 0.0 36.0
fait 0.0 0.0 0.0 0.0 40.0
0.0 0.0 0.0 0.0 70.0
0.0 0.0 0.0 0.0 95.0
seiv 0.0 0.0 0.0 0.0 102.0

41977 rows × 5 columns

1.9.1.2.2. Visualiser med varmekart#

Et varmekart gjør det enklere å få øye på likhet og variasjon i tallene.

nb.heatmap(bøker_dtm.frame.head(10), color="#045599")
  100521520 100571027 100570822 100025743 100285115
. 5199.000000 3537.000000 2521.000000 6114.000000 5406.000000
, 3362.000000 2252.000000 1424.000000 3108.000000 6932.000000
og 2090.000000 1805.000000 1001.000000 3185.000000 3443.000000
var 1989.000000 1198.000000 962.000000 1396.000000 1837.000000
i 1841.000000 1150.000000 891.000000 3010.000000 3245.000000
det 1783.000000 778.000000 683.000000 2044.000000 1304.000000
jeg 1333.000000 695.000000 661.000000 111.000000 358.000000
1302.000000 891.000000 556.000000 1180.000000 1527.000000
som 1271.000000 725.000000 516.000000 1731.000000 1253.000000
en 1269.000000 779.000000 517.000000 1549.000000 1154.000000

1.9.1.3. Undersøk forskjeller med frekvenser fra bokhylla#

Vi teller opp tokens i korpuset med Counts. Dette kan ta litt tid.

count_corpus = Counts(bøker)

Referansekorpus Kommandoen under lager et referansekorpus av de 150 000 vanligste tokenene i vår samling.

totals = totals(150000)
# Summer tokens fra korpus
bøker_total = count_corpus.frame.sum(1).to_frame("count")
# Frekvensliste for korpus
bøker_total
count
, 1447361.0
. 1239985.0
^ 19453.0
og 456573.0
til 271849.0
... ...
Lovell 21.0
Oldereid 29.0
ZJIZJIN 45.0
BELJAEV 47.0
TITOV 92.0

606954 rows × 1 columns

For å lette arbeidet med å tolke forskjeller normaliserer vi frekvensene til tall mellom 0 og 1.

nb.normalize_corpus_dataframe(totals)
nb.normalize_corpus_dataframe(bøker_total)
True
forskjell = bøker_total.loc[:, "count"] / totals.freq
bøker_typiske_ord = forskjell.sort_values(ascending=False).to_frame("ratio")
bøker_typiske_ord.head(50)
ratio
løsl 4833.190733
ovf. 4008.252579
f.nr 3966.797430
Møllergata 755.385017
Østf 677.497177
Sachsenhausen 450.341807
Grini 393.216739
Falstad 341.167553
Hedm 311.771917
Telem 301.856473
f.m. 282.470624
Vestf 278.685051
Nordi 267.663267
Dachau 219.043036
Vollan 205.069268
Finnm 184.727016
gardsarbeider 174.649182
Ara 172.453373
freden 158.993578
Løfsnes 149.278587
ank. 127.089557
lagerarbeider 105.323230
Arr 104.760437
Milorg 104.653514
Soviet 103.704604
Busk 97.430041
An 96.689206
Hjemmefrontens 95.583670
SAK 81.029599
Falkenhorst 79.328393
Hjemmefronten 78.466168
Furubotn 75.899378
punds 75.745245
hausen 74.982654
Administrasjonsrådet 72.241541
Auschwitz 68.584370
Smst 67.231753
Wiking 66.845769
Wehrmacht 65.885264
Sipo 61.891449
Kristi- 60.810208
Terboven 57.830097
Tordenskiold 57.486035
42. 57.090582
43. 56.681139
tveit 56.098469
angivere 55.031767
kompanier 53.972696
NS-medlemmer 50.756165
dekknavn 50.696521

1.9.2. Visualiser som ordsky#

nb.cloud((bøker_typiske_ord/bøker_typiske_ord.sum()).head(50))
../_images/cbdbcaf229225578436dfbd0e26e22ed2cff539fe6a4287bf2fb5172cc4ce38b.png