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.
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.
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)
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 |
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. |
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()
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))
Ü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)
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.
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()
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.