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

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 Erulerne Procopius Caesariensis / Dewing , H. B. / Aust... 1982
1 Vi dro mot nord : felttoget i Norge i april 19... Arneberg , Sven T. / Hosar , Kristian 1989
2 Over grensen ? : Hjemmefrontens likvidasjoner ... Moland , Arnfinn 1999
3 Fra krig til krig , 1914-1945 Poulsen , Henning 1982
4 Fortielsen : den kalde krigen og Peder Furubotn Titlestad , Torgrim 1997
... ... ... ...
161 Minner fra krig og gjenreisning Brežnev , L. I. / Bielenberg , Tore-Jarl 1979
162 Fåberg og Lillehammer . 10 : Vår barndoms by .... 1990
163 Brennpunkt Vemork , 1940-1945 Brun , Jomar 1985
164 Kongsvinger festnings historie . [ 1 ] : Vakte... Rastad , Per Erik 1992
165 Det skjedde i Norge . 1 : Den varme freden - d... Ustvedt , Yngvar 1978

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 
100448679 100237510 100515185 100515200 100243043
, 7594.0 2592.0 4166.0 8956.0 445.0
. 7530.0 5095.0 4667.0 7227.0 926.0
i 4868.0 1842.0 3066.0 4023.0 332.0
og 4483.0 1824.0 2055.0 3168.0 501.0
som 2768.0 575.0 1637.0 2339.0 244.0
... ... ... ... ... ...
goterne 0.0 0.0 0.0 0.0 26.0
romerne 0.0 0.0 0.0 0.0 26.0
Narses 0.0 0.0 0.0 0.0 33.0
erulerne 0.0 0.0 0.0 0.0 33.0
Belisarius 0.0 0.0 0.0 0.0 61.0

48303 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")
  100448679 100237510 100515185 100515200 100243043
, 7594.000000 2592.000000 4166.000000 8956.000000 445.000000
. 7530.000000 5095.000000 4667.000000 7227.000000 926.000000
i 4868.000000 1842.000000 3066.000000 4023.000000 332.000000
og 4483.000000 1824.000000 2055.000000 3168.000000 501.000000
som 2768.000000 575.000000 1637.000000 2339.000000 244.000000
av 2684.000000 793.000000 1381.000000 2088.000000 237.000000
den 2627.000000 504.000000 1049.000000 886.000000 112.000000
var 2485.000000 1086.000000 1143.000000 1597.000000 214.000000
det 2391.000000 713.000000 1191.000000 1666.000000 191.000000
en 2322.000000 803.000000 1272.000000 1917.000000 205.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/3ec994b04870ae98eec20c8180d3febea49596760c7881f5af94e47a91d4062a.png