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