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