DIGAR      DEA     ERB     ISE     ISIKUD/KOLLEKTIIVID     Andmekaevurile     Näited

Sissejuhatus

Siin on üks tekstiotsingu kasutusnäidis. Näiteks võib meid huvitada, kuidas kajastati eri energiaallikaid 20. sajandi alguses Eestis. Võimalike küsimuste hulk on suur, siin keskendume lihtsamaile neist. Näidise juures on koodinäidised, mis võimaldavad sarnaseid otsinguid dea.digar.ee avatud kogudest teha.

Ligipääs

dea.digar.ee avatud materjalid on hoiustatud ETAIS serverisse. Neile pääseb ligi ETAIS serveri Jupyter keskkonna kaudu https://jupyter.hpc.ut.ee/. Praegu on ligipääsuks tehtud R-i pakett, mis 1) avab kerge vaevaga metaandmed, 2) võimaldab teha sihipäraseid valimeid tervikkogust, 3) võimaldab koondada tekste otsingusõnade alusel ja 4) võimaldab vaadata otsingute lähemat konteksti.

Kasutajanime saab küsida data@nlib.ee. Sisse logimisel töötavad ETAISi või UT arvutuskeskusega seotud kasutajanimed.

Paketi käivitamine

Artiklite ligipääsuks tehtud käsud on vormistatud hetkel R-i paketina. Selle kasutamiseks tuleks avada Jupyteri keskkonnas uus Notebook, seades kerneliks R-i pakutud versiooni. Failide ligipääsuks tuleb paigaldada notebooki pakett digar.txts järgnevate käskudega. Kuna Jupyter keskkonnas on administratsiooniõigused piiratud, tuleb see pakett paigaldada kohalikku kataloogi. Teeme kõigepealt kataloogi R_pckg ja installime sinna digar.txts paketi. Muid pakette pole vaja uuendada. Seejärel käivitame installitud paketi library() käsuga, lisades parameetri installfailide asukoha kohta.

dir.create("~/R_pckg")
## Warning in dir.create("~/R_pckg"): '/gpfs/space/home/ptinits/R_pckg' already
## exists
remotes::install_github("peeter-t2/digar.txts",lib="~/R_pckg/",upgrade="never")
library(digar.txts,lib.loc="~/R_pckg/")

Andmetega mugavaks ringikäimiseks tuleb käivitada veel mõned paketid. Järgmises juhendis kasutame tidyverse pakette andmete muundamiseks ja tidytext lisapaketti lihtsamaks tekstitöötluseks.

library(tidyverse)
library(tidytext)

Andmed

Esimese asjana tahame me kätte saada ülevaate kollektsiooni sisust. Viimase versiooni kollektsiooni sisust loeb sisse käsk get_digar_overview(). Salvestame selle muutujasse all_issues. Ja vaatame seejärel esimest 5 rida seal.

all_issues <- get_digar_overview()
## [1] "Issue metadata read"
all_issues %>% head(5) %>% select(1:10) %>%  knitr::kable()
keyid DocumentID DocumentTitle DocumentType dateraw date month year decade language
AKabiline AKabiline201710 Abiline : [ajakiri] PERIODICAL 201710 2017-10-01 10 2017 2010 Estonian
AKabiline AKabiline201804 Abiline : [ajakiri] PERIODICAL 201804 2018-04-01 4 2018 2010 Estonian
AKagraarteadus AKagraarteadus201706 Agraarteadus = Journal of agricultural science : Akadeemilise Põllumajanduse Seltsi väljaann PERIODICAL 201706 2017-06-01 6 2017 2010 Estonian
AKagraarteadus AKagraarteadus201712 Agraarteadus = Journal of agricultural science : Akadeemilise Põllumajanduse Seltsi väljaann PERIODICAL 201712 2017-12-01 12 2017 2010 Estonian
AKagraarteadus AKagraarteadus201806 Agraarteadus = Journal of agricultural science : Akadeemilise Põllumajanduse Seltsi väljaann PERIODICAL 201806 2018-06-01 6 2018 2010 Estonian

Valimi loomine

Me võime valida välja oma valimi uurides kollektsiooni sisu põhjalikult. Siin näites võtame aluseks ajalehed, mis on ilmunud 1880 ja 1940 aasta vahel.

subset <- all_issues %>%
    filter(DocumentType=="NEWSPAPER") %>%
    filter(year>1880&year<1940)

Vaatame valimi 5 esimest rida.

subset %>% head(5) %>% select(1:10) %>% knitr::kable()
keyid DocumentID DocumentTitle DocumentType dateraw date month year decade language
aadressleht aadressleht19290906 Aadressleht NEWSPAPER 19290906 1929-09-06 9 1929 1920 Estonian
aadressleht aadressleht19290907 Aadressleht NEWSPAPER 19290907 1929-09-07 9 1929 1920 Estonian
aadressleht aadressleht19290908 Aadressleht NEWSPAPER 19290908 1929-09-08 9 1929 1920 Estonian
aadressleht aadressleht19290910 Aadressleht NEWSPAPER 19290910 1929-09-10 9 1929 1920 Estonian
aadressleht aadressleht19290911 Aadressleht NEWSPAPER 19290911 1929-09-11 9 1929 1920 Estonian

Selle kriteeriumi järgi leiame 626 erinevat lehte, kus kõige enam on Postimehe numbreid - 15363.

subset %>% count(keyid,sort=T)
##                           keyid     n
##   1:                postimeesew 15363
##   2:                paevalehtew 10831
##   3:         revelskieizvestija  7209
##   4:                    wabamaa  5860
##   5:                   sakalaew  5613
##  ---                                 
## 622: voitluseleprovokatsiooniga     1
## 623:                       voog     1
## 624:              voorasteejuht     1
## 625:       wabaeestierakondliku     1
## 626:        walgjoewaatlejatapa     1

Et tagada tasakaalustatust valimis, valime välja ainult ühe lehe, millel on siin hea ajaline kate, Postimehe. Selleks saame täpsustada oma valimit seades piiranguks veel, et key peab võrduma nimega "postimeesew", mis on selle lehe kood andmebaasis. Võime vaadata jälle esimest 5 rida valimist, mis on nüüd Postimehe erinevad numbrid.

subset <- all_issues %>%
    filter(DocumentType=="NEWSPAPER") %>%
    filter(year>1880&year<1940) %>%
    filter(keyid=="postimeesew")
subset %>% head(5) %>% select(1:10) %>% knitr::kable()
keyid DocumentID DocumentTitle DocumentType dateraw date month year decade language
postimeesew postimeesew18860101 Postimees NEWSPAPER 18860101 1886-01-01 1 1886 1880 Estonian
postimeesew postimeesew18860104 Postimees NEWSPAPER 18860104 1886-01-04 1 1886 1880 Estonian
postimeesew postimeesew18860111 Postimees NEWSPAPER 18860111 1886-01-11 1 1886 1880 Estonian
postimeesew postimeesew18860118 Postimees NEWSPAPER 18860118 1886-01-18 1 1886 1880 Estonian
postimeesew postimeesew18860125 Postimees NEWSPAPER 18860125 1886-01-25 1 1886 1880 Estonian

Andmestikus on metaandmeid kokku kahel kihil. Esimesel kihil on kõikide ajalehenumbrite metainfo. Neid on kokku 353163. Edasi võime vaadata metainformatsiooni iga artikli kohta. See on jaotatud väiksematesse failidesse, et ei peaks kogu andmestikku korraga sisse lugema. Käsk get_subset_meta() kogub teatud alahulga artiklite kohta metainformatsiooni ja salvestab selle muutujasse.

Me saame edasiste analüüside lihtsustamiseks salvestada ta ka eraldi faili 'subset_meta_postimeesew1.tsv'

subset_meta <- get_subset_meta(subset)
#write_tsv(subset_meta,"subset_meta_postimeesew1.tsv")

Soovi korral saame me lugeda selle andmestiku eraldi failist ja ei pea enam serverist seda küsima. Selleks veendume, et meie töökataloog on õiges kohas ja siis loeme muutujasse subset_meta andmed failist. Kui me võtsime need andmed juba serverist, siis pole failist lugemine meile hädavajalik.

#subset_meta <- read_tsv("subset_meta_postimeesew1.tsv")
subset_meta %>% head(5) %>% select(1:6) %>% knitr::kable()
.id docid LogicalSectionFirstPageID LogicalSectionID attrs LogicalSectionTitle
1 postimeesew18860101 postimeesew18860101.1.1 postimeesew18860101.2.1 1 Päismik
1 postimeesew18860101 postimeesew18860101.1.1 postimeesew18860101.2.2 2 Heretus.
1 postimeesew18860101 postimeesew18860101.1.1 postimeesew18860101.2.3 3 Tagasiwaade 1885 aasta pääle
1 postimeesew18860101 postimeesew18860101.1.1 postimeesew18860101.2.4 4 Isamaalt
1 postimeesew18860101 postimeesew18860101.1.2 postimeesew18860101.2.5 5 Soome maalt.

Valimist ülevaate saamine

Kui meil on olemas andmestiku metainfo ühes tabelis, võime proovida sellest mõningat ülevaadet saada. Vaatame, mitu sõna on valimis igal aastal ja seejärel kuidas need see sisuhulk jaotub artikli tüüpide vahel. Alustuseks vaatame mitu artiklit me valimisse saime.

nrow(subset_meta)
## [1] 763629
subset_meta %>% 
  group_by(year) %>% 
  summarise(words=sum(LogicalSectionTextWordCount)) %>% 
  ggplot(aes(x=year,y=words))+
  geom_col()

subset_meta %>% 
  group_by(year,LogicalSectionType) %>% 
  summarise(words=sum(LogicalSectionTextWordCount)) %>% 
  ggplot(aes(x=year,y=words,fill=LogicalSectionType))+
  geom_col()

Valimi põhjal vaheandmestike tegemine

Me saame salvestada meile olulise informatsiooni valimist eraldi muutujasse. Kui me teeme tekstiotsinguid, siis tihti huvitab meid, kui sagedasti esinevade meie otsingu tulemused valimis. Selle jaoks peame võrdlema oma otsingu tulemusi valimi enda suurusega. Teeme kaks ülevaatetabelit: 1) mitu artiklit oli valimis igal aastal, 2) mitu sõna oli valimis igal aastal. Neid kasutame veidi hiljem otsingutulemustega võrdlusel.

subset_articlecounts <- subset_meta %>% 
  count(year)

subset_wordcounts <- subset_meta %>% 
  group_by(year) %>% 
  summarise(words=sum(LogicalSectionTextWordCount))

Otsing

Üks levinumaid tekstikogude kasutusviise on tekstiotsing: me tahame leida tekste, mis on seotud mõne meie huvialaga ja näha, mida neis kirjutati, millal need ilmusid ning kuidas need seostuvad üldiste trendidega tekstikogus.

Praegu teeme me otsingud meie näidisküsimuse järgi. Meid huvitavad erinevad energiaallikad 20. sajandi alguses ja võime otsida mõnd, mida me teame, et seal peaks olema - näiteks auru, elektrit ja hobuseid. Teeme otsingud sõnaosale: otsime tekste, mis sisaldavad kuskil sees sõnaosa 'auru', 'elekt', 'hobu'. Kasutame ainult sõnaosi, et võimaldada vasteid erinevates käänetes ja liitsõnades.

Meie tekstiotsing (do_subset_search) salvestab leitud artiklid ühte faili. Kui tekste kasutada korduvalt siis tasub edaspidi otsing vahele jätta ja lugeda juba otse failist. Otsing meie valitud Postimehe vanadest lehtede 763629 artiklist kestab umbes 2-3 minutit. Seejärel loeme need sealt välja ja seome metaandmetega (left_join). Lõpuks vaateme oma otsingusõna kontekstis +/- 30 tähemärki (get_concordances). Teeme seda kõigi kolme sõnaga ja salvestame tulemused eraldi muutujatesse.

searchterm<- "auru"
searchfile<- "aur.txt"
do_subset_search(searchterm=searchterm, searchfile=searchfile,subset)
texts3 <- fread("aur.txt",header=F)[,.(id=V1,txt=V2)]
texts_w_meta3 <- texts3 %>% left_join(subset_meta %>% select(LogicalSectionID,LogicalSectionTitle,LogicalSectionType,LogicalSectionTextWordCount,MeanOCRAccuracyVol,docid,year),by=c("id"="LogicalSectionID"))
concs3 <- get_concordances(searchterm=searchterm,texts=texts3,before=30,after=30,txt="txt",id="id")

searchterm<- "elekt"
searchfile<- "elekter.txt"
do_subset_search(searchterm=searchterm, searchfile=searchfile,subset)
texts4 <- fread("elekter.txt",header=F)[,.(id=V1,txt=V2)]
texts_w_meta4 <- texts4 %>% left_join(subset_meta %>% select(LogicalSectionID,LogicalSectionTitle,LogicalSectionType,LogicalSectionTextWordCount,MeanOCRAccuracyVol,docid,year),by=c("id"="LogicalSectionID"))
concs4 <- get_concordances(searchterm=searchterm,texts=texts4,before=30,after=30,txt="txt",id="id")

searchterm<- "hobu"
searchfile<- "hobu.txt"
do_subset_search(searchterm=searchterm, searchfile=searchfile,subset)
texts5 <- fread("hobu.txt",header=F)[,.(id=V1,txt=V2)]
texts_w_meta5 <- texts5 %>% left_join(subset_meta %>% select(LogicalSectionID,LogicalSectionTitle,LogicalSectionType,LogicalSectionTextWordCount,MeanOCRAccuracyVol,docid,year),by=c("id"="LogicalSectionID"))
concs5 <- get_concordances(searchterm=searchterm,texts=texts5,before=30,after=30,txt="txt",id="id")

Võime seeläbi näiteks võrrelda - palju tulemusi üldse oli. Saame auru-tekste 22726, elektri-tekste 30262, hobu-tekste 54030.

nrow(texts3)
## [1] 22726
nrow(texts4)
## [1] 30262
nrow(texts5)
## [1] 54030

Huvitav oleks teada, kuidas nad jagunevad korpuses ajas. Siin võime kokku lugeda mitu teksti igas aastas leiti ja lisada igale andmestikule tunnusväärtuse. Seejärel lisame need leidude numbrid järjestikku ning seome nad kõik ülevaatega valimist - mille me tegime paar lõiku tagasi. Teeme loodud andmestikust graafiku ja vaatame, kuidas leitud artiklite osakaal tervikkorpusest muutub ajas. Võime näha midagi, mida võisime juba ette aimata: aurujõud muutub vähem sagedasemaks samas kui elektri sagedus kasvab. Hobujõud püsivad aktuaalsena perioodi vältel (võimalik et see on ka osaliselt tingitud sellest, et autode reklaamis mängib olulist osa, mitu hobujõudu neil on).

text_articlecounts3 <- texts_w_meta3 %>% 
  count(year) %>% mutate(set="aur")
text_articlecounts4 <- texts_w_meta4 %>% 
  count(year) %>% mutate(set="elekter")
text_articlecounts5 <- texts_w_meta5 %>% 
  count(year) %>% mutate(set="hobu")

text_articlecounts3 %>% 
  rbind(text_articlecounts4) %>% 
  rbind(text_articlecounts5) %>% 
  left_join(subset_articlecounts,by="year") %>% 
  ggplot(aes(x=year,y=n.x/n.y,color=set))+
  geom_line()

ggsave("plots/aur_elekter_hobu.png",width=6,height=5)

Sõnade vaatamine

Edasi võib meid huvitada vaadata tulemusi lähemalt: kui kõigist teemadest räägiti terve aja vältel, siis millest konkreetsemalt seal räägiti. Ühe lihtsama küsimusena võime vaadata, milliseid energialiigi liitega sõnu kasutati. Selleks teeme meie sõnade lähikonteksti tekstijupid sõnatabeliteks, kus on üks sõna rea kohta. Ja võtame sealt välja kõik sõnad, mis sisaldavad neis meie otsingut. Vahepeal muudame ka kõik w-d v-deks, et üleminek w-lt v-le kirjaviisis ei segaks meie loendamist.

wordcounts3 <- concs3 %>% 
  unnest_tokens(word,context) %>% 
  mutate(word=str_replace_all(word,"w","v")) %>% 
  count(word,sort=T)

auru <- wordcounts3 %>% 
  filter(str_detect(word,"auru"))

Võime vaadata esimest tulemust. Osad vasted tunduvad põnevamad: võime teha nende kohta märkuse edasiseks. Võtame näiteks "aurulaev", "aurukatel", "auruveski", "aurumasin" ja mõned veel.

auru %>% head(50)
##              word    n
##  1:          auru 4676
##  2:      aurulaev 3403
##  3:     aurulaeva 3121
##  4:        auruga  894
##  5:     aurukatel  652
##  6:    aurulaevad  631
##  7:         aurul  541
##  8:   aurulaevade  484
##  9:     auruveski  440
## 10:     aurukatla  428
## 11:   aurulaevaga  401
## 12:        maurus  356
## 13:     aurumasin  291
## 14:     aurulokke  267
## 15:    aurulaeval  244
## 16:   aurumasinad  233
## 17:    aurukatlad  225
## 18:      aurujõul  214
## 19:     aurukatal  186
## 20:        aurult  186
## 21:    aurumasina  182
## 22:     aurulaevu  178
## 23:         aurud  158
## 24:         aurus  152
## 25:       mauruse  148
## 26:   aurulaevale  136
## 27:  aurumasinate  136
## 28:  aurumasinaid  133
## 29:   aurukatlaid  132
## 30:   aurukatelde  119
## 31:  aurulaevadel  111
## 32:    aurupritsi  109
## 33:   aurukatlaga  104
## 34:      aurupaat  104
## 35:     aurulokid  103
## 36:        auruks  101
## 37:   aurujõulise   94
## 38:        aurust   91
## 39:       veeauru   89
## 40: aurulaevadega   85
## 41:     aurujõuul   77
## 42:  aurumasinaga   77
## 43:     auruprits   77
## 44:    aurujõuuga   75
## 45:    aurukatelt   74
## 46:      sauruses   73
## 47:   aurumasinat   71
## 48: auruvärvimise   70
## 49:   aurukatalde   66
## 50: aurulaevadele   66
##              word    n

Teeme sama ka elektri ja hobu sõnadega. Kirjutame samuti välja ka sealt mõned nimed, mis meid huvitaks.

wordcounts4 <- concs4 %>% 
  unnest_tokens(word,context) %>% 
  mutate(word=str_replace_all(word,"w","v")) %>% 
  count(word,sort=T)

elek <- wordcounts4 %>% 
  filter(str_detect(word,"elekt"))
elek %>%
  head(50)
##                    word     n
##  1:             elektri 12145
##  2:        elektrijaama  3089
##  3:         elektrivalg  2879
##  4:             elekter  2731
##  5:           elektriga  1904
##  6:            elektriv  1346
##  7:         elektrijaam  1111
##  8:            elektrit  1026
##  9: elektrivalgustusega   941
## 10:        elektrivoolu   875
## 11:      elektrivalgust   704
## 12:      elektrotehnika   584
## 13:    elektrivalgustus   533
## 14:   elektrivalgustuse   527
## 15:              elektr   411
## 16:               elekt   333
## 17:       elektrijaamas   294
## 18:       elektrimootor   269
## 19: elektrifitseerimise   251
## 20:           elektrita   245
## 21:      elektrijaamast   241
## 22:         elektrijõul   241
## 23:             elektro   231
## 24:       elektrivalgus   225
## 25:        elektriliini   214
## 26:      elektrienergia   179
## 27:    elektrivalgusega   179
## 28:           elektrist   157
## 29:      elektrijaamale   156
## 30:        selektsiooni   151
## 31:         elektrilamp   141
## 32:     elektrimootorid   132
## 33:         elektrivool   132
## 34:      elektriraudtee   126
## 35:          elektrijõu   124
## 36:       elektrilambid   123
## 37:     elektrienergiat   118
## 38:      elektrijaamade   118
## 39: elektrifitseerimine   115
## 40:           castelekt   110
## 41:      elektriliinide   106
## 42:  elektrivarustusega   105
## 43:        elektrivõrgu   100
## 44:     elektrimootorit    99
## 45:      elektrivalguse    99
## 46:           lastelekt    98
## 47:      elektrimootori    92
## 48:   elektrivalgustust    84
## 49: elektrofitseerimise    82
## 50:      elektrilampide    81
##                    word     n
wordcounts5 <- concs5 %>% 
  unnest_tokens(word,context) %>% 
  mutate(word=str_replace_all(word,"w","v")) %>% 
  count(word,sort=T)

hobu <- wordcounts5 %>% 
  filter(str_detect(word,"hobu"))
hobu %>%
  head(50)
##                word     n
##  1:          hobuse 20991
##  2:          hobune 12613
##  3:          hobust  9919
##  4:         hobuste  8844
##  5:         hobused  6907
##  6:        hobuseid  6295
##  7:        hobusega  3961
##  8:       hobustega  3022
##  9:         hobusel  1194
## 10:        hobusele  1122
## 11:      kahehobuse  1102
## 12:       tööhobune   857
## 13:            hobu   852
## 14:    hobuseriistu   774
## 15:       hobustele   759
## 16: hobusekasvatuse   739
## 17:       hobustest   651
## 18:       ühehobuse   632
## 19:        hobusest   628
## 20:        hobustel   596
## 21:         hobusid   542
## 22:      tööhobused   519
## 23:           hobus   442
## 24:       tööhobust   392
## 25:   hobuseriistad   362
## 26:      tööhobuste   289
## 27:     hobusejõudu   258
## 28:     hoburaudtee   247
## 29:      hobusemees   210
## 30:   hobusevarguse   199
## 31:     suguhobuste   198
## 32:   hobuseriistud   197
## 33:   hobuseruumiga   184
## 34:      hobuseliha   182
## 35:    hobusemeheks   181
## 36:      hobuseraua   179
## 37:       tööhobuse   176
## 38:     tööhobuseid   166
## 39:          hobule   161
## 40:   hobusejõuline   161
## 41:     hobusetalli   155
## 42:  hobusekasvatus   149
## 43:     hobusevaras   146
## 44:      märahobune   143
## 45:  hobuseriistade   142
## 46:     ratsahobuse   140
## 47:     noorhobuste   139
## 48:     hobusemeest   137
## 49: hobuserautamise   131
## 50:      hobusetall   130
##                word     n

Nüüd võime tehaks tekstide põhjal miniuuringu. Otsime välja kõik sõnad, mis sisaldavad meile huvitavaid fraase ja vaatame, millal tekstid nende kohta ilmusid. Selleks seome meie sõnakontekstide tabeli taaskord metainfoga, mis sisaldab avaldamise aja informatsiooni ja kuvame neid eraldi graafikutes. Paneme punkti iga leiu kohta ja ajame neid veidi sassi. Nii saame lihtsa ülevaate sellest, millal mis teemast räägiti.

concs_w_meta3 <- concs3 %>% left_join(subset_meta %>% select(LogicalSectionID,LogicalSectionTitle,LogicalSectionType,LogicalSectionTextWordCount,MeanOCRAccuracyVol,docid,year),by=c("id"="LogicalSectionID"))
concs_w_meta4 <- concs4 %>% left_join(subset_meta %>% select(LogicalSectionID,LogicalSectionTitle,LogicalSectionType,LogicalSectionTextWordCount,MeanOCRAccuracyVol,docid,year),by=c("id"="LogicalSectionID"))
concs_w_meta5 <- concs5 %>% left_join(subset_meta %>% select(LogicalSectionID,LogicalSectionTitle,LogicalSectionType,LogicalSectionTextWordCount,MeanOCRAccuracyVol,docid,year),by=c("id"="LogicalSectionID"))
graafik<- concs_w_meta3 %>% 
  unnest_tokens(word,context) %>% 
  filter(str_detect(word,"aur")) %>% 
  mutate(word=str_replace(word,"w","v")) %>%
  mutate(type=str_extract(word,"aurulaev|aurukat|auruveski|aurumasin|aurulok|aurujõu|auruprits|veeaur|auruvärv")) %>% 
  filter(!is.na(type)) %>% 
  ggplot(aes(x=year, y=type))+
  geom_jitter(alpha=0.6)

graafik

ggsave("plots/aurugraafik1.png",graafik)

Meie valitud auru-sõnadega graafikult näeme, et aurulaevad saadavad peaaegu kogu perioodi, näidates väikest vähenemist 1930ndate keskpaigas. Aurukateldest hakatakse rääkima 1890nda aasta paiku. Auruveski on teemaks läbivalt, aga väga populaarne 1910ndatel ja aurulokkidest hakatakse rääkima 1930ndate teisel poolel.

graafik<- concs_w_meta4 %>% 
  unnest_tokens(word,context) %>% 
  filter(str_detect(word,"elek")) %>% 
  mutate(word=str_replace(word,"w","v")) %>%
  mutate(type=str_extract(word,"elektritramm|hüdroelekt|elektrivalgus|elektrivabrik|elektrivool|elektrijaam|elektrimootor|elektrotehnika|elektrijõu|elektriväe|elektrifitseer|elektritriikrau|elektrikell|elektriplii")) %>% 
  filter(!is.na(type)) %>% 
  ggplot(aes(x=year, y=type))+
  geom_jitter(alpha=0.6)

graafik

ggsave("plots/elektrigraafik1.png",graafik)

Meie valitud elektri-sõnadega graafikult näeme, et elektrivalgusest räägitakse veidi kogu aja vältel, aga igapäevaseks teemaks muutub see 1909. aasta paiku, samamoodi ka elektrijaamadega. Kui elektrikell on nendega võrreldes pigem haruldane nähtus, siis ometi räägitakse sellest kogu perioodi vältel. Samas 1920ndad toovad jututeemaks uued tehnoloogiad: elektritramm, elektripliit, elektritriikraud ja ka üldisema termini elektrifitseerimine. Alates 1930ndate teisest poolest saab elektripliit juba igapäevaseks teemaks. Graafikult on näha ka tõenäoline sõnavaramuutus, kus elekrivägi asendub terminina elektrijõuga kuskil sajandivahetuse paiku.

graafik<- concs_w_meta5 %>% 
  unnest_tokens(word,context) %>% 
  filter(str_detect(word,"hobu")) %>% 
  mutate(word=str_replace(word,"w","v")) %>%
  mutate(type=str_extract(word,"kahehobu|tööhobu|hobuseriist|hobusekasvatus|hobusejõu|hoburaudtee|hobuseruum|hobuseme|hobujõu|hobusetall|hobusevar|märahobu|ratsahobu")) %>% 
  filter(!is.na(type)) %>% 
  ggplot(aes(x=year, y=type))+
  geom_jitter(alpha=0.6)

graafik

ggsave("plots/hobugraafik1.png",graafik)

Meie valitud hobu-sõnadega graafikult näeme, et enamik teemasid on olnud jutuks läbivalt. 1920ndatel muutuvad hobusetallid tavalisemaks ja hakatakse rääkima hobujõust ja ka hobuseruumidest. 1890ndatest kuni 1910ndate lõpuni on oluliseks teemaks ka hoburaudtee, mis ilmselt elektritrammide ja üldise elektrifitseerimise protsessiga kaob.

Kaassõnade analüüs

Viimaks võime vaadata, et millest siis nende sõnade kontekstis räägiti. Teeme sõnade vahetust kontekstist sõnaloendid, eemaldame stopsõnad, numbrid ja otsingusõnad endad ja vaatame, mis me tulemuseks saame. Stopsõnade loendina saame kasutada avalikke materjale, asetades faili nime kohale materjalide asukoha internetis url-na. Rohkem informatsiooni nende kohta võib näha siit http://dx.doi.org/10.15155/re-48.

stopwords <- read_csv("https://datadoi.ee/bitstream/handle/33/78/estonian-stopwords.txt?sequence=1&isAllowed=y",col_names = F) %>% rename(word=X1)
concs3 %>% 
  filter(str_detect(context,"elekt"))
##                              id nr begin  end
##   1:    postimeesew18881027.2.8  1  1092 1095
##   2:   postimeesew18920116.2.13  1  8248 8251
##   3:    postimeesew18920203.2.2  3  1302 1305
##   4: postimeesew18930316.2.16.2  1   131  134
##   5: postimeesew18930318.2.18.2  1   894  897
##  ---                                         
## 721: postimeesew19391214.2.76.3  1  3324 3327
## 722: postimeesew19391216.2.56.4  1   915  918
## 723: postimeesew19391220.2.50.5  1  1119 1122
## 724:   postimeesew19391221.2.49  2  1528 1531
## 725:   postimeesew19391224.2.24  1  3149 3152
##                                                               context
##   1: , on 2õt)o hobuse jõu,: wäärt aurumasinaid ja 26 elektri wue eda
##   2: saks saanud, nõnda nüüd peagi auru asemele elektri-wägi saab ast
##   3: vad katsed elektri-wäega, mis aurujõudu ähvardab kamitsasse pann
##   4: aekoja ees, K K. K. Wõhrmanni aurujõuuga ja elektriwalgusega fis
##   5: ZMWWZWZZZZWZZMK. K. Wöhrmanni aurujõuuga ja elektrlwalgusega sis
##  ---                                                                 
## 721: õidu t 8 Elegantsed t elekter-aurulokid. Välismaa õlid i J Daami
## 722: aparaadil valmistatud elektri-aurulokid on ja langevad laine- £ 
## 723:  tfin. S, kauakestvad elektri-auru lokid Välismaa õlid. Elegants
## 724:  käima linna elektrijaama uue aurukatla, mis on suurim Balti rii
## 725:  lasta käima elektrijaama uus aurumasin ning õnnistada sisse üks
wordsnostops3 <- concs3 %>% 
  unnest_tokens(word,context) %>% 
  filter(!str_detect(word,"auru")) %>% 
  filter(!str_detect(word,"[0-9]")) %>% 
  mutate(word=str_replace(word,"w","v")) %>% 
  anti_join(stopwords,by="word") %>% 
  count(word,sort=T) %>% 
  head(1000) %>% 
  mutate(set="auru")
wordsnostops4 <- concs4 %>% 
  unnest_tokens(word,context) %>% 
  filter(!str_detect(word,"elekt")) %>% 
  filter(!str_detect(word,"[0-9]")) %>% 
  mutate(word=str_replace(word,"w","v")) %>% 
  anti_join(stopwords,by="word") %>% 
  count(word,sort=T) %>% 
  head(1000) %>% 
  mutate(set="elekter")
wordsnostops5 <- concs5 %>% 
  unnest_tokens(word,context) %>% 
  filter(!str_detect(word,"hobu")) %>% 
  filter(!str_detect(word,"[0-9]")) %>% 
  mutate(word=str_replace(word,"w","v")) %>% 
  anti_join(stopwords,by="word") %>% 
  count(word,sort=T) %>% 
  head(1000) %>%
  mutate(set="hobu")

Võime vaadata, mis olid levinumad sõnad iga otsingusõna vahetus naabruses. Leidude põhjal tundub, et elektrist on räägitud eelkõige üürikorterite kontekstis. Aurust räägitakse ehk rahvusvaheliste aurulaevade ja kaubavahetuse kontekstis (saksa, inglise, vene, soome) ja samas ka elektri ja hobuse alternatiivide kontekstis - nt "wäikseid auru ja hobuse rehepeksmise masinaid", "ning 582 hobuse jõuline aurumasin", "aurujõuuga ja elektriwalgusega" või "elektri-aurulokid". Hobuste puhul räägitakse ostust-müügist ning seostuvast - vankrist, tööriistadest jne - summad rublades ja kroonides.

rbind(wordsnostops3,wordsnostops4,wordsnostops5) %>% 
  group_by(set) %>%
  mutate(row_number=row_number()) %>% 
  filter(row_number<21) %>% 
  ggplot(aes(x=set,y=row_number,label=word))+
  geom_text()

Võime ka vaadata, mille poolest eristuvad need rühmad teineteisest. Näeme veel enamaid viiteid välisriikidele auruga seotud tekstidest. Lisaks ka juttu sadamast, kaubast, laevast ja kaptenist (kpt). Elektri puhul domineerivad korteriüüri reklaamid ja kõik sellega seotud - küte, veevärk, sissekäigud, köögid, toad, mööbel. Hobuste puhul hobusega seotud sõnavara - mära, vanker, voorimees, ruun, tori, tõug. Lisaks on juttu ka varastatud hobustest ja lehmadest, mida müüdi ilmselt sarnastes kuulutustes.

rbind(wordsnostops3,wordsnostops4,wordsnostops5) %>% 
  bind_tf_idf(word,set,n) %>% 
  arrange(desc(tf_idf)) %>% 
  group_by(set) %>%
  mutate(row_number=row_number()) %>% 
  filter(row_number<21) %>% 
  ggplot(aes(x=set,y=row_number,label=word))+
  geom_text()

Kokkuvõte

Siin tõime ühe näidise sellest, kuidas ja milleks võiks dea.digar.ee avatud andmekogu kasutada. Praegu vaatasime energialiike, mida kasutati transpordis 20. sajandi esimeses pooles. Avatud kood annab võimaluse analüüsi kujundada täpselt enda soovide järgi. Kõige lihtsamalt on võimalik proovida teisi otsisõnud, teisi väljaandeid või otsida tulemusi mõnest teisest ajastust. Analoogsete otsingute tegemiseks piisab lihtsalt kui vahetada otsisõna, keerulisemate muudatuste tegemiseks on võimalik muuta ja kirjutada koodis uusi töötlussamme.

Avatud materjalidele on ligipääs avatud kõigile huvilistele - arvutiressursside kasutamiseks tuleb hankida endale küll kasutajanimi, selleks kirjutage data@nlib.ee. Tekstide töötlemisel aitavad kaasa raamatukogu materjalide kohta tehtud R-i pakett, mis aitab üles seatud failistruktuurist info kätte saada. Töötlemiseks kasutatavas Jupyter Notebook keskkonnas on võimalik kasutada nii R-i kui Pythonit, tuleb valida dokumendis õige kernel.