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))