resources/images/dhlab-logo-nb.png

1.6. Frekvenslister#

Frekvenslister fra tekster kan danne utgangspunkt for mye informasjon om teksten.

Her bruker vi klassen Counts for å hente frekvensklister (absoluttfrekvenser) fra boka.

urner identifikator for boka i Nasjonalbibliotekets samling. Under eksempelfila om korpusbygging() finnes mer informasjon om hvordan man bygger et korpus. Urn finner man i bokas metadata, og de er på denne formen: https://urn.nb.no/URN:NBN:no-nb_digibok_2012051608012. Det er de 13 sifrene på slutten vi bruker her.

from dhlab import Counts, totals, Corpus
import dhlab.graph_networkx_louvain as gnl
import pandas as pd
import dhlab.nbtext as nb

1.6.1. Frekvensliste for enkeltbøker#

1.6.1.1. Kort sakprosabok#

urn = "URN:NBN:no-nb_digibok_2021011848587"
bok = Counts([urn])
bok.frame.iloc[:, 0]
,                184
.                162
og                94
i                 93
det               51
                ... 
avbetaling         1
atenerinnene       1
1942               1
april              1
filmversjonen      1
Name: 100431574, Length: 1597, dtype: int64

Vi kan sammenlikne frekvenslista for boka med et større korpus, som vi her legger i variabelen tot

tot = totals()

Vi lager en dataramme, nb.frame() for forholdet mellom frekvensene for ordene i vann og for de 50000 mest frekvente ordene i hele nb.no

(bok.frame.iloc[:, 0] / tot.iloc[:, 0]).sort_values(ascending=False).head(20)
Hedda          0.000050
def            0.000030
Ivo            0.000026
Skjønberg      0.000023
Claes          0.000019
Gill           0.000017
oppførelse     0.000016
teatrene       0.000016
VAN            0.000015
væsen          0.000013
Alten          0.000013
Rosenkrantz    0.000011
Kaas           0.000011
poetiske       0.000010
ensemblet      0.000010
Høst           0.000010
Jæger          0.000010
kontra         0.000009
Peggy          0.000009
Vauxhall       0.000009
dtype: float64
tot
freq
. 7655423257
, 5052171514
i 2531262027
og 2520268056
- 1314451583
... ...
tidspunkter 110667
dirigenter 110660
ondartet 110652
kulturtilbud 110652
trassig 110651

50000 rows × 1 columns

1.6.1.2. Knausgårds Min kamp / Første bok#

min_kamp_1 = Counts(["URN:NBN:no-nb_digibok_2014032405041"])
min_kamp_1.frame.head(20)
100197175
, 14332
. 9480
og 5383
det 4430
jeg 4175
i 3657
var 3238
3152
- 2500
som 2463
en 2175
hadde 2010
ikke 1947
av 1900
den 1895
til 1815
med 1787
sa 1705
meg 1581
å 1575
(min_kamp_1.frame.iloc[:, 0] / tot.iloc[:,0]).sort_values(ascending=False).head(20).to_frame("ratio")
ratio
Yngve 0.000572
Farmor 0.000376
pappas 0.000231
farmor 0.000203
Ylva 0.000190
skrudde 0.000154
Jada 0.000130
Fløgstad 0.000119
helte 0.000114
koppen 0.000108
kroppene 0.000108
gitaren 0.000105
jævla 0.000105
rekkverket 0.000104
cola 0.000103
røykte 0.000101
sigaretten 0.000101
kløv 0.000097
faen 0.000094
stuen 0.000090

1.6.2. Sammenlikning av frekvens for ulike bøker#

# Frekvenslisiter for 20 Anne-Cath. Vestly bøker
vestly = Counts(
    Corpus(
        author="Anne*Vestly*",
        limit=20
    )
)
vestly.frame.head()
100464830 100463710 100002573 100019176 100005885 100129979 100140407 100516696 100042846 100541708 100077106 100094409 100109455 100222464 100247914 100421899 100429916 100429957 100591047 100657019
, 1926.0 6806.0 1830.0 2148.0 2516.0 2791.0 2872.0 46.0 2260.0 4956.0 28.0 83.0 2446.0 27.0 51.0 50.0 1956.0 2992.0 2411.0 1783.0
. 1636.0 4738.0 1620.0 1960.0 1943.0 3665.0 2696.0 42.0 1713.0 4672.0 53.0 51.0 1772.0 57.0 72.0 73.0 1962.0 2401.0 1903.0 907.0
« 1014.0 897.0 948.0 1103.0 1030.0 390.0 1391.0 17.0 1009.0 2170.0 8.0 1.0 923.0 5.0 13.0 41.0 1041.0 1414.0 1215.0 7.0
» 1005.0 895.0 908.0 1088.0 1027.0 392.0 1385.0 17.0 1008.0 2156.0 9.0 5.0 922.0 5.0 8.0 43.0 1041.0 1419.0 1210.0 8.0
6 917.0 2.0 465.0 820.0 0.0 3.0 1.0 0.0 1.0 2.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 482.0
# Vi kan legge på et varmekart for lettere å få oversikt

nb.heatmap(vestly.frame.head(20))
  100464830 100463710 100002573 100019176 100005885 100129979 100140407 100516696 100042846 100541708 100077106 100094409 100109455 100222464 100247914 100421899 100429916 100429957 100591047 100657019
, 1926.000000 6806.000000 1830.000000 2148.000000 2516.000000 2791.000000 2872.000000 46.000000 2260.000000 4956.000000 28.000000 83.000000 2446.000000 27.000000 51.000000 50.000000 1956.000000 2992.000000 2411.000000 1783.000000
. 1636.000000 4738.000000 1620.000000 1960.000000 1943.000000 3665.000000 2696.000000 42.000000 1713.000000 4672.000000 53.000000 51.000000 1772.000000 57.000000 72.000000 73.000000 1962.000000 2401.000000 1903.000000 907.000000
« 1014.000000 897.000000 948.000000 1103.000000 1030.000000 390.000000 1391.000000 17.000000 1009.000000 2170.000000 8.000000 1.000000 923.000000 5.000000 13.000000 41.000000 1041.000000 1414.000000 1215.000000 7.000000
» 1005.000000 895.000000 908.000000 1088.000000 1027.000000 392.000000 1385.000000 17.000000 1008.000000 2156.000000 9.000000 5.000000 922.000000 5.000000 8.000000 43.000000 1041.000000 1419.000000 1210.000000 8.000000
6 917.000000 2.000000 465.000000 820.000000 0.000000 3.000000 1.000000 0.000000 1.000000 2.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 482.000000
og 806.000000 4929.000000 892.000000 816.000000 1734.000000 2094.000000 1648.000000 32.000000 1174.000000 3036.000000 29.000000 25.000000 1884.000000 21.000000 25.000000 38.000000 897.000000 1935.000000 1315.000000 2.000000
a 774.000000 6.000000 497.000000 384.000000 9.000000 7.000000 0.000000 1.000000 5.000000 2.000000 1.000000 2.000000 1.000000 4.000000 1.000000 0.000000 16.000000 7.000000 4.000000 21.000000
8 494.000000 2.000000 283.000000 259.000000 1.000000 6.000000 1.000000 0.000000 1.000000 1.000000 0.000000 0.000000 1.000000 2.000000 0.000000 0.000000 1.000000 1.000000 1.000000 1211.000000
Ole 456.000000 31.000000 25.000000 0.000000 0.000000 37.000000 0.000000 0.000000 1.000000 46.000000 0.000000 16.000000 10.000000 1.000000 0.000000 0.000000 467.000000 4.000000 0.000000 0.000000
er 384.000000 598.000000 367.000000 363.000000 430.000000 459.000000 384.000000 5.000000 263.000000 621.000000 1.000000 32.000000 317.000000 10.000000 0.000000 11.000000 336.000000 410.000000 277.000000 0.000000
jeg 381.000000 2626.000000 124.000000 161.000000 305.000000 214.000000 270.000000 3.000000 288.000000 387.000000 3.000000 26.000000 300.000000 0.000000 0.000000 6.000000 364.000000 285.000000 233.000000 0.000000
i 381.000000 1767.000000 457.000000 529.000000 529.000000 1228.000000 523.000000 20.000000 441.000000 998.000000 23.000000 23.000000 520.000000 23.000000 52.000000 8.000000 327.000000 581.000000 429.000000 9.000000
^ 361.000000 36.000000 566.000000 687.000000 0.000000 1.000000 1.000000 6.000000 0.000000 0.000000 15.000000 1.000000 0.000000 25.000000 71.000000 0.000000 0.000000 0.000000 0.000000 304.000000
var 353.000000 2691.000000 417.000000 537.000000 715.000000 912.000000 643.000000 9.000000 632.000000 1267.000000 10.000000 5.000000 757.000000 0.000000 4.000000 16.000000 437.000000 842.000000 620.000000 0.000000
en 347.000000 1377.000000 246.000000 461.000000 314.000000 502.000000 349.000000 19.000000 277.000000 633.000000 12.000000 8.000000 438.000000 4.000000 6.000000 10.000000 224.000000 448.000000 248.000000 3.000000
det 342.000000 2580.000000 526.000000 485.000000 944.000000 1072.000000 920.000000 18.000000 734.000000 1698.000000 4.000000 43.000000 845.000000 4.000000 6.000000 6.000000 705.000000 1063.000000 786.000000 0.000000
333.000000 1052.000000 270.000000 356.000000 703.000000 366.000000 788.000000 10.000000 617.000000 1315.000000 8.000000 13.000000 614.000000 1.000000 3.000000 9.000000 608.000000 908.000000 580.000000 0.000000
til 323.000000 1449.000000 311.000000 389.000000 459.000000 708.000000 480.000000 8.000000 381.000000 856.000000 15.000000 13.000000 449.000000 9.000000 8.000000 8.000000 335.000000 510.000000 399.000000 0.000000
sa 297.000000 694.000000 299.000000 319.000000 706.000000 243.000000 897.000000 8.000000 673.000000 1399.000000 6.000000 2.000000 624.000000 0.000000 7.000000 24.000000 638.000000 954.000000 818.000000 0.000000
ikke 293.000000 1163.000000 319.000000 464.000000 457.000000 459.000000 493.000000 5.000000 410.000000 865.000000 2.000000 10.000000 356.000000 1.000000 1.000000 10.000000 370.000000 561.000000 429.000000 0.000000

1.6.3. Frekvens for spesifikke termer#

def heatmap_loc(dr, ordliste, sorter=0):
    df = dr.loc[ordliste]
    return nb.heatmap(df.sort_values(by=df.columns[sorter], ascending=False))
# Her lager vi en funksjon heatmap_loc som vi bruker for å plukke ut enkelte ord fra korpuset som vi vil sammenlikne.


heatmap_loc(vestly.frame, "Mormor Morten Marte Ole Aleksander Guro Lillebror Knerten".split())
  100464830 100463710 100002573 100019176 100005885 100129979 100140407 100516696 100042846 100541708 100077106 100094409 100109455 100222464 100247914 100421899 100429916 100429957 100591047 100657019
Ole 456.000000 31.000000 25.000000 0.000000 0.000000 37.000000 0.000000 0.000000 1.000000 46.000000 0.000000 16.000000 10.000000 1.000000 0.000000 0.000000 467.000000 4.000000 0.000000 0.000000
Aleksander 243.000000 22.000000 19.000000 0.000000 0.000000 2.000000 0.000000 0.000000 1.000000 40.000000 0.000000 0.000000 10.000000 1.000000 0.000000 0.000000 460.000000 5.000000 0.000000 0.000000
Mormor 0.000000 51.000000 36.000000 0.000000 3.000000 0.000000 35.000000 0.000000 2.000000 95.000000 0.000000 0.000000 31.000000 1.000000 0.000000 0.000000 0.000000 0.000000 30.000000 0.000000
Morten 0.000000 6.000000 46.000000 0.000000 34.000000 1.000000 145.000000 0.000000 0.000000 280.000000 0.000000 0.000000 2.000000 1.000000 0.000000 1.000000 0.000000 7.000000 22.000000 0.000000
Marte 0.000000 1.000000 24.000000 0.000000 5.000000 0.000000 43.000000 0.000000 0.000000 65.000000 0.000000 0.000000 1.000000 2.000000 0.000000 3.000000 0.000000 0.000000 11.000000 0.000000
Guro 0.000000 17.000000 2.000000 0.000000 440.000000 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 18.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
Lillebror 0.000000 15.000000 1.000000 0.000000 0.000000 2.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000 2.000000 0.000000
Knerten 0.000000 20.000000 6.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 6.000000 0.000000 0.000000 0.000000 0.000000 0.000000 2.000000 0.000000
# Er forfatteren konsekvent når det kommer til ordformer?

heatmap_loc(vestly.frame, "boken boka sola solen".split())
  100464830 100463710 100002573 100019176 100005885 100129979 100140407 100516696 100042846 100541708 100077106 100094409 100109455 100222464 100247914 100421899 100429916 100429957 100591047 100657019
boken 0.000000 24.000000 0.000000 0.000000 0.000000 5.000000 0.000000 0.000000 2.000000 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 1.000000 3.000000 0.000000
boka 0.000000 0.000000 0.000000 0.000000 0.000000 2.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
sola 0.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000
solen 0.000000 3.000000 0.000000 0.000000 1.000000 1.000000 1.000000 0.000000 0.000000 4.000000 0.000000 0.000000 4.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000