
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
...
motiverer 1
Tottes 1
trevter 1
kulturhistorie 1
u-ibsensk 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 |
| på | 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()
| 100464830 | 100463710 | 100019176 | 100527655 | 100046667 | 100031417 | 100503110 | 100541414 | 100542501 | 100109455 | 100194239 | 100224766 | 100226062 | 100233761 | 100236298 | 100371302 | 100421899 | 100429146 | 100657518 | 100682537 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| , | 1926 | 6806 | 2148 | 2774 | 1291 | 837 | 2544 | 2492 | 2917 | 2446 | 2595 | 2583 | 332 | 366 | 399 | 58 | 50 | 2782 | 2052 | 1838 |
| . | 1636 | 4738 | 1960 | 2332 | 1246 | 1002 | 2347 | 1681 | 1962 | 1772 | 2117 | 2157 | 370 | 329 | 379 | 100 | 73 | 1951 | 2395 | 1997 |
| « | 1014 | 897 | 1103 | 1534 | 542 | 7 | 1233 | 1093 | 1229 | 923 | 1282 | 1170 | 187 | 151 | 218 | 20 | 41 | 1252 | 5 | 493 |
| » | 1005 | 895 | 1088 | 1533 | 544 | 8 | 1229 | 1095 | 1227 | 922 | 1287 | 1173 | 188 | 151 | 219 | 8 | 43 | 1252 | 3 | 492 |
| 6 | 917 | 2 | 820 | 0 | 0 | 2 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 2 | 0 | 0 | 1 | 8 |
# Vi kan legge på et varmekart for lettere å få oversikt
nb.heatmap(vestly.frame.head(20))
| 100464830 | 100463710 | 100019176 | 100527655 | 100046667 | 100031417 | 100503110 | 100541414 | 100542501 | 100109455 | 100194239 | 100224766 | 100226062 | 100233761 | 100236298 | 100371302 | 100421899 | 100429146 | 100657518 | 100682537 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| , | 1926 | 6806 | 2148 | 2774 | 1291 | 837 | 2544 | 2492 | 2917 | 2446 | 2595 | 2583 | 332 | 366 | 399 | 58 | 50 | 2782 | 2052 | 1838 |
| . | 1636 | 4738 | 1960 | 2332 | 1246 | 1002 | 2347 | 1681 | 1962 | 1772 | 2117 | 2157 | 370 | 329 | 379 | 100 | 73 | 1951 | 2395 | 1997 |
| « | 1014 | 897 | 1103 | 1534 | 542 | 7 | 1233 | 1093 | 1229 | 923 | 1282 | 1170 | 187 | 151 | 218 | 20 | 41 | 1252 | 5 | 493 |
| » | 1005 | 895 | 1088 | 1533 | 544 | 8 | 1229 | 1095 | 1227 | 922 | 1287 | 1173 | 188 | 151 | 219 | 8 | 43 | 1252 | 3 | 492 |
| 6 | 917 | 2 | 820 | 0 | 0 | 2 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 2 | 0 | 0 | 1 | 8 |
| og | 806 | 4929 | 816 | 1494 | 899 | 511 | 2042 | 1750 | 1741 | 1884 | 1372 | 1574 | 188 | 244 | 134 | 26 | 38 | 1618 | 1 | 1389 |
| a | 774 | 6 | 384 | 5 | 5 | 0 | 2 | 5 | 6 | 1 | 3 | 4 | 4 | 1 | 1 | 11 | 0 | 1 | 189 | 18 |
| 8 | 494 | 2 | 259 | 1 | 2 | 2 | 2 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 2 | 7 |
| Ole | 456 | 31 | 0 | 5 | 315 | 0 | 1 | 0 | 1 | 10 | 0 | 2 | 36 | 84 | 71 | 0 | 0 | 0 | 1 | 0 |
| er | 384 | 598 | 363 | 443 | 196 | 335 | 423 | 391 | 540 | 317 | 385 | 557 | 45 | 59 | 81 | 0 | 11 | 444 | 0 | 187 |
| i | 381 | 1767 | 529 | 466 | 320 | 223 | 531 | 445 | 588 | 520 | 381 | 542 | 79 | 65 | 74 | 84 | 8 | 494 | 918 | 694 |
| jeg | 381 | 2626 | 161 | 438 | 190 | 306 | 377 | 281 | 535 | 300 | 338 | 450 | 33 | 0 | 93 | 0 | 6 | 512 | 0 | 163 |
| ^ | 361 | 36 | 687 | 1 | 1 | 4 | 2 | 0 | 0 | 0 | 15 | 2 | 0 | 2 | 0 | 68 | 0 | 0 | 12 | 245 |
| var | 353 | 2691 | 537 | 684 | 293 | 80 | 856 | 580 | 635 | 757 | 616 | 585 | 79 | 78 | 86 | 4 | 16 | 617 | 0 | 598 |
| en | 347 | 1377 | 461 | 341 | 245 | 134 | 402 | 337 | 444 | 438 | 339 | 418 | 45 | 0 | 56 | 6 | 10 | 376 | 1 | 401 |
| det | 342 | 2580 | 485 | 961 | 499 | 348 | 1019 | 747 | 983 | 845 | 819 | 944 | 134 | 141 | 127 | 6 | 6 | 866 | 0 | 667 |
| så | 333 | 1052 | 356 | 722 | 367 | 156 | 760 | 578 | 557 | 614 | 687 | 507 | 96 | 76 | 114 | 3 | 9 | 776 | 0 | 410 |
| til | 323 | 1449 | 389 | 470 | 240 | 187 | 521 | 365 | 548 | 449 | 381 | 559 | 71 | 79 | 69 | 8 | 8 | 410 | 0 | 358 |
| sa | 297 | 694 | 319 | 1019 | 263 | 21 | 845 | 722 | 776 | 624 | 833 | 716 | 107 | 62 | 132 | 8 | 24 | 797 | 0 | 247 |
| ikke | 293 | 1163 | 464 | 542 | 194 | 216 | 461 | 330 | 470 | 356 | 456 | 391 | 55 | 0 | 71 | 1 | 10 | 479 | 0 | 308 |
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 | 100019176 | 100527655 | 100046667 | 100031417 | 100503110 | 100541414 | 100542501 | 100109455 | 100194239 | 100224766 | 100226062 | 100233761 | 100236298 | 100371302 | 100421899 | 100429146 | 100657518 | 100682537 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Ole | 456 | 31 | 0 | 5 | 315 | 0 | 1 | 0 | 1 | 10 | 0 | 2 | 36 | 84 | 71 | 0 | 0 | 0 | 1 | 0 |
| Aleksander | 243 | 22 | 0 | 5 | 310 | 0 | 0 | 0 | 0 | 10 | 0 | 1 | 88 | 85 | 92 | 0 | 0 | 0 | 0 | 0 |
| Morten | 0 | 6 | 0 | 1 | 0 | 0 | 0 | 45 | 55 | 2 | 0 | 72 | 0 | 0 | 0 | 0 | 1 | 0 | 100 | 10 |
| Mormor | 0 | 51 | 0 | 2 | 0 | 0 | 0 | 4 | 8 | 31 | 0 | 37 | 0 | 0 | 0 | 0 | 0 | 2 | 0 | 0 |
| Marte | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 2 | 6 | 1 | 0 | 8 | 0 | 0 | 0 | 0 | 3 | 0 | 0 | 63 |
| Guro | 0 | 17 | 0 | 7 | 0 | 0 | 0 | 48 | 1 | 18 | 0 | 8 | 0 | 0 | 0 | 0 | 0 | 500 | 0 | 0 |
| Lillebror | 0 | 15 | 0 | 667 | 0 | 0 | 0 | 23 | 0 | 1 | 711 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| Knerten | 0 | 20 | 0 | 435 | 0 | 0 | 0 | 17 | 0 | 6 | 427 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
# Er forfatteren konsekvent når det kommer til ordformer?
heatmap_loc(vestly.frame, "sola solen".split())
| 100464830 | 100463710 | 100019176 | 100527655 | 100046667 | 100031417 | 100503110 | 100541414 | 100542501 | 100109455 | 100194239 | 100224766 | 100226062 | 100233761 | 100236298 | 100371302 | 100421899 | 100429146 | 100657518 | 100682537 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| sola | 0 | 0 | 0 | 0 | 0 | 6 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| solen | 0 | 3 | 0 | 1 | 0 | 5 | 3 | 0 | 0 | 4 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 2 |