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
                   ... 
ekstra                1
eget                  1
egenkjærligheden      1
egenflige             1
eneste                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()
100002573 100003437 100524772 100440922 100463823 100031786 100503110 100119169 100129179 100131673 100155956 100495388 100495411 100224766 100222464 100247914 100397512 100429146 100429371 100429373
, 1830.0 1890.0 2236.0 2279.0 2726.0 2087.0 2544.0 3086.0 10898.0 2600.0 2883.0 1947.0 577.0 2583.0 27.0 51.0 283.0 2782.0 2371.0 2074.0
. 1620.0 1738.0 1637.0 2079.0 2378.0 1983.0 2347.0 2399.0 10085.0 2134.0 2673.0 2042.0 669.0 2157.0 57.0 72.0 299.0 1951.0 1889.0 1707.0
« 948.0 975.0 1032.0 986.0 10.0 775.0 1233.0 1811.0 4910.0 1287.0 1395.0 639.0 0.0 1170.0 5.0 13.0 5.0 1252.0 1009.0 1010.0
» 908.0 915.0 1055.0 985.0 12.0 773.0 1229.0 1809.0 4908.0 1288.0 1399.0 635.0 0.0 1173.0 5.0 8.0 5.0 1252.0 1008.0 1013.0
og 892.0 1083.0 672.0 1588.0 1475.0 1387.0 2042.0 1434.0 6955.0 1373.0 1644.0 1331.0 461.0 1574.0 21.0 25.0 145.0 1618.0 1494.0 924.0
# Vi kan legge på et varmekart for lettere å få oversikt

nb.heatmap(vestly.frame.head(20))
  100002573 100003437 100524772 100440922 100463823 100031786 100503110 100119169 100129179 100131673 100155956 100495388 100495411 100224766 100222464 100247914 100397512 100429146 100429371 100429373
, 1830.000000 1890.000000 2236.000000 2279.000000 2726.000000 2087.000000 2544.000000 3086.000000 10898.000000 2600.000000 2883.000000 1947.000000 577.000000 2583.000000 27.000000 51.000000 283.000000 2782.000000 2371.000000 2074.000000
. 1620.000000 1738.000000 1637.000000 2079.000000 2378.000000 1983.000000 2347.000000 2399.000000 10085.000000 2134.000000 2673.000000 2042.000000 669.000000 2157.000000 57.000000 72.000000 299.000000 1951.000000 1889.000000 1707.000000
« 948.000000 975.000000 1032.000000 986.000000 10.000000 775.000000 1233.000000 1811.000000 4910.000000 1287.000000 1395.000000 639.000000 0.000000 1170.000000 5.000000 13.000000 5.000000 1252.000000 1009.000000 1010.000000
» 908.000000 915.000000 1055.000000 985.000000 12.000000 773.000000 1229.000000 1809.000000 4908.000000 1288.000000 1399.000000 635.000000 0.000000 1173.000000 5.000000 8.000000 5.000000 1252.000000 1008.000000 1013.000000
og 892.000000 1083.000000 672.000000 1588.000000 1475.000000 1387.000000 2042.000000 1434.000000 6955.000000 1373.000000 1644.000000 1331.000000 461.000000 1574.000000 21.000000 25.000000 145.000000 1618.000000 1494.000000 924.000000
^ 566.000000 649.000000 861.000000 2.000000 0.000000 2.000000 2.000000 4.000000 103.000000 1.000000 0.000000 31.000000 0.000000 2.000000 25.000000 71.000000 0.000000 0.000000 0.000000 0.000000
det 526.000000 674.000000 478.000000 863.000000 999.000000 776.000000 1019.000000 890.000000 4070.000000 820.000000 925.000000 849.000000 193.000000 944.000000 4.000000 6.000000 92.000000 866.000000 788.000000 598.000000
a 497.000000 559.000000 403.000000 6.000000 8.000000 2.000000 2.000000 8.000000 19.000000 3.000000 3.000000 17.000000 7.000000 4.000000 4.000000 1.000000 0.000000 1.000000 3.000000 10.000000
6 465.000000 338.000000 596.000000 0.000000 1.000000 1.000000 1.000000 0.000000 2.000000 0.000000 0.000000 2.000000 3.000000 1.000000 0.000000 0.000000 3.000000 0.000000 1.000000 2.000000
i 457.000000 429.000000 505.000000 461.000000 559.000000 466.000000 531.000000 456.000000 2367.000000 375.000000 529.000000 653.000000 169.000000 542.000000 23.000000 52.000000 55.000000 494.000000 375.000000 352.000000
var 417.000000 566.000000 506.000000 660.000000 700.000000 621.000000 856.000000 539.000000 2974.000000 617.000000 647.000000 676.000000 75.000000 585.000000 0.000000 4.000000 7.000000 617.000000 676.000000 351.000000
er 367.000000 338.000000 307.000000 327.000000 387.000000 238.000000 423.000000 501.000000 1535.000000 391.000000 383.000000 270.000000 192.000000 557.000000 10.000000 0.000000 77.000000 444.000000 412.000000 343.000000
ikke 319.000000 356.000000 402.000000 419.000000 472.000000 372.000000 461.000000 572.000000 2002.000000 457.000000 493.000000 346.000000 92.000000 391.000000 1.000000 1.000000 56.000000 479.000000 440.000000 325.000000
til 311.000000 370.000000 386.000000 408.000000 495.000000 374.000000 521.000000 449.000000 1973.000000 381.000000 482.000000 374.000000 90.000000 559.000000 9.000000 8.000000 48.000000 410.000000 427.000000 325.000000
sa 299.000000 236.000000 256.000000 650.000000 760.000000 496.000000 845.000000 1194.000000 3091.000000 834.000000 896.000000 262.000000 79.000000 716.000000 0.000000 7.000000 0.000000 797.000000 666.000000 566.000000
285.000000 280.000000 228.000000 641.000000 666.000000 630.000000 805.000000 614.000000 2921.000000 566.000000 675.000000 566.000000 145.000000 642.000000 6.000000 5.000000 62.000000 585.000000 590.000000 488.000000
8 283.000000 370.000000 345.000000 1.000000 1.000000 1.000000 2.000000 1.000000 1.000000 4.000000 1.000000 1.000000 2.000000 1.000000 2.000000 0.000000 2.000000 1.000000 1.000000 1.000000
270.000000 313.000000 272.000000 633.000000 734.000000 535.000000 760.000000 743.000000 2896.000000 687.000000 772.000000 520.000000 115.000000 507.000000 1.000000 3.000000 70.000000 776.000000 627.000000 586.000000
2 262.000000 190.000000 567.000000 0.000000 0.000000 2.000000 0.000000 0.000000 4.000000 1.000000 1.000000 1.000000 0.000000 0.000000 3.000000 1.000000 0.000000 3.000000 0.000000 0.000000
en 246.000000 352.000000 384.000000 378.000000 375.000000 286.000000 402.000000 316.000000 1487.000000 339.000000 348.000000 357.000000 150.000000 418.000000 4.000000 6.000000 46.000000 376.000000 328.000000 266.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())
  100002573 100003437 100524772 100440922 100463823 100031786 100503110 100119169 100129179 100131673 100155956 100495388 100495411 100224766 100222464 100247914 100397512 100429146 100429371 100429373
Morten 46.000000 190.000000 1.000000 147.000000 517.000000 136.000000 0.000000 0.000000 897.000000 0.000000 145.000000 0.000000 0.000000 72.000000 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000
Mormor 36.000000 19.000000 3.000000 64.000000 59.000000 57.000000 0.000000 0.000000 265.000000 0.000000 34.000000 0.000000 0.000000 37.000000 1.000000 0.000000 0.000000 2.000000 0.000000 0.000000
Ole 25.000000 46.000000 11.000000 7.000000 93.000000 46.000000 1.000000 0.000000 114.000000 0.000000 5.000000 38.000000 0.000000 2.000000 1.000000 0.000000 0.000000 0.000000 0.000000 473.000000
Marte 24.000000 30.000000 1.000000 72.000000 14.000000 23.000000 0.000000 0.000000 361.000000 0.000000 44.000000 0.000000 1.000000 8.000000 2.000000 0.000000 0.000000 0.000000 0.000000 0.000000
Aleksander 19.000000 26.000000 7.000000 7.000000 89.000000 40.000000 0.000000 0.000000 105.000000 0.000000 5.000000 38.000000 0.000000 1.000000 1.000000 0.000000 0.000000 0.000000 0.000000 468.000000
Knerten 6.000000 0.000000 6.000000 0.000000 0.000000 0.000000 0.000000 389.000000 0.000000 429.000000 5.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000
Guro 2.000000 0.000000 3.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 8.000000 0.000000 0.000000 0.000000 500.000000 496.000000 0.000000
Lillebror 1.000000 0.000000 1.000000 0.000000 0.000000 0.000000 0.000000 775.000000 0.000000 717.000000 1.000000 0.000000 0.000000 0.000000 0.000000 0.000000 61.000000 0.000000 0.000000 0.000000
# Er forfatteren konsekvent når det kommer til ordformer?

heatmap_loc(vestly.frame, "boken boka sola solen".split())
  100002573 100003437 100524772 100440922 100463823 100031786 100503110 100119169 100129179 100131673 100155956 100495388 100495411 100224766 100222464 100247914 100397512 100429146 100429371 100429373
boken 0.000000 0.000000 3.000000 1.000000 3.000000 1.000000 1.000000 3.000000 4.000000 0.000000 1.000000 1.000000 0.000000 3.000000 0.000000 0.000000 0.000000 0.000000 1.000000 0.000000
boka 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 4.000000 1.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 3.000000 0.000000 0.000000 3.000000 2.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
solen 0.000000 2.000000 0.000000 0.000000 0.000000 3.000000 3.000000 8.000000 7.000000 0.000000 1.000000 4.000000 1.000000 1.000000 0.000000 0.000000 0.000000 1.000000 0.000000 0.000000