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
      ... 
03       1
02       1
01       1
000      1
0.       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()
100522279 100032732 100499968 100495413 100459159 100440922 100424126 100428431 100429419 100151409 100151591 100502723 100476227 100109455 100124378 100189741 100268749 100388874 100418860 100591081
. 737.0 1881.0 3361.0 733.0 9221.0 2079.0 1674.0 1858.0 1933.0 2167.0 1895.0 2304.0 1802.0 1772.0 1969.0 2251.0 56.0 15918.0 10.0 244.0
, 562.0 2947.0 3833.0 707.0 13551.0 2279.0 1875.0 2953.0 2405.0 2596.0 2215.0 2873.0 2607.0 2446.0 2745.0 2545.0 31.0 20293.0 2.0 239.0
og 419.0 1808.0 1900.0 493.0 8114.0 1588.0 1105.0 1809.0 1742.0 1371.0 1389.0 1470.0 1883.0 1884.0 1616.0 1298.0 13.0 10436.0 5.0 188.0
i 396.0 562.0 655.0 239.0 4263.0 461.0 414.0 565.0 527.0 374.0 475.0 461.0 534.0 520.0 488.0 491.0 15.0 3426.0 3.0 71.0
241.0 4.0 0.0 2.0 13.0 1.0 4.0 0.0 1.0 1.0 0.0 0.0 5.0 0.0 3.0 1.0 34.0 25.0 4.0 0.0
# Vi kan legge på et varmekart for lettere å få oversikt

nb.heatmap(vestly.frame.head(20))
  100522279 100032732 100499968 100495413 100459159 100440922 100424126 100428431 100429419 100151409 100151591 100502723 100476227 100109455 100124378 100189741 100268749 100388874 100418860 100591081
. 737.000000 1881.000000 3361.000000 733.000000 9221.000000 2079.000000 1674.000000 1858.000000 1933.000000 2167.000000 1895.000000 2304.000000 1802.000000 1772.000000 1969.000000 2251.000000 56.000000 15918.000000 10.000000 244.000000
, 562.000000 2947.000000 3833.000000 707.000000 13551.000000 2279.000000 1875.000000 2953.000000 2405.000000 2596.000000 2215.000000 2873.000000 2607.000000 2446.000000 2745.000000 2545.000000 31.000000 20293.000000 2.000000 239.000000
og 419.000000 1808.000000 1900.000000 493.000000 8114.000000 1588.000000 1105.000000 1809.000000 1742.000000 1371.000000 1389.000000 1470.000000 1883.000000 1884.000000 1616.000000 1298.000000 13.000000 10436.000000 5.000000 188.000000
i 396.000000 562.000000 655.000000 239.000000 4263.000000 461.000000 414.000000 565.000000 527.000000 374.000000 475.000000 461.000000 534.000000 520.000000 488.000000 491.000000 15.000000 3426.000000 3.000000 71.000000
241.000000 4.000000 0.000000 2.000000 13.000000 1.000000 4.000000 0.000000 1.000000 1.000000 0.000000 0.000000 5.000000 0.000000 3.000000 1.000000 34.000000 25.000000 4.000000 0.000000
- 200.000000 8.000000 36.000000 150.000000 2216.000000 6.000000 18.000000 9.000000 41.000000 15.000000 35.000000 16.000000 21.000000 3.000000 84.000000 6.000000 24.000000 68.000000 10.000000 0.000000
det 195.000000 947.000000 1137.000000 260.000000 3850.000000 863.000000 699.000000 948.000000 943.000000 818.000000 738.000000 960.000000 880.000000 845.000000 867.000000 795.000000 9.000000 6208.000000 1.000000 130.000000
* 192.000000 9.000000 0.000000 6.000000 31.000000 3.000000 1.000000 1.000000 1.000000 2.000000 0.000000 0.000000 9.000000 0.000000 3.000000 2.000000 56.000000 315.000000 0.000000 1.000000
er 189.000000 421.000000 576.000000 118.000000 1879.000000 327.000000 335.000000 422.000000 430.000000 386.000000 378.000000 443.000000 385.000000 317.000000 447.000000 375.000000 3.000000 3040.000000 6.000000 146.000000
: 177.000000 109.000000 103.000000 46.000000 1127.000000 62.000000 58.000000 111.000000 122.000000 70.000000 88.000000 79.000000 122.000000 131.000000 108.000000 68.000000 11.000000 519.000000 4.000000 5.000000
« 151.000000 1368.000000 2269.000000 0.000000 1698.000000 986.000000 912.000000 1369.000000 1031.000000 1288.000000 1147.000000 1526.000000 1109.000000 923.000000 1251.000000 1448.000000 19.000000 10903.000000 0.000000 2.000000
149.000000 633.000000 904.000000 195.000000 2601.000000 641.000000 489.000000 635.000000 573.000000 564.000000 568.000000 682.000000 693.000000 632.000000 584.000000 605.000000 5.000000 4489.000000 1.000000 104.000000
' 146.000000 58.000000 39.000000 25.000000 350.000000 45.000000 99.000000 0.000000 0.000000 30.000000 7.000000 9.000000 72.000000 25.000000 25.000000 15.000000 26.000000 74.000000 0.000000 1.000000
» 132.000000 1363.000000 2269.000000 0.000000 1696.000000 985.000000 915.000000 1363.000000 1027.000000 1285.000000 1146.000000 1526.000000 1111.000000 922.000000 1254.000000 1447.000000 23.000000 10900.000000 0.000000 2.000000
( 132.000000 1.000000 1.000000 4.000000 146.000000 0.000000 2.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 0.000000 3.000000 29.000000 2.000000 0.000000
) 130.000000 0.000000 1.000000 5.000000 149.000000 0.000000 2.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 0.000000 1.000000 11.000000 2.000000 0.000000
128.000000 9.000000 14.000000 0.000000 31.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 1.000000 89.000000 2.000000 4.000000 2.000000 135.000000 1.000000 10.000000
med 128.000000 330.000000 384.000000 116.000000 2130.000000 286.000000 208.000000 330.000000 331.000000 306.000000 294.000000 296.000000 376.000000 379.000000 316.000000 247.000000 4.000000 2135.000000 1.000000 50.000000
de 127.000000 423.000000 418.000000 104.000000 1687.000000 487.000000 278.000000 424.000000 362.000000 243.000000 352.000000 292.000000 368.000000 444.000000 277.000000 264.000000 3.000000 1881.000000 1.000000 45.000000
som 126.000000 370.000000 398.000000 125.000000 2760.000000 328.000000 244.000000 371.000000 365.000000 268.000000 307.000000 288.000000 361.000000 372.000000 355.000000 271.000000 4.000000 1963.000000 0.000000 45.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())
  100522279 100032732 100499968 100495413 100459159 100440922 100424126 100428431 100429419 100151409 100151591 100502723 100476227 100109455 100124378 100189741 100268749 100388874 100418860 100591081
Ole 4.000000 5.000000 2.000000 0.000000 41.000000 7.000000 20.000000 5.000000 0.000000 0.000000 10.000000 0.000000 4.000000 10.000000 0.000000 2.000000 0.000000 2.000000 0.000000 0.000000
Mormor 1.000000 3.000000 0.000000 3.000000 0.000000 64.000000 43.000000 3.000000 3.000000 0.000000 1.000000 0.000000 22.000000 31.000000 2.000000 0.000000 0.000000 0.000000 0.000000 0.000000
Aleksander 1.000000 5.000000 0.000000 0.000000 0.000000 7.000000 20.000000 5.000000 0.000000 0.000000 10.000000 0.000000 1.000000 10.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
Morten 0.000000 0.000000 0.000000 3.000000 2.000000 147.000000 77.000000 0.000000 34.000000 0.000000 1.000000 0.000000 66.000000 2.000000 0.000000 0.000000 0.000000 0.000000 7.000000 0.000000
Marte 0.000000 0.000000 0.000000 10.000000 0.000000 72.000000 43.000000 0.000000 5.000000 0.000000 1.000000 0.000000 5.000000 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
Guro 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 440.000000 0.000000 7.000000 0.000000 94.000000 18.000000 506.000000 0.000000 0.000000 0.000000 0.000000 0.000000
Lillebror 0.000000 0.000000 1021.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 717.000000 1.000000 669.000000 2.000000 1.000000 0.000000 666.000000 0.000000 5101.000000 0.000000 0.000000
Knerten 0.000000 0.000000 463.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 428.000000 6.000000 425.000000 1.000000 6.000000 1.000000 302.000000 0.000000 2874.000000 0.000000 0.000000
# Er forfatteren konsekvent når det kommer til ordformer?

heatmap_loc(vestly.frame, "boken boka sola solen".split())
  100522279 100032732 100499968 100495413 100459159 100440922 100424126 100428431 100429419 100151409 100151591 100502723 100476227 100109455 100124378 100189741 100268749 100388874 100418860 100591081
boken 5.000000 1.000000 8.000000 0.000000 20.000000 1.000000 0.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000 0.000000 7.000000 0.000000 21.000000 0.000000 0.000000
sola 1.000000 0.000000 0.000000 3.000000 11.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 0.000000
solen 1.000000 6.000000 9.000000 0.000000 59.000000 0.000000 0.000000 6.000000 1.000000 0.000000 1.000000 1.000000 2.000000 4.000000 1.000000 1.000000 0.000000 10.000000 0.000000 0.000000
boka 0.000000 0.000000 1.000000 2.000000 1.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 0.000000