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
from dhlab import graph_networkx_louvain as gnl
import pandas as pd
from dhlab import 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
                   ... 
j                     1
Riksteater-turne      1
VELKOMMEN             1
Priser                1
bestillinger          1
Name: 100431574, Length: 1597, dtype: Sparse[int64, 0]

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.00005
def             0.00003
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.00001
ensemblet       0.00001
Høst            0.00001
Jæger           0.00001
kontra         0.000009
Peggy          0.000009
Vauxhall       0.000009
dtype: Sparse[float64, nan]
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.00019
skrudde 0.000154
Jada 0.00013
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.00009

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()
100019218 100514641 100502239 100503110 100514850 100032732 100576702 100566074 100461961 100467204 100475774 100559117 100521313 100523797 100216604 100323467 100397041 100429373 300410122 300409627
, 2357 2433 1954 2544 1821 2947 2927 2316 4457 4610 4848 2282 1933 1872 215 431 2944 2074 282 242
. 1774 1628 1955 2347 1907 1881 2676 1734 3654 3804 3600 2087 1948 1490 290 430 2389 1707 362 342
og 1455 1714 898 2042 886 1808 1642 1479 2301 2463 3539 1597 896 1088 148 261 1438 924 97 74
» 1047 815 1040 1229 1034 1363 1400 930 2527 2080 2157 985 1041 981 1 242 1807 1013 42 53
« 1040 813 1037 1233 1030 1368 1399 932 2532 2082 2151 983 1040 981 6 241 1813 1010 41 37
# Vi kan legge på et varmekart for lettere å få oversikt

nb.heatmap(vestly.frame.head(20))
  100019218 100514641 100502239 100503110 100514850 100032732 100576702 100566074 100461961 100467204 100475774 100559117 100521313 100523797 100216604 100323467 100397041 100429373 300410122 300409627
, 2357 2433 1954 2544 1821 2947 2927 2316 4457 4610 4848 2282 1933 1872 215 431 2944 2074 282 242
. 1774 1628 1955 2347 1907 1881 2676 1734 3654 3804 3600 2087 1948 1490 290 430 2389 1707 362 342
og 1455 1714 898 2042 886 1808 1642 1479 2301 2463 3539 1597 896 1088 148 261 1438 924 97 74
» 1047 815 1040 1229 1034 1363 1400 930 2527 2080 2157 985 1041 981 1 242 1807 1013 42 53
« 1040 813 1037 1233 1030 1368 1399 932 2532 2082 2151 983 1040 981 6 241 1813 1010 41 37
82 916 2 2 3 1 3 1 2 2 1 5 3 1 3 2 1 2 2 0 0
2 879 0 2 0 1 1 1 0 0 3 1 0 5 0 2 0 0 0 13 24
6 812 0 1 1 3 2 2 0 0 1 2 0 6 0 0 1 0 2 3 10
er 457 327 337 423 324 421 387 386 742 590 837 327 334 253 120 92 501 343 16 8
^ 444 0 9 2 12 16 7 2 0 19 25 9 10 8 6 0 0 0 863 769
ikke 434 403 371 461 346 446 493 417 864 879 673 419 370 350 48 0 573 325 15 20
til 426 405 334 521 339 460 482 422 722 772 917 408 334 329 49 93 449 325 24 10
i 419 439 323 531 319 562 531 429 736 953 949 462 330 343 64 69 460 352 164 151
var 414 699 436 856 427 647 647 704 1004 1235 1213 660 438 466 6 92 541 351 26 28
en 412 315 222 402 251 411 322 309 505 614 650 379 229 215 55 0 319 266 25 14
jeg 345 303 364 377 319 289 272 375 684 591 434 99 366 316 12 0 461 418 3 6
det 341 936 705 1019 629 947 927 831 1505 1516 1772 863 703 587 56 136 890 598 32 46
et 307 73 76 113 89 101 114 61 139 149 245 113 77 62 13 0 94 45 3 4
kun 274 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 0
244 633 509 805 488 633 674 500 988 992 1157 641 507 461 39 113 608 488 29 30

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())
  100019218 100514641 100502239 100503110 100514850 100032732 100576702 100566074 100461961 100467204 100475774 100559117 100521313 100523797 100216604 100323467 100397041 100429373 300410122 300409627
Guro 201 320 0 0 0 0 0 440 0 0 93 0 0 0 0 0 0 0 0 0
Ole 10 14 467 1 458 5 0 2 0 1 0 7 476 0 0 105 0 473 3 4
Aleksander 8 10 457 0 444 5 0 1 0 1 0 7 470 0 0 105 0 468 3 4
Knerten 5 7 0 0 0 0 0 1 643 0 10 0 0 267 96 0 398 0 0 0
Mormor 1 12 0 0 0 3 34 2 0 2 113 66 0 0 0 0 0 0 4 2
Morten 1 51 0 0 0 0 145 17 0 0 34 148 0 0 0 0 0 0 14 20
Marte 1 13 0 0 0 0 43 0 0 0 4 73 0 0 0 0 0 0 2 2
Lillebror 0 6 0 0 0 0 0 1 1087 0 7 0 0 527 111 0 773 0 0 0
# Er forfatteren konsekvent når det kommer til ordformer?

heatmap_loc(vestly.frame, "sola solen".split())
  100019218 100514641 100502239 100503110 100514850 100032732 100576702 100566074 100461961 100467204 100475774 100559117 100521313 100523797 100216604 100323467 100397041 100429373 300410122 300409627
sola 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
solen 0 0 0 3 2 6 1 0 1 0 5 0 0 0 0 0 8 0 0 0