library(tidyverse)
## Loading tidyverse: ggplot2
## Loading tidyverse: tibble
## Loading tidyverse: tidyr
## Loading tidyverse: readr
## Loading tidyverse: purrr
## Loading tidyverse: dplyr
## Conflicts with tidy packages ----------------------------------------------
## filter(): dplyr, stats
## lag(): dplyr, stats
ngramid=read_csv("http://www.tlu.ee/~jaagup/andmed/keel/korpus/ngram3.txt")
## Parsed with column specification:
## cols(
## kood = col_character(),
## ngram3 = col_character(),
## alguskoht = col_integer()
## )
sagedused=ngramid %>% group_by(ngram3) %>% summarize(kogus=n()) %>% arrange(-kogus)
tail(sagedused)
## # A tibble: 6 x 2
## ngram3 kogus
## <chr> <int>
## 1 YUA 1
## 2 YUP 1
## 3 YVU 1
## 4 YVX 1
## 5 YXS 1
## 6 YYI 1
sagedused %>% filter(kogus>10000)
## # A tibble: 87 x 2
## ngram3 kogus
## <chr> <int>
## 1 SZS 92329
## 2 SSS 85558
## 3 SSZ 78332
## 4 ZPV 63126
## 5 SZP 58867
## 6 VSZ 43328
## 7 ASZ 41701
## 8 ZSZ 36923
## 9 VPS 34864
## 10 SZH 34578
## # ... with 77 more rows
nrow(ngramid)
## [1] 3490790
sagedused$suhtelised=sagedused$kogus/nrow(ngramid)
sagedused
## # A tibble: 3,070 x 3
## ngram3 kogus suhtelised
## <chr> <int> <dbl>
## 1 SZS 92329 0.026449314
## 2 SSS 85558 0.024509638
## 3 SSZ 78332 0.022439620
## 4 ZPV 63126 0.018083586
## 5 SZP 58867 0.016863518
## 6 VSZ 43328 0.012412090
## 7 ASZ 41701 0.011946006
## 8 ZSZ 36923 0.010577262
## 9 VPS 34864 0.009987424
## 10 SZH 34578 0.009905494
## # ... with 3,060 more rows
dokmeta=read_csv("http://www.tlu.ee/~jaagup/andmed/keel/korpus/dokmeta.txt")
## Parsed with column specification:
## cols(
## kood = col_character(),
## korpus = col_character(),
## tekstikeel = col_character(),
## tekstityyp = col_character(),
## elukoht = col_character(),
## taust = col_character(),
## vanus = col_character(),
## sugu = col_character(),
## emakeel = col_character(),
## kodukeel = col_character(),
## keeletase = col_character(),
## haridus = col_character(),
## abivahendid = col_character()
## )
dokmeta
## # A tibble: 12,724 x 13
## kood korpus tekstikeel tekstityyp elukoht taust
## <chr> <chr> <chr> <chr> <chr> <chr>
## 1 doc_100636852915_item cFOoRQekA eesti essee idaviru op
## 2 doc_100636852916_item cFOoRQekA eesti muu idaviru op
## 3 doc_100636852917_item cFOoRQekA eesti essee idaviru op
## 4 doc_1010138197_item cFOoRQekA eesti muu tallinn ylop
## 5 doc_1010138198_item cFOoRQekA eesti muu tallinn ylop
## 6 doc_1010138199_item cFOoRQekA eesti muu tallinn ylop
## 7 doc_1010138200_item cFOoRQekA eesti muu tallinn ylop
## 8 doc_101672866015_item cFOoRQekA eesti referaat tallinn ylop
## 9 doc_104580264035_item cFqPphvYi eesti <NA> <NA> <NA>
## 10 doc_104580264036_item cFqPphvYi eesti essee tallinn op
## # ... with 12,714 more rows, and 7 more variables: vanus <chr>,
## # sugu <chr>, emakeel <chr>, kodukeel <chr>, keeletase <chr>,
## # haridus <chr>, abivahendid <chr>
str(dokmeta)
## Classes 'tbl_df', 'tbl' and 'data.frame': 12724 obs. of 13 variables:
## $ kood : chr "doc_100636852915_item" "doc_100636852916_item" "doc_100636852917_item" "doc_1010138197_item" ...
## $ korpus : chr "cFOoRQekA" "cFOoRQekA" "cFOoRQekA" "cFOoRQekA" ...
## $ tekstikeel : chr "eesti" "eesti" "eesti" "eesti" ...
## $ tekstityyp : chr "essee" "muu" "essee" "muu" ...
## $ elukoht : chr "idaviru" "idaviru" "idaviru" "tallinn" ...
## $ taust : chr "op" "op" "op" "ylop" ...
## $ vanus : chr "kuni18" "kuni18" "kuni18" "kuni26" ...
## $ sugu : chr "naine" "naine" "naine" "naine" ...
## $ emakeel : chr "vene" "vene" "vene" "vene" ...
## $ kodukeel : chr "vene" "vene" "vene" "vene" ...
## $ keeletase : chr "B" "B" "B" "A" ...
## $ haridus : chr "pohi" "pohi" "pohi" "kesk" ...
## $ abivahendid: chr "ei" "ei" "ei" "ei" ...
## - attr(*, "spec")=List of 2
## ..$ cols :List of 13
## .. ..$ kood : list()
## .. .. ..- attr(*, "class")= chr "collector_character" "collector"
## .. ..$ korpus : list()
## .. .. ..- attr(*, "class")= chr "collector_character" "collector"
## .. ..$ tekstikeel : list()
## .. .. ..- attr(*, "class")= chr "collector_character" "collector"
## .. ..$ tekstityyp : list()
## .. .. ..- attr(*, "class")= chr "collector_character" "collector"
## .. ..$ elukoht : list()
## .. .. ..- attr(*, "class")= chr "collector_character" "collector"
## .. ..$ taust : list()
## .. .. ..- attr(*, "class")= chr "collector_character" "collector"
## .. ..$ vanus : list()
## .. .. ..- attr(*, "class")= chr "collector_character" "collector"
## .. ..$ sugu : list()
## .. .. ..- attr(*, "class")= chr "collector_character" "collector"
## .. ..$ emakeel : list()
## .. .. ..- attr(*, "class")= chr "collector_character" "collector"
## .. ..$ kodukeel : list()
## .. .. ..- attr(*, "class")= chr "collector_character" "collector"
## .. ..$ keeletase : list()
## .. .. ..- attr(*, "class")= chr "collector_character" "collector"
## .. ..$ haridus : list()
## .. .. ..- attr(*, "class")= chr "collector_character" "collector"
## .. ..$ abivahendid: list()
## .. .. ..- attr(*, "class")= chr "collector_character" "collector"
## ..$ default: list()
## .. ..- attr(*, "class")= chr "collector_guess" "collector"
## ..- attr(*, "class")= chr "col_spec"
soomesagedused=dokmeta %>% filter(emakeel=="soome") %>% inner_join(ngramid, by="kood") %>%
group_by(ngram3) %>% summarize(soomekogus=n()) %>% arrange(-soomekogus)
soomesagedused$soomesuhtelised=soomesagedused$soomekogus/sum(soomesagedused$soomekogus)
soomesagedused
## # A tibble: 1,883 x 3
## ngram3 soomekogus soomesuhtelised
## <chr> <int> <dbl>
## 1 ZPV 2557 0.02126562
## 2 SZP 2373 0.01973536
## 3 SSZ 1877 0.01561032
## 4 SZS 1700 0.01413827
## 5 ASZ 1630 0.01355611
## 6 VSZ 1512 0.01257475
## 7 SJS 1328 0.01104449
## 8 SVS 1275 0.01060370
## 9 SVD 1257 0.01045400
## 10 SZD 1224 0.01017956
## # ... with 1,873 more rows
#Lisage soome kolmikute suhtelsed sagedused
#Arvutage samad andmed ka vene emakeelega autorite tekstide kohta
venesagedused=dokmeta %>% filter(emakeel=="vene") %>% inner_join(ngramid, by="kood") %>%
group_by(ngram3) %>% summarize(kogus=n()) %>% arrange(-kogus) %>%
mutate(suhteline=kogus/sum(kogus))
venesagedused
## # A tibble: 2,682 x 3
## ngram3 kogus suhteline
## <chr> <int> <dbl>
## 1 SSS 52735 0.04442746
## 2 SZS 40413 0.03404659
## 3 SSZ 40341 0.03398594
## 4 SYS 22123 0.01863788
## 5 YSS 21379 0.01801109
## 6 ZSS 18892 0.01591587
## 7 SZP 17584 0.01481393
## 8 ZPV 17346 0.01461342
## 9 ZSZ 16041 0.01351400
## 10 ASZ 15057 0.01268502
## # ... with 2,672 more rows
koos=soomesagedused %>% inner_join(venesagedused)
## Joining, by = "ngram3"
koos$keeltesuhe=koos$soomesuhtelised/koos$suhteline
koos=koos %>% filter(soomekogus>100 & kogus>100) %>% arrange(keeltesuhe)
head(koos)
## # A tibble: 6 x 6
## ngram3 soomekogus soomesuhtelised kogus suhteline keeltesuhe
## <chr> <int> <dbl> <int> <dbl> <dbl>
## 1 SSS 850 0.007069136 52735 0.044427464 0.1591164
## 2 ZSZ 361 0.003002304 16041 0.013514003 0.2221624
## 3 ZSS 499 0.004149999 18892 0.015915875 0.2607459
## 4 ZHZ 203 0.001688276 5268 0.004438113 0.3804040
## 5 SZZ 127 0.001056212 3257 0.002743913 0.3849292
## 6 ZVZ 157 0.001305711 3967 0.003342064 0.3906900
tail(koos)
## # A tibble: 6 x 6
## ngram3 soomekogus soomesuhtelised kogus suhteline keeltesuhe
## <chr> <int> <dbl> <int> <dbl> <dbl>
## 1 ASH 150 0.0012474946 426 0.0003588907 3.475974
## 2 VDH 163 0.0013556108 448 0.0003774249 3.591736
## 3 DHS 143 0.0011892782 390 0.0003285619 3.619647
## 4 HVH 110 0.0009148294 285 0.0002401029 3.810155
## 5 HHV 193 0.0016051097 477 0.0004018565 3.994237
## 6 VHJ 116 0.0009647292 210 0.0001769179 5.452975
koos
## # A tibble: 260 x 6
## ngram3 soomekogus soomesuhtelised kogus suhteline keeltesuhe
## <chr> <int> <dbl> <int> <dbl> <dbl>
## 1 SSS 850 0.007069136 52735 0.044427464 0.1591164
## 2 ZSZ 361 0.003002304 16041 0.013514003 0.2221624
## 3 ZSS 499 0.004149999 18892 0.015915875 0.2607459
## 4 ZHZ 203 0.001688276 5268 0.004438113 0.3804040
## 5 SZZ 127 0.001056212 3257 0.002743913 0.3849292
## 6 ZVZ 157 0.001305711 3967 0.003342064 0.3906900
## 7 HZS 129 0.001072845 3067 0.002583844 0.4152128
## 8 SZS 1700 0.014138272 40413 0.034046593 0.4152625
## 9 SSZ 1877 0.015610316 40341 0.033985936 0.4593169
## 10 ZHS 492 0.004091782 9661 0.008139068 0.5027335
## # ... with 250 more rows
#Leidke kolmikute loetelu, kus keeltesuhe on alla 0.75 (soome keeles on vähem, vene keeles rohkem)
venekolmikud=filter(koos, keeltesuhe<0.75)$ngram3
venekolmikud
## [1] "SSS" "ZSZ" "ZSS" "ZHZ" "SZZ" "ZVZ" "HZS" "SZS" "SSZ" "ZHS" "HSS"
## [12] "SZO" "ZNZ" "ZVV" "ZOS" "SZH" "VVV" "SZA" "VPV" "ZAS"
#Leidke kolmikute loetelu, kus keeltesuhe on üle 1.5 (soome keeles on rohkem)
#Arvutage iga teksti juurde, mitu vene keelele iseloomikku kolmikut selles on
tekstikood=dokmeta$kood[1]
tekstikolmikud=filter(ngramid, kood==tekstikood) %>% filter(ngram3 %in% venekolmikud)
tekstikolmikud
## # A tibble: 13 x 3
## kood ngram3 alguskoht
## <chr> <chr> <int>
## 1 doc_100636852915_item SZA 18
## 2 doc_100636852915_item ZAS 19
## 3 doc_100636852915_item ZHZ 24
## 4 doc_100636852915_item SSS 45
## 5 doc_100636852915_item SSZ 46
## 6 doc_100636852915_item SZS 83
## 7 doc_100636852915_item SZS 105
## 8 doc_100636852915_item SZA 116
## 9 doc_100636852915_item ZAS 117
## 10 doc_100636852915_item SSZ 119
## 11 doc_100636852915_item SSZ 123
## 12 doc_100636852915_item SZS 137
## 13 doc_100636852915_item SZS 199
nrow(tekstikolmikud)
## [1] 13
tekstiandmed=dokmeta %>% inner_join(ngramid) %>% group_by(kood, emakeel) %>%
summarise(venekogus=sum(ngram3 %in% venekolmikud),
soomekogus=sum(ngram3 %in% filter(koos, keeltesuhe>1.5)$ngram3))
## Joining, by = "kood"
tekstiandmed
## # A tibble: 12,503 x 4
## # Groups: kood [?]
## kood emakeel venekogus soomekogus
## <chr> <chr> <int> <int>
## 1 doc_100636852915_item vene 13 39
## 2 doc_100636852916_item vene 10 18
## 3 doc_100636852917_item vene 20 33
## 4 doc_1010138197_item vene 151 95
## 5 doc_1010138198_item vene 141 96
## 6 doc_1010138199_item vene 147 97
## 7 doc_1010138200_item vene 142 94
## 8 doc_101672866015_item vene 1185 1409
## 9 doc_104580264036_item vene 15 77
## 10 doc_104580264038_item vene 32 71
## # ... with 12,493 more rows
tekstiandmed$emakeel=ifelse(tekstiandmed$emakeel %in% c("vene", "soome"),
tekstiandmed$emakeel, "muu")
#Arvutage iga teksti juurde, mitu soome keelele iseloomikku kolmikut selles on
#Kuvage kõik tekstid XY joonisele nende kahe tunnuse järgi
tekstiandmed %>% ggplot(aes(venekogus, soomekogus, col=emakeel))+geom_count()
#eristage teksti autori emakeel värvi järgi
venetekstid=tekstiandmed %>% filter(venekogus>200 & soomekogus<75)
venetekstid %>% inner_join(dokmeta)
## Joining, by = c("kood", "emakeel")
## # A tibble: 301 x 15
## # Groups: kood [?]
## kood emakeel venekogus soomekogus korpus tekstikeel
## <chr> <chr> <int> <int> <chr> <chr>
## 1 doc_18538799044_item vene 280 4 cgSRJPKTr vene
## 2 doc_18538799045_item vene 371 4 cgSRJPKTr vene
## 3 doc_18538799047_item vene 260 0 cgSRJPKTr vene
## 4 doc_18538799048_item vene 363 0 cgSRJPKTr vene
## 5 doc_18538799049_item vene 433 0 cgSRJPKTr vene
## 6 doc_18538799050_item vene 206 5 cgSRJPKTr vene
## 7 doc_18538799051_item vene 235 1 cgSRJPKTr vene
## 8 doc_18538799052_item vene 341 0 cgSRJPKTr vene
## 9 doc_18538799054_item vene 243 0 cgSRJPKTr vene
## 10 doc_18538799055_item vene 433 1 cgSRJPKTr vene
## # ... with 291 more rows, and 9 more variables: tekstityyp <chr>,
## # elukoht <chr>, taust <chr>, vanus <chr>, sugu <chr>, kodukeel <chr>,
## # keeletase <chr>, haridus <chr>, abivahendid <chr>
dokmeta[!tekstiandmed$kood %in% venetekstid, ]
## # A tibble: 12,724 x 13
## kood korpus tekstikeel tekstityyp elukoht taust
## <chr> <chr> <chr> <chr> <chr> <chr>
## 1 doc_100636852915_item cFOoRQekA eesti essee idaviru op
## 2 doc_100636852916_item cFOoRQekA eesti muu idaviru op
## 3 doc_100636852917_item cFOoRQekA eesti essee idaviru op
## 4 doc_1010138197_item cFOoRQekA eesti muu tallinn ylop
## 5 doc_1010138198_item cFOoRQekA eesti muu tallinn ylop
## 6 doc_1010138199_item cFOoRQekA eesti muu tallinn ylop
## 7 doc_1010138200_item cFOoRQekA eesti muu tallinn ylop
## 8 doc_101672866015_item cFOoRQekA eesti referaat tallinn ylop
## 9 doc_104580264035_item cFqPphvYi eesti <NA> <NA> <NA>
## 10 doc_104580264036_item cFqPphvYi eesti essee tallinn op
## # ... with 12,714 more rows, and 7 more variables: vanus <chr>,
## # sugu <chr>, emakeel <chr>, kodukeel <chr>, keeletase <chr>,
## # haridus <chr>, abivahendid <chr>
#Tehke samad arvutused uuesti läbi
#Püüdke leida A ja B keeletaset eristavad kolmikud
#Kuvage tekstid nende kolmikute sageduse järgi joonisele