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=30
)
bøker.frame.loc[:, ["title", "authors", "year"]]
title authors year
0 Vardan og armenernes krig Eghishē / Lindeman , Fredrik Otto 1992
1 Vi sloss for Norge : frontkjemper og motstands... Bryne , Arvid 2008
2 Det skjedde i Norge . 1 : 1945-1952 : den varm... Ustvedt , Yngvar 1990
3 Kampen om Norge : tyskernes bilder fra det nor... Olsen , Per Erik 2008
4 Den kalde krigen Gaddis , John Lewis / Carlsen , Carsten 2007
5 " Men seier ' n var vår " : søkelys på omveltn... Gogstad , Anders Chr . 2003
6 Krig , krise og sjølberging : Leirfjord 1940-45 Berntsen , Gunnar 1995
7 Fra Narvik til Normandie Dalzel-Job , Patrick / Gudmundsen , Per Kristian 1996
8 1983 : den kalde krigens høydepunkt Dahlberg , Rasmus / Lie , Kåre A. 2006
9 Seksdagerskrigen : juni 1967 og hvordan det mo... Oren , Michael B. / Andersen , Jon 2008
10 Lavangen 1940 : informasjonshefte om 2. verden... Borren , Arne 1998
11 D-dagen : den allierte invasjonen i Normandie ... Tamelander , Michael / Zetterling , Niklas / R... 2004
12 Fra krig til fred i Songdalen 1940-1945 Fjermeros , Erik 1995
13 Skilles og møtes : en sann fortelling om tro ,... Thureson , Birger / Viumdal , Jan-Kristian 1991
14 Det utrolige døgnet Bjørnsen , Bjørn 1977
15 Mot Onsøy 1814 Øy , Nils E. 1991
16 Fortielsen : den kalde krigen og Peder Furubotn Titlestad , Torgrim 1997
17 Krigen i Norge 1940. [ 1 ] : Operasjonene i Ro... 1952
18 Minner fra krigen : 1940-1945 Strand , Karl Ivar Arktander / Aasjord , Hugo 2008
19 De som tapte krigen Fjørtoft , Kjell 1995
20 Øst-Europa i forvandling Johansen , Jahn Otto 1965
21 Kryssild : mitt liv som flyktning : Burundi - ... Ngendakurio , John Bosco / Holmedahl , Jostein 2009
22 Det ringer for siste gang : fra mitt liv på ha... Bjørnstad , Arne 1969
23 Kvinner under krigen : norske kvinners innsats... Simensen , Siri Walen 2009
24 Sjøkrigens skjebner : deres egne beretninger Bøe-Hansen , Ola 2005
25 To liv - e ́ n skjebne : Viggo Hansteen og Rol... Berntsen , Harald 1995
26 Livvakt i helvete : Aleksandr og krigen i Tsje... Mannes , Siri Lill 2006
27 Israel beleiret : situasjonen i Midtøsten det ... Borchsenius , Poul / Grønvik , Torbjørn 1970
28 Den annen verdenskrig . 1 : Opptakten : " aldr... Piekalkiewicz , Janusz 1987
29 Den skjulte hånd : historien om Einar Johansen... Christensen , Dag 1990

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 
100562108 100038162 100115822 100131537 100377030
. 5057 1681 2088 3004 4762
og 2541 1004 2937 1621 2468
i 2363 692 1263 1559 2387
, 2297 763 3504 2160 7484
var 1410 475 501 1147 1702
... ... ... ... ... ...
Cripps 0 0 0 1 0
hjelmer 0 0 1 0 0
gudebildene 0 0 1 0 0
forløpet 0 2 0 0 0
realisering 0 0 1 0 0

33944 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")
  100562108 100038162 100115822 100131537 100377030
. 5057 1681 2088 3004 4762
og 2541 1004 2937 1621 2468
i 2363 692 1263 1559 2387
, 2297 763 3504 2160 7484
var 1410 475 501 1147 1702
det 1382 290 819 689 1781
som 1223 299 1310 982 1769
av 1210 429 794 693 1449
til 1115 387 960 826 1553
de 1064 460 1290 562 958

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
. 136769
, 115085
i 62682
og 71691
det 32170
... ...
bord-alarm 1
saltverket 1
dropposisjon 1
kloven 1
innBiZelBer 1

139055 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
Furubotn 515.391408
Dayan 334.065624
Shultz 331.065087
Crisis 328.566845
Andropov 293.317402
Hansteens 238.932823
Wickstrøm 231.024789
KRIGEN 212.199792
Oral 190.211577
Hansteen 190.039781
Nasser 189.110622
pp. 181.931216
Rabin 177.890815
Skabo 177.148081
stridsvognene 173.570219
Foreign 159.047584
Spørck 155.194205
Gilja 144.356125
fremrykningen 141.612204
partisanene 141.598913
Nassers 139.883396
ÉN 134.68182
files 133.351206
BERNTSEN 121.394556
Tirpitz 119.933993
Svenner 119.718182
Hjemmefronten 119.623084
syrerne 116.657636
Kalheim 116.082217
Sinai 115.641996
stridsvogner 114.963862
Tsjetsjenia 113.682762
SIMENSEN 112.594871
USSR 111.408829
Ministry 107.564896
jordanske 106.908482
Handelsflåten 104.448192
jagerne 100.748805
Terboven 100.335717
frontkjempere 99.491356
Huth 99.230201
D-dagen 98.636608
box 98.114006
Grenada 96.089447
ISA 95.012092
Hjemmefrontens 92.858105
jageren 92.772245
Memorandum 92.244784
tsjetsjenske 91.945298
Relations 87.836661

1.9.2. Visualiser som ordsky#

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