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 I kamp om Narvik 1940 : Heinz, Peter, Cyril, A... Brauteset , Steinar 1987
1 Oslogjengen : Europas beste sabotørgruppe Christensen , Jan 2005
2 Marka og krigen : Oslomarka 1940-1945 Christensen , Trygve 1993
3 Krigen som aldri tar slutt Klare , Michael T. / Sivertsen , Sverre H. 1974
4 Niende april : de frivillige militære styrker Wilhelmsen , Aage A. ( Aage Adolf ) 1998
... ... ... ...
158 Kirkenes-Litsa tur-retur : krigen i bilder Wara , Kalle 1994
159 Gud er norsk : soldatene fra fredsnasjonen Nore , Aslak 2007
160 Fra krig til krig : 1914-1945 Poulsen , Henning 2001
161 Da krigen kom : Norge september 1939-juni 1940 Nøkleby , Berit 1989
162 Handelsflåten i krig 1939-1945 Nilsen , Tore L. / Thowsen , Atle 1990

163 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 
100447802 100036830 100114685 100189257 100254904
, 4757.0 6483.0 1462.0 3349.0 4894.0
. 4060.0 6069.0 2932.0 4287.0 4998.0
i 2840.0 3180.0 1005.0 1948.0 2706.0
og 2131.0 3861.0 1009.0 2006.0 3310.0
som 1585.0 1286.0 482.0 1012.0 1100.0
... ... ... ... ... ...
Stenersen 0.0 0.0 0.0 0.0 72.0
SABOTØRGRUPPE 0.0 0.0 0.0 0.0 125.0
BESTE 0.0 0.0 0.0 0.0 133.0
EUROPAS 0.0 0.0 0.0 0.0 136.0
OSLOGJENGEN 0.0 0.0 0.0 0.0 136.0

42418 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")
  100447802 100036830 100114685 100189257 100254904
, 4757.000000 6483.000000 1462.000000 3349.000000 4894.000000
. 4060.000000 6069.000000 2932.000000 4287.000000 4998.000000
i 2840.000000 3180.000000 1005.000000 1948.000000 2706.000000
og 2131.000000 3861.000000 1009.000000 2006.000000 3310.000000
som 1585.000000 1286.000000 482.000000 1012.000000 1100.000000
av 1523.000000 1419.000000 391.000000 713.000000 1264.000000
til 1297.000000 1894.000000 561.000000 1323.000000 1640.000000
å 1240.000000 999.000000 430.000000 747.000000 1300.000000
en 1140.000000 1280.000000 514.000000 803.000000 1268.000000
for 1117.000000 964.000000 310.000000 556.000000 878.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
, 1420381.0
. 1215181.0
^ 19253.0
og 441257.0
til 264478.0
... ...
Lovell 21.0
Oldereid 29.0
ZJIZJIN 45.0
BELJAEV 47.0
TITOV 92.0

594334 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 4951.308843
ovf. 4106.210067
f.nr 4063.741798
Møllergata 773.589700
Østf 694.054497
Sachsenhausen 460.799878
Grini 402.611435
Falstad 346.107951
Hedm 319.391295
Telem 309.233529
f.m. 289.373909
Vestf 285.495821
Nordi 274.204677
Dachau 224.044775
Vollan 209.711012
Finnm 189.241551
gardsarbeider 178.917425
Ara 176.667953
freden 162.685350
Løfsnes 152.926799
ank. 130.195492
lagerarbeider 107.897219
Arr 107.320672
Soviet 106.239036
Milorg 102.052988
Busk 99.811129
An 99.043837
Hjemmefrontens 96.932542
SAK 83.009878
Falkenhorst 80.671004
Hjemmefronten 79.157605
punds 77.596380
Furubotn 77.520314
hausen 76.611397
Administrasjonsrådet 72.951689
Auschwitz 70.260500
Smst 68.874826
Wiking 68.479410
Wehrmacht 65.279672
Kristi- 62.296346
Terboven 58.472897
42. 58.447999
Sipo 58.419419
Tordenskiold 58.140199
43. 58.031891
tveit 57.469456
kompanier 54.735104
angivere 51.678629
stridsvognene 51.551885
dekknavn 51.550783

1.9.2. Visualiser som ordsky#

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