rm(list = ls())
date()
## [1] "Tue May  5 18:14:46 2020"
sessionInfo()
## R version 3.6.1 (2019-07-05)
## Platform: x86_64-apple-darwin15.6.0 (64-bit)
## Running under: macOS Catalina 10.15.4
## 
## Matrix products: default
## BLAS:   /Library/Frameworks/R.framework/Versions/3.6/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/3.6/Resources/lib/libRlapack.dylib
## 
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## loaded via a namespace (and not attached):
##  [1] compiler_3.6.1  magrittr_1.5    tools_3.6.1     htmltools_0.4.0
##  [5] yaml_2.2.0      Rcpp_1.0.2      stringi_1.4.3   rmarkdown_1.16 
##  [9] knitr_1.25      stringr_1.4.0   xfun_0.10       digest_0.6.21  
## [13] rlang_0.4.2     evaluate_0.14

##Библиотеки

library(quanteda)
## Package version: 1.5.1
## Parallel computing: 2 of 4 threads used.
## See https://quanteda.io for tutorials and examples.
## 
## Attaching package: 'quanteda'
## The following object is masked from 'package:utils':
## 
##     View
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(stringr)
# library(ggplot2)
library(magrittr)
# library(tibble)

Импорт данных

load(file = "Tokens_S2.RData")
load(file = "Tokens_S.RData")
# load(file = "Corpus_S2.RData")

Частотная таблица

aTime <- Sys.time()
FreqAll <- Tokens_S %>% 
  dfm() %>% 
  textstat_frequency() %>%
  select(-group) %>% 
  mutate(POS = str_extract(feature, "_[a-z]+")) %>% 
  filter(POS %in% c( "_s", "_v", "_a")) %>% 
  arrange(desc(docfreq))
  
bTime <- Sys.time()
bTime - aTime
## Time difference of 0.121376 secs
head(FreqAll, 100)
##             feature frequency rank docfreq POS
## 1         природа_s      4337    3     225  _s
## 2         человек_s      4145    5     225  _s
## 3            мочь_v      1097   16     220  _v
## 4            быть_v      1398   12     216  _v
## 5       отношение_s      1062   20     212  _s
## 6           жизнь_s       626   35     196  _s
## 7             мир_s       565   39     188  _s
## 8     становиться_v       446   51     185  _v
## 9           земля_s       417   56     183  _s
## 10       животное_s       579   37     182  _s
## 11            лес_s       481   47     179  _s
## 12        должный_a       559   40     178  _a
## 13      природный_a       487   46     177  _a
## 14      позволять_v       511   43     176  _v
## 15         ресурс_s       476   48     166  _s
## 16          среда_s       475   49     166  _s
## 17     окружающий_a       419   55     163  _a
## 18          время_s       338   70     163  _s
## 19        планета_s       398   58     160  _s
## 20         давать_v       326   74     157  _v
## 21            вид_s       365   63     156  _s
## 22   человечество_s       381   61     154  _s
## 23            год_s       278   84     151  _s
## 24       являться_v       346   68     149  _v
## 25           жить_v       312   77     149  _v
## 26       проблема_s       356   65     147  _s
## 27     относиться_v       273   86     144  _v
## 28           вода_s       389   59     142  _s
## 29          мусор_s       335   71     141  _s
## 30   использовать_v       296   80     139  _v
## 31          часть_s       238  100     137  _s
## 32       понимать_v       261   90     136  _v
## 33          новый_a       271   88     134  _a
## 34         делать_v       252   94     133  _v
## 35   существовать_v       227  106     133  _v
## 36       растение_s       246   96     132  _s
## 37         воздух_s       239   99     128  _s
## 38          место_s       216  113     128  _s
## 39        большой_a       200  117     126  _a
## 40      создавать_v       220  111     124  _v
## 41       начинать_v       217  112     124  _v
## 42   задумываться_v       235  102     120  _v
## 43          живой_a       227  106     118  _a
## 44         вопрос_s       222  109     118  _s
## 45        считать_v       169  134     118  _v
## 46      приводить_v       230  104     117  _v
## 47         дерево_s       221  110     117  _s
## 48         отходы_s       207  114     113  _s
## 49       огромный_a       174  129     111  _a
## 50       действие_s       186  123     110  _s
## 51     количество_s       204  115     108  _s
## 52  экологический_a       257   91     106  _a
## 53          иметь_v       191  120     106  _v
## 54        сделать_v       160  142     105  _v
## 55          образ_s       154  147     105  _s
## 56       помогать_v       173  131     104  _v
## 57           вред_s       162  138     104  _s
## 58        ребенок_s       257   91     103  _s
## 59    последствие_s       159  143     103  _s
## 60       зависеть_v       155  146     103  _v
## 61       общество_s       223  108     102  _s
## 62      сохранять_v       156  145     101  _v
## 63   деятельность_s       154  147      99  _s
## 64          завод_s       133  177      99  _s
## 65    происходить_v       148  155      98  _v
## 66          брать_v       144  158      98  _v
## 67           сила_s       154  147      97  _s
## 68   человеческий_a       153  150      97  _a
## 69          город_s       162  138      96  _s
## 70            дом_s       159  143      96  _s
## 71       развитие_s       186  123      95  _s
## 72          почва_s       153  150      94  _s
## 73      атмосфера_s       139  164      93  _s
## 74         думать_v       185  125      92  _v
## 75       существо_s       177  128      92  _s
## 76           день_s       153  150      92  _s
## 77  использование_s       141  163      92  _s
## 78         хотеть_v       136  169      92  _v
## 79       вырубать_v       129  183      92  _v
## 80     загрязнять_v       124  188      92  _v
## 81     оставаться_v       134  173      91  _v
## 82        процесс_s       124  188      91  _s
## 83       окружать_v       118  199      91  _v
## 84       наносить_v       121  193      90  _v
## 85    потребность_s       170  132      89  _s
## 86         стоить_v       143  160      89  _v
## 87       источник_s       127  186      89  _s
## 88         данный_a       170  132      88  _a
## 89    загрязнение_s       138  166      88  _s
## 90    возможность_s       114  206      88  _s
## 91    современный_a       142  161      87  _a
## 92     находиться_v       120  195      87  _v
## 93       говорить_v       144  158      86  _v
## 94           река_s       134  173      85  _s
## 95          смочь_v       128  185      85  _v
## 96          целое_s       110  214      85  _s
## 97     уничтожать_v       129  183      84  _v
## 98            дар_s       109  220      84  _s
## 99        условие_s       138  166      83  _s
## 100    сохранение_s       131  179      82  _s

Генератор списка частых слов по частям речи (функция)

word <- function(n = Inf) {head(FreqAll$feature, n)}

sword <- function(n = Inf) {head(filter(
  FreqAll, POS == "_s")[["feature"]], n)}

aword <- function(n = Inf) {head(filter(
  FreqAll, POS == "_a")[["feature"]], n)}

vword <- function(n = Inf) {head(filter(
  FreqAll, POS == "_v")[["feature"]], n)}

Dist_t2 По текстам - Без Служебных - Контекст 2

#aTime <- Sys.time()

Dist_t2 <- Tokens_S %>% 
  tokens_keep(pattern = c("*_S", "*_V", "*_A")) %>% 
  fcm(context = "window", count = "frequency"
    , window = 2
    , tri = FALSE) %>% 
  as.dfm() %>% # вроде и напрямую работает, но на всякий случай.
  textstat_simil(margin = "features", method = "cosine"
                 #, min_simil = 0.80
                 ) %>%
  as.data.frame() %>% 
  arrange(desc(cosine)) %>% 
  mutate(POS1 = str_extract(feature1, "_[A-Z]+")) %>% 
  mutate(POS2 = str_extract(feature2, "_[A-Z]+")) %>%
  filter(POS1 %in% c( "_S", "_V", "_A")) %>% 
  filter(POS2 %in% c( "_S", "_V", "_A")) %T>%
  {
    extract2(., 3) %>% 
    hist()
  }

#Sys.time() - aTime
Dist_t2 %>% 
  filter(feature1 == "природа_S") %>% 
  head(10)
##     feature1       feature2    cosine POS1 POS2
## 1  природа_S      должный_A 0.8622282   _S   _A
## 2  природа_S      считать_V 0.8533090   _S   _V
## 3  природа_S задумываться_V 0.8480295   _S   _V
## 4  природа_S    позволять_V 0.8141524   _S   _V
## 5  природа_S     говорить_V 0.8119083   _S   _V
## 6  природа_S     разумный_A 0.8094962   _S   _A
## 7  природа_S деятельность_S 0.8052102   _S   _S
## 8  природа_S       думать_V 0.8035259   _S   _V
## 9  природа_S     понимать_V 0.8016208   _S   _V
## 10 природа_S      сторона_S 0.7997393   _S   _S
Dist_t2 %>% 
  filter(feature1 == "лес_S") %>% 
  head(10)
##    feature1      feature2    cosine POS1 POS2
## 1     лес_S      дерево_S 0.5627782   _S   _S
## 2     лес_S  истреблять_V 0.4848537   _S   _V
## 3     лес_S     убивать_V 0.4660178   _S   _V
## 4     лес_S       место_S 0.4571452   _S   _S
## 5     лес_S      гореть_V 0.4339851   _S   _V
## 6     лес_S    посадить_V 0.4068942   _S   _V
## 7     лес_S       целый_A 0.3999526   _S   _A
## 8     лес_S ограждаться_V 0.3961124   _S   _V
## 9     лес_S       нужда_S 0.3960453   _S   _S
## 10    лес_S    погибать_V 0.3951146   _S   _V
Dist_t2 %>% 
  filter(feature1 == "вода_S") %>% 
  head(10)
##    feature1      feature2    cosine POS1 POS2
## 1    вода_S      дышать_V 0.6419002   _S   _V
## 2    вода_S      чистый_A 0.5855766   _S   _A
## 3    вода_S  загрязнять_V 0.5401314   _S   _V
## 4    вода_S      свежий_A 0.5085142   _S   _A
## 5    вода_S    кислород_S 0.5022588   _S   _S
## 6    вода_S        свет_S 0.4942098   _S   _S
## 7    вода_S        пить_V 0.4830448   _S   _V
## 8    вода_S      воздух_S 0.4635674   _S   _S
## 9    вода_S атмосферный_A 0.4516468   _S   _A
## 10   вода_S  родниковый_A 0.4311533   _S   _A
Dist_t2 %>% 
  filter(feature1 == "мораль_S") %>% 
  head(10)
##    feature1            feature2    cosine POS1 POS2
## 1  мораль_S      общепринятый_A 0.4389229   _S   _A
## 2  мораль_S      регулировать_V 0.4372246   _S   _V
## 3  мораль_S         упираться_V 0.4313311   _S   _V
## 4  мораль_S       обостренный_A 0.4193711   _S   _A
## 5  мораль_S  противоправность_S 0.3812464   _S   _S
## 6  мораль_S фундаментальность_S 0.3735437   _S   _S
## 7  мораль_S           помысел_S 0.3735437   _S   _S
## 8  мораль_S        причислять_V 0.3616821   _S   _V
## 9  мораль_S          сущность_S 0.3586021   _S   _S
## 10 мораль_S        библейский_A 0.3521804   _S   _A
#  aTime <- Sys.time()
# 
# Cosine_01 <- Tokens_S %>%
#   tokens_keep(pattern = c("*_S", "*_V", "*_A")) %>%
#     tokens_tolower() %>% 
#   fcm(context = "window", count = "frequency"
#     , window = 2
#     , tri = FALSE) %>%
#   as.dfm() %>%
#   textstat_simil(margin = "features", method = "cosine")
# 
# Sys.time() - aTime

Кластерный анализ

# aTime <- Sys.time()
# 
# Cosine_01[sword(50), sword(50)] %>% 
#   as.dist() %>% 
#   hclust(method = "single") %>% 
#   plot()
#   
# 
# Sys.time() - aTime

тепловая карта

# aTime <- Sys.time()
# 
# Cosine_01[aword(50), sword(50)] %>%
#   as.matrix() %>%
#   heatmap(cexRow = 0.4, cexCol = 0.4, scale = "none")
# 
# Sys.time() - aTime

Dist_t3 По текстам - Без Служебных - Контекст 3

Dist_t3 <- Tokens_S %>% 
  tokens_keep(pattern = c("*_S", "*_V", "*_A")) %>% 
  fcm(context = "window", count = "frequency"
    , window = 3
    , tri = FALSE) %>% 
  as.dfm() %>% # вроде и напрямую работает, но на всякий случай.
  textstat_simil(margin = "features", method = "cosine"
                 #, min_simil = 0.80
                 ) %>%
  as.data.frame() %>% 
  arrange(desc(cosine)) %>% 
  mutate(POS1 = str_extract(feature1, "_[A-Z]+")) %>% 
  mutate(POS2 = str_extract(feature2, "_[A-Z]+")) %>%
  filter(POS1 %in% c( "_S", "_V", "_A")) %>% 
  filter(POS2 %in% c( "_S", "_V", "_A")) %T>%
  {
    extract2(., 3) %>% 
    hist()
  }

Dist_t3 %>% 
  filter(feature1 == "природа_S") %>% 
  head(10)
##     feature1       feature2    cosine POS1 POS2
## 1  природа_S задумываться_V 0.8796489   _S   _V
## 2  природа_S      считать_V 0.8781257   _S   _V
## 3  природа_S      должный_A 0.8588592   _S   _A
## 4  природа_S     говорить_V 0.8559787   _S   _V
## 5  природа_S       думать_V 0.8542796   _S   _V
## 6  природа_S     понимать_V 0.8489152   _S   _V
## 7  природа_S деятельность_S 0.8375026   _S   _S
## 8  природа_S     разумный_A 0.8271905   _S   _A
## 9  природа_S    позволять_V 0.8262454   _S   _V
## 10 природа_S      сказать_V 0.8257623   _S   _V
Dist_t3 %>% 
  filter(feature1 == "лес_S") %>% 
  head(10)
##    feature1       feature2    cosine POS1 POS2
## 1     лес_S       дерево_S 0.6438098   _S   _S
## 2     лес_S        место_S 0.6045160   _S   _S
## 3     лес_S   истреблять_V 0.5906036   _S   _V
## 4     лес_S      убивать_V 0.5902883   _S   _V
## 5     лес_S задумываться_V 0.5569708   _S   _V
## 6     лес_S      большой_A 0.5454352   _S   _A
## 7     лес_S       видеть_V 0.5448605   _S   _V
## 8     лес_S       думать_V 0.5394332   _S   _V
## 9     лес_S   оставаться_V 0.5332246   _S   _V
## 10    лес_S     начинать_V 0.5303945   _S   _V
Dist_t3 %>% 
  filter(feature1 == "вода_S") %>% 
  head(10)
##    feature1      feature2    cosine POS1 POS2
## 1    вода_S      чистый_A 0.6963104   _S   _A
## 2    вода_S  загрязнять_V 0.6794466   _S   _V
## 3    вода_S      дышать_V 0.6716682   _S   _V
## 4    вода_S      воздух_S 0.5998623   _S   _S
## 5    вода_S        свет_S 0.5789821   _S   _S
## 6    вода_S    кислород_S 0.5777663   _S   _S
## 7    вода_S        пища_S 0.5440588   _S   _S
## 8    вода_S необходимый_A 0.5382466   _S   _A
## 9    вода_S     большой_A 0.5175852   _S   _A
## 10   вода_S  количество_S 0.5041539   _S   _S
Dist_t3 %>% 
  filter(feature1 == "мораль_S") %>% 
  head(10)
##    feature1       feature2    cosine POS1 POS2
## 1  мораль_S регулировать_V 0.4831766   _S   _V
## 2  мораль_S общепринятый_A 0.4433103   _S   _A
## 3  мораль_S      симбиоз_S 0.4338351   _S   _S
## 4  мораль_S    упираться_V 0.4276686   _S   _V
## 5  мораль_S      девство_S 0.4264014   _S   _S
## 6  мораль_S неразделимый_A 0.4178554   _S   _A
## 7  мораль_S    возвышать_V 0.4128614   _S   _V
## 8  мораль_S     обратный_A 0.4121490   _S   _A
## 9  мораль_S  присутствие_S 0.4090825   _S   _S
## 10 мораль_S      близкий_A 0.4066159   _S   _A
Dist_t3 %>% 
  filter(feature1 == "моральный_A") %>% 
  head(10)
##       feature1           feature2    cosine POS1 POS2
## 1  моральный_A     нравственный_A 0.5398651   _A   _A
## 2  моральный_A           стадий_S 0.4749803   _A   _S
## 3  моральный_A         духовный_A 0.4709026   _A   _A
## 4  моральный_A        поведение_S 0.4633620   _A   _S
## 5  моральный_A       обращаться_V 0.4578708   _A   _V
## 6  моральный_A         отвечать_V 0.4501535   _A   _V
## 7  моральный_A корректироваться_V 0.4393568   _A   _V
## 8  моральный_A         ценность_S 0.4371716   _A   _S
## 9  моральный_A           личный_A 0.4342982   _A   _A
## 10 моральный_A        обязанный_A 0.4332825   _A   _A
Dist_t3 %>% 
  filter(feature1 == "нравственный_A") %>% 
  head(10)
##          feature1           feature2    cosine POS1 POS2
## 1  нравственный_A    неравноценный_A 0.6392420   _A   _A
## 2  нравственный_A        концепция_S 0.6109427   _A   _S
## 3  нравственный_A         общаться_V 0.6052248   _A   _V
## 4  нравственный_A        трепетный_A 0.6005001   _A   _A
## 5  нравственный_A корректироваться_V 0.6001876   _A   _V
## 6  нравственный_A   субъективность_S 0.5847499   _A   _S
## 7  нравственный_A       обращаться_V 0.5785679   _A   _V
## 8  нравственный_A       позволение_S 0.5758219   _A   _S
## 9  нравственный_A           стадий_S 0.5751798   _A   _S
## 10 нравственный_A          сходный_A 0.5739212   _A   _A
Dist_t3 %>% 
  filter(feature1 == "экологический_A") %>% 
  head(10)
##           feature1         feature2    cosine POS1 POS2
## 1  экологический_A       экология_S 0.6806231   _A   _S
## 2  экологический_A         важный_A 0.6652430   _A   _A
## 3  экологический_A       говорить_V 0.6441965   _A   _V
## 4  экологический_A       культура_S 0.6389730   _A   _S
## 5  экологический_A        главный_A 0.6362798   _A   _A
## 6  экологический_A взаимодействие_S 0.6322689   _A   _S
## 7  экологический_A       понимать_V 0.6253035   _A   _V
## 8  экологический_A         думать_V 0.6227021   _A   _V
## 9  экологический_A        большой_A 0.6226332   _A   _A
## 10 экологический_A       казаться_V 0.6219229   _A   _V

Dist_t5 По текстам - Без Служебных - Контекст 5

aTime <- Sys.time()

Dist_t5 <- Tokens_S %>% 
  tokens_keep(pattern = c("*_S", "*_V", "*_A")) %>% 
  fcm(context = "window", count = "frequency"
    , window = 5
    , tri = FALSE) %>% 
  as.dfm() %>% # вроде и напрямую работает, но на всякий случай.
  textstat_simil(margin = "features", method = "cosine"
                 #, min_simil = 0.80
                 ) %>%
  as.data.frame() %>% 
  arrange(desc(cosine)) %>% 
  mutate(POS1 = str_extract(feature1, "_[A-Z]+")) %>% 
  mutate(POS2 = str_extract(feature2, "_[A-Z]+")) %>%
  filter(POS1 %in% c( "_S", "_V", "_A")) %>% 
  filter(POS2 %in% c( "_S", "_V", "_A")) %T>%
  {
    extract2(., 3) %>% 
    hist()
  } 

bTime <- Sys.time()
bTime - aTime
## Time difference of 49.69907 secs
Dist_t5 %>% 
  filter(feature1 == "природа_S") %>% 
  head(10)
##     feature1       feature2    cosine POS1 POS2
## 1  природа_S задумываться_V 0.9144827   _S   _V
## 2  природа_S       думать_V 0.9142806   _S   _V
## 3  природа_S     понимать_V 0.9098620   _S   _V
## 4  природа_S     говорить_V 0.9094155   _S   _V
## 5  природа_S      должный_A 0.9052055   _S   _A
## 6  природа_S      хороший_A 0.9002354   _S   _A
## 7  природа_S      считать_V 0.8991900   _S   _V
## 8  природа_S      сказать_V 0.8978736   _S   _V
## 9  природа_S     отвечать_V 0.8955859   _S   _V
## 10 природа_S    позволять_V 0.8954563   _S   _V
Dist_t5 %>% 
  filter(feature1 == "лес_S") %>% 
  head(10)
##    feature1       feature2    cosine POS1 POS2
## 1     лес_S       дерево_S 0.7675050   _S   _S
## 2     лес_S        место_S 0.7510936   _S   _S
## 3     лес_S      убивать_V 0.7338716   _S   _V
## 4     лес_S        целый_A 0.6837567   _S   _A
## 5     лес_S   уничтожать_V 0.6829482   _S   _V
## 6     лес_S      большой_A 0.6807415   _S   _A
## 7     лес_S     животное_S 0.6799639   _S   _S
## 8     лес_S задумываться_V 0.6799237   _S   _V
## 9     лес_S   загрязнять_V 0.6734360   _S   _V
## 10    лес_S   оставаться_V 0.6675393   _S   _V
Dist_t5 %>% 
  filter(feature1 == "вода_S") %>% 
  head(10)
##    feature1      feature2    cosine POS1 POS2
## 1    вода_S      воздух_S 0.7777478   _S   _S
## 2    вода_S  загрязнять_V 0.7644626   _S   _V
## 3    вода_S      чистый_A 0.7545947   _S   _A
## 4    вода_S      дышать_V 0.7162163   _S   _V
## 5    вода_S  количество_S 0.7098456   _S   _S
## 6    вода_S        свет_S 0.6886751   _S   _S
## 7    вода_S        пища_S 0.6846797   _S   _S
## 8    вода_S    огромный_A 0.6842483   _S   _A
## 9    вода_S необходимый_A 0.6711045   _S   _A
## 10   вода_S     большой_A 0.6583031   _S   _A
Dist_t5 %>% 
  filter(feature1 == "мораль_S") %>% 
  head(10)
##    feature1       feature2    cosine POS1 POS2
## 1  мораль_S регулировать_V 0.5551974   _S   _V
## 2  мораль_S нравственный_A 0.5311808   _S   _A
## 3  мораль_S         факт_S 0.5224203   _S   _S
## 4  мораль_S   обращаться_V 0.5140901   _S   _V
## 5  мораль_S   изменяться_V 0.5120152   _S   _V
## 6  мораль_S  объективный_A 0.4901917   _S   _A
## 7  мораль_S    упираться_V 0.4861906   _S   _V
## 8  мораль_S       власть_S 0.4860337   _S   _S
## 9  мораль_S   воспитание_S 0.4855717   _S   _S
## 10 мораль_S  закладывать_V 0.4848451   _S   _V

Dist_t2All По текстам - Все слова - Контекст 2

aTime <- Sys.time()

Dist_t2All <- Tokens_S %>% 
  #tokens_keep(pattern = c("*_S", "*_V", "*_A")) %>% 
  fcm(context = "window", count = "frequency"
    , window = 2
    , tri = FALSE) %>% 
  as.dfm() %>% # вроде и напрямую работает, но на всякий случай.
  textstat_simil(margin = "features", method = "cosine"
                 #, min_simil = 0.80
                 ) %>%
  as.data.frame() %>% 
  arrange(desc(cosine)) %>% 
  mutate(POS1 = str_extract(feature1, "_[A-Z]+")) %>% 
  mutate(POS2 = str_extract(feature2, "_[A-Z]+")) %>%
  filter(POS1 %in% c( "_S", "_V", "_A")) %>% 
  filter(POS2 %in% c( "_S", "_V", "_A")) %T>%
  {
    extract2(., 3) %>% 
    hist()
  }

Sys.time() - aTime
## Time difference of 56.04026 secs
Dist_t2All %>% 
  filter(feature1 == "природа_S") %>% 
  head(10)
##     feature1          feature2    cosine POS1 POS2
## 1  природа_S        начинать_V 0.8201205   _S   _V
## 2  природа_S       другдруг?_S 0.8089336   _S   _S
## 3  природа_S  взаимодействие_S 0.8072842   _S   _S
## 4  природа_S    деятельность_S 0.8052257   _S   _S
## 5  природа_S         хороший_A 0.7967455   _S   _A
## 6  природа_S         счастие_S 0.7887677   _S   _S
## 7  природа_S взаимоотношение_S 0.7887076   _S   _S
## 8  природа_S         ребенок_S 0.7847839   _S   _S
## 9  природа_S        развитие_S 0.7807006   _S   _S
## 10 природа_S          добрый_A 0.7744588   _S   _A
Dist_t2All %>% 
  filter(feature1 == "лес_S") %>% 
  head(10)
##    feature1    feature2    cosine POS1 POS2
## 1     лес_S    дерево_S 0.7134538   _S   _S
## 2     лес_S     мусор_S 0.6922855   _S   _S
## 3     лес_S       век_S 0.6732133   _S   _S
## 4     лес_S результат_S 0.6698309   _S   _S
## 5     лес_S   будущее_S 0.6694841   _S   _S
## 6     лес_S   хороший_A 0.6634085   _S   _A
## 7     лес_S  качество_S 0.6607852   _S   _S
## 8     лес_S     город_S 0.6559324   _S   _S
## 9     лес_S     школа_S 0.6523666   _S   _S
## 10    лес_S   большой_A 0.6354393   _S   _A
Dist_t2All %>% 
  filter(feature1 == "вода_S") %>% 
  head(10)
##    feature1         feature2    cosine POS1 POS2
## 1    вода_S         воздух_S 0.7449434   _S   _S
## 2    вода_S           пища_S 0.7401301   _S   _S
## 3    вода_S         чистый_A 0.7121388   _S   _A
## 4    вода_S       здоровье_S 0.7099942   _S   _S
## 5    вода_S           свет_S 0.7064633   _S   _S
## 6    вода_S        хороший_A 0.7059273   _S   _A
## 7    вода_S        пластик_S 0.7047846   _S   _S
## 8    вода_S  многообразный_A 0.7026325   _S   _A
## 9    вода_S промышленность_S 0.7002262   _S   _S
## 10   вода_S       качество_S 0.6969358   _S   _S
Dist_t2All %>% 
  filter(feature1 == "мораль_S") %>% 
  head(10)
##    feature1          feature2    cosine POS1 POS2
## 1  мораль_S психологический_A 0.6478984   _S   _A
## 2  мораль_S         симбиоз_S 0.6439886   _S   _S
## 3  мораль_S       другдруг?_S 0.6274950   _S   _S
## 4  мораль_S   многообразный_A 0.6214286   _S   _A
## 5  мораль_S    практический_A 0.6036281   _S   _A
## 6  мораль_S          тишина_S 0.6022113   _S   _S
## 7  мораль_S         религия_S 0.5993903   _S   _S
## 8  мораль_S        обоняние_S 0.5976143   _S   _S
## 9  мораль_S     устремление_S 0.5976143   _S   _S
## 10 мораль_S        кочевать_V 0.5976143   _S   _V

Dist_t3All По текстам - Все слова - Контекст 3

aTime <- Sys.time()

Dist_t3All <- Tokens_S %>% 
  #tokens_keep(pattern = c("*_S", "*_V", "*_A")) %>% 
  fcm(context = "window", count = "frequency"
    , window = 3
    , tri = FALSE) %>% 
  as.dfm() %>% # вроде и напрямую работает, но на всякий случай.
  textstat_simil(margin = "features", method = "cosine"
                 #, min_simil = 0.80
                 ) %>%
  as.data.frame() %>% 
  arrange(desc(cosine)) %>% 
  mutate(POS1 = str_extract(feature1, "_[A-Z]+")) %>% 
  mutate(POS2 = str_extract(feature2, "_[A-Z]+")) %>%
  filter(POS1 %in% c( "_S", "_V", "_A")) %>% 
  filter(POS2 %in% c( "_S", "_V", "_A")) %T>%
  {
    extract2(., 3) %>% 
    hist()
  }

Sys.time() - aTime
## Time difference of 1.174005 mins
Dist_t3All %>% 
  filter(feature1 == "природа_S") %>% 
  head(10)
##     feature1       feature2    cosine POS1 POS2
## 1  природа_S     начинать_V 0.8568415   _S   _V
## 2  природа_S деятельность_S 0.8455749   _S   _S
## 3  природа_S         жить_V 0.8431235   _S   _V
## 4  природа_S      хороший_A 0.8427646   _S   _A
## 5  природа_S      близкий_A 0.8380283   _S   _A
## 6  природа_S      должный_A 0.8369188   _S   _A
## 7  природа_S     развитие_S 0.8360722   _S   _S
## 8  природа_S       плохой_A 0.8206761   _S   _A
## 9  природа_S      ребенок_S 0.8206501   _S   _S
## 10 природа_S     поступок_S 0.8200686   _S   _S
Dist_t3All %>% 
  filter(feature1 == "лес_S") %>% 
  head(10)
##    feature1    feature2    cosine POS1 POS2
## 1     лес_S    дерево_S 0.7994557   _S   _S
## 2     лес_S     мусор_S 0.7635988   _S   _S
## 3     лес_S      идти_V 0.7599822   _S   _V
## 4     лес_S   хороший_A 0.7553299   _S   _A
## 5     лес_S результат_S 0.7533523   _S   _S
## 6     лес_S   большой_A 0.7478424   _S   _A
## 7     лес_S   будущее_S 0.7460514   _S   _S
## 8     лес_S    пример_S 0.7301522   _S   _S
## 9     лес_S       век_S 0.7300041   _S   _S
## 10    лес_S    свалка_S 0.7295299   _S   _S
Dist_t3All %>% 
  filter(feature1 == "вода_S") %>% 
  head(10)
##    feature1      feature2    cosine POS1 POS2
## 1    вода_S      воздух_S 0.8031321   _S   _S
## 2    вода_S      чистый_A 0.7933677   _S   _A
## 3    вода_S        пища_S 0.7885994   _S   _S
## 4    вода_S      дерево_S 0.7800474   _S   _S
## 5    вода_S         лес_S 0.7717877   _S   _S
## 6    вода_S     хороший_A 0.7684221   _S   _A
## 7    вода_S    качество_S 0.7632629   _S   _S
## 8    вода_S переработка_S 0.7616387   _S   _S
## 9    вода_S    животное_S 0.7577079   _S   _S
## 10   вода_S        идти_V 0.7553670   _S   _V
Dist_t3All %>% 
  filter(feature1 == "мораль_S") %>% 
  head(10)
##    feature1          feature2    cosine POS1 POS2
## 1  мораль_S психологический_A 0.6750906   _S   _A
## 2  мораль_S    нравственный_A 0.6722000   _S   _A
## 3  мораль_S         близкий_A 0.6440343   _S   _A
## 4  мораль_S           семья_S 0.6410604   _S   _S
## 5  мораль_S        личность_S 0.6408559   _S   _S
## 6  мораль_S   многообразный_A 0.6327961   _S   _A
## 7  мораль_S          задача_S 0.6299674   _S   _S
## 8  мораль_S    регулировать_V 0.6266996   _S   _V
## 9  мораль_S    практический_A 0.6215587   _S   _A
## 10 мораль_S       виноватый_A 0.6090972   _S   _A

Dist_t5All По текстам - Все слова - Контекст 5

aTime <- Sys.time()

Dist_t5All <- Tokens_S %>% 
  #tokens_keep(pattern = c("*_S", "*_V", "*_A")) %>% 
  fcm(context = "window", count = "frequency"
    , window = 5
    , tri = FALSE) %>% 
  as.dfm() %>% # вроде и напрямую работает, но на всякий случай.
  textstat_simil(margin = "features", method = "cosine"
                 #, min_simil = 0.80
                 ) %>%
  as.data.frame() %>% 
  arrange(desc(cosine)) %>% 
  mutate(POS1 = str_extract(feature1, "_[A-Z]+")) %>% 
  mutate(POS2 = str_extract(feature2, "_[A-Z]+")) %>%
  filter(POS1 %in% c( "_S", "_V", "_A")) %>% 
  filter(POS2 %in% c( "_S", "_V", "_A")) %T>%
  {
    extract2(., 3) %>% 
    hist()
  }

Sys.time() - aTime
## Time difference of 1.506528 mins
Dist_t5All %>% 
  filter(feature1 == "природа_S") %>% 
  head(10)
##     feature1       feature2    cosine POS1 POS2
## 1  природа_S      должный_A 0.9173432   _S   _A
## 2  природа_S     начинать_V 0.9083307   _S   _V
## 3  природа_S     развитие_S 0.9070260   _S   _S
## 4  природа_S      хороший_A 0.8934876   _S   _A
## 5  природа_S         жить_V 0.8925539   _S   _V
## 6  природа_S деятельность_S 0.8913590   _S   _S
## 7  природа_S    природный_A 0.8886803   _S   _A
## 8  природа_S      большой_A 0.8875958   _S   _A
## 9  природа_S  переставать_V 0.8842803   _S   _V
## 10 природа_S  возможность_S 0.8822596   _S   _S
Dist_t5All %>% 
  filter(feature1 == "лес_S") %>% 
  head(10)
##    feature1    feature2    cosine POS1 POS2
## 1     лес_S    дерево_S 0.8897558   _S   _S
## 2     лес_S   большой_A 0.8568717   _S   _A
## 3     лес_S     мусор_S 0.8536031   _S   _S
## 4     лес_S  животное_S 0.8514210   _S   _S
## 5     лес_S      идти_V 0.8477652   _S   _V
## 6     лес_S     место_S 0.8451003   _S   _S
## 7     лес_S   хороший_A 0.8293139   _S   _A
## 8     лес_S множество_S 0.8290758   _S   _S
## 9     лес_S    видеть_V 0.8279120   _S   _V
## 10    лес_S  экология_S 0.8278032   _S   _S
Dist_t5All %>% 
  filter(feature1 == "вода_S") %>% 
  head(10)
##    feature1     feature2    cosine POS1 POS2
## 1    вода_S     воздух_S 0.8911487   _S   _S
## 2    вода_S     чистый_A 0.8660831   _S   _A
## 3    вода_S        лес_S 0.8617402   _S   _S
## 4    вода_S       пища_S 0.8489620   _S   _S
## 5    вода_S    большой_A 0.8445109   _S   _A
## 6    вода_S загрязнять_V 0.8422749   _S   _V
## 7    вода_S     дерево_S 0.8331005   _S   _S
## 8    вода_S   животное_S 0.8316482   _S   _S
## 9    вода_S      завод_S 0.8304005   _S   _S
## 10   вода_S    энергия_S 0.8290185   _S   _S
Dist_t5All %>% 
  filter(feature1 == "мораль_S") %>% 
  head(10)
##    feature1        feature2    cosine POS1 POS2
## 1  мораль_S       близкий_A 0.7475647   _S   _A
## 2  мораль_S    воспитание_S 0.7416761   _S   _S
## 3  мораль_S     виноватый_A 0.7398621   _S   _A
## 4  мораль_S        стадия_S 0.7334055   _S   _S
## 5  мораль_S        задача_S 0.7328220   _S   _S
## 6  мораль_S   способность_S 0.7298065   _S   _S
## 7  мораль_S  регулировать_V 0.7262443   _S   _V
## 8  мораль_S многообразный_A 0.7225409   _S   _A
## 9  мораль_S  нравственный_A 0.7192477   _S   _A
## 10 мораль_S       счастие_S 0.7190672   _S   _S

Dist_s2 По предложениям - Без Служебных - Контекст 2

aTime <- Sys.time()

Dist_s2 <- Tokens_S2 %>% 
  tokens_keep(pattern = c("*_S", "*_V", "*_A")) %>% 
  fcm(context = "window", count = "frequency"
    , window = 2
    , tri = FALSE) %>% 
  as.dfm() %>% # вроде и напрямую работает, но на всякий случай.
  textstat_simil(margin = "features", method = "cosine"
                 #, min_simil = 0.80
                 ) %>%
  as.data.frame() %>% 
  arrange(desc(cosine)) %>% 
  mutate(POS1 = str_extract(feature1, "_[A-Z]+")) %>% 
  mutate(POS2 = str_extract(feature2, "_[A-Z]+")) %>%
  filter(POS1 %in% c( "_S", "_V", "_A")) %>% 
  filter(POS2 %in% c( "_S", "_V", "_A")) %T>%
  {
    extract2(., 3) %>% 
    hist()
  }

Sys.time() - aTime
## Time difference of 52.2559 secs
Dist_s2 %>% 
  filter(feature1 == "природа_S") %>% 
  head(10)
##     feature1           feature2    cosine POS1 POS2
## 1  природа_S   субъективность_S 0.8723313   _S   _S
## 2  природа_S          должный_A 0.8066360   _S   _A
## 3  природа_S     задумываться_V 0.7984636   _S   _V
## 4  природа_S             мочь_V 0.7895969   _S   _V
## 5  природа_S          считать_V 0.7841199   _S   _V
## 6  природа_S        позволять_V 0.7752306   _S   _V
## 7  природа_S      первобытный_A 0.7748647   _S   _A
## 8  природа_S проинформировать_V 0.7667465   _S   _V
## 9  природа_S         разумный_A 0.7651541   _S   _A
## 10 природа_S  потребительский_A 0.7604019   _S   _A
Dist_s2 %>% 
  filter(feature1 == "лес_S") %>% 
  head(10)
##    feature1     feature2    cosine POS1 POS2
## 1     лес_S     дерево_S 0.5044422   _S   _S
## 2     лес_S  распахать_V 0.4806051   _S   _V
## 3     лес_S        миг_S 0.4806051   _S   _S
## 4     лес_S истреблять_V 0.4567522   _S   _V
## 5     лес_S      место_S 0.4133257   _S   _S
## 6     лес_S    убивать_V 0.4015392   _S   _V
## 7     лес_S   поставка_S 0.3959476   _S   _S
## 8     лес_S загрязнуть_V 0.3888249   _S   _V
## 9     лес_S   посадить_V 0.3881179   _S   _V
## 10    лес_S  застройка_S 0.3775852   _S   _S
Dist_s2 %>% 
  filter(feature1 == "вода_S") %>% 
  head(10)
##    feature1      feature2    cosine POS1 POS2
## 1    вода_S      дышать_V 0.6065371   _S   _V
## 2    вода_S      чистый_A 0.5570756   _S   _A
## 3    вода_S      свежий_A 0.5213816   _S   _A
## 4    вода_S        шлак_S 0.5114115   _S   _S
## 5    вода_S  загрязнять_V 0.5043505   _S   _V
## 6    вода_S    кислород_S 0.5009721   _S   _S
## 7    вода_S загрязнение_S 0.4757484   _S   _S
## 8    вода_S атмосферный_A 0.4660319   _S   _A
## 9    вода_S        пить_V 0.4391468   _S   _V
## 10   вода_S        свет_S 0.4355315   _S   _S
Dist_s2 %>% 
  filter(feature1 == "мораль_S") %>% 
  head(10)
##    feature1       feature2    cosine POS1 POS2
## 1  мораль_S    упираться_V 0.4358010   _S   _V
## 2  мораль_S общепринятый_A 0.4150485   _S   _A
## 3  мораль_S   стимуляция_S 0.3735437   _S   _S
## 4  мораль_S регулировать_V 0.3659966   _S   _V
## 5  мораль_S       начало_S 0.3539950   _S   _S
## 6  мораль_S   библейский_A 0.3521804   _S   _A
## 7  мораль_S         мочь_V 0.3417137   _S   _V
## 8  мораль_S   допустимый_A 0.3262254   _S   _A
## 9  мораль_S   напряжение_S 0.3081578   _S   _S
## 10 мораль_S   умудряться_V 0.3049971   _S   _V

Dist_s3 По предложениям - Без Служебных - Контекст 3

aTime <- Sys.time()

Dist_s3 <- Tokens_S2 %>% 
  tokens_keep(pattern = c("*_S", "*_V", "*_A")) %>% 
  fcm(context = "window", count = "frequency"
    , window = 3
    , tri = FALSE) %>% 
  as.dfm() %>% # вроде и напрямую работает, но на всякий случай.
  textstat_simil(margin = "features", method = "cosine"
                 #, min_simil = 0.80
                 ) %>%
  as.data.frame() %>% 
  arrange(desc(cosine)) %>% 
  mutate(POS1 = str_extract(feature1, "_[A-Z]+")) %>% 
  mutate(POS2 = str_extract(feature2, "_[A-Z]+")) %>%
  filter(POS1 %in% c( "_S", "_V", "_A")) %>% 
  filter(POS2 %in% c( "_S", "_V", "_A")) %T>%
  {
    extract2(., 3) %>% 
    hist()
  }

Sys.time() - aTime
## Time difference of 1.138796 mins
Dist_s3 %>% 
  filter(feature1 == "природа_S") %>% 
  head(10)
##     feature1           feature2    cosine POS1 POS2
## 1  природа_S             мочь_V 0.8494638   _S   _V
## 2  природа_S     задумываться_V 0.8277253   _S   _V
## 3  природа_S          считать_V 0.8066954   _S   _V
## 4  природа_S            время_S 0.8057824   _S   _S
## 5  природа_S      первобытный_A 0.8054879   _S   _A
## 6  природа_S проинформировать_V 0.8046147   _S   _V
## 7  природа_S           вопрос_S 0.7991033   _S   _S
## 8  природа_S      становиться_V 0.7975787   _S   _V
## 9  природа_S         говорить_V 0.7950855   _S   _V
## 10 природа_S             быть_V 0.7939896   _S   _V
Dist_s3 %>% 
  filter(feature1 == "лес_S") %>% 
  head(10)
##    feature1      feature2    cosine POS1 POS2
## 1     лес_S      дерево_S 0.5789278   _S   _S
## 2     лес_S  истреблять_V 0.5253727   _S   _V
## 3     лес_S       место_S 0.5209552   _S   _S
## 4     лес_S     убивать_V 0.5047028   _S   _V
## 5     лес_S       целый_A 0.4683970   _S   _A
## 6     лес_S       земля_S 0.4660325   _S   _S
## 7     лес_S становиться_V 0.4451245   _S   _V
## 8     лес_S       новый_A 0.4422986   _S   _A
## 9     лес_S     планета_S 0.4356197   _S   _S
## 10    лес_S    погибать_V 0.4340388   _S   _V
Dist_s3 %>% 
  filter(feature1 == "вода_S") %>% 
  head(10)
##    feature1      feature2    cosine POS1 POS2
## 1    вода_S      чистый_A 0.6496001   _S   _A
## 2    вода_S      дышать_V 0.6287934   _S   _V
## 3    вода_S  загрязнять_V 0.6031032   _S   _V
## 4    вода_S загрязнение_S 0.5506044   _S   _S
## 5    вода_S    кислород_S 0.5356878   _S   _S
## 6    вода_S        свет_S 0.4909871   _S   _S
## 7    вода_S      воздух_S 0.4856224   _S   _S
## 8    вода_S       земля_S 0.4811527   _S   _S
## 9    вода_S      свежий_A 0.4662614   _S   _A
## 10   вода_S необходимый_A 0.4599605   _S   _A
Dist_s3 %>% 
  filter(feature1 == "мораль_S") %>% 
  head(10)
##    feature1        feature2    cosine POS1 POS2
## 1  мораль_S  регулировать_V 0.3995977   _S   _V
## 2  мораль_S    несогласие_S 0.3966808   _S   _S
## 3  мораль_S     упираться_V 0.3938723   _S   _V
## 4  мораль_S  общепринятый_A 0.3896275   _S   _A
## 5  мораль_S          мочь_V 0.3874849   _S   _V
## 6  мораль_S рассматривать_V 0.3871206   _S   _V
## 7  мораль_S       стадный_A 0.3699615   _S   _A
## 8  мораль_S     поведение_S 0.3678221   _S   _S
## 9  мораль_S      поступок_S 0.3652249   _S   _S
## 10 мораль_S        начало_S 0.3615466   _S   _S

Dist_s5 По предложениям - Без Служебных - Контекст 5

aTime <- Sys.time()

Dist_s5 <- Tokens_S2 %>% 
  tokens_keep(pattern = c("*_S", "*_V", "*_A")) %>% 
  fcm(context = "window", count = "frequency"
    , window = 5
    , tri = FALSE) %>% 
  as.dfm() %>% # вроде и напрямую работает, но на всякий случай.
  textstat_simil(margin = "features", method = "cosine"
                 #, min_simil = 0.80
                 ) %>%
  as.data.frame() %>% 
  arrange(desc(cosine)) %>% 
  mutate(POS1 = str_extract(feature1, "_[A-Z]+")) %>% 
  mutate(POS2 = str_extract(feature2, "_[A-Z]+")) %>%
  filter(POS1 %in% c( "_S", "_V", "_A")) %>% 
  filter(POS2 %in% c( "_S", "_V", "_A")) %T>%
  {
    extract2(., 3) %>% 
    hist()
  }

Sys.time() - aTime
## Time difference of 1.479839 mins
Dist_s5 %>% 
  filter(feature1 == "природа_S") %>% 
  head(10)
##     feature1       feature2    cosine POS1 POS2
## 1  природа_S задумываться_V 0.8438724   _S   _V
## 2  природа_S         мочь_V 0.8417180   _S   _V
## 3  природа_S         быть_V 0.8403032   _S   _V
## 4  природа_S  первобытный_A 0.8363353   _S   _A
## 5  природа_S       думать_V 0.8328854   _S   _V
## 6  природа_S     говорить_V 0.8324205   _S   _V
## 7  природа_S       добрый_A 0.8296014   _S   _A
## 8  природа_S  становиться_V 0.8283330   _S   _V
## 9  природа_S       вопрос_S 0.8275730   _S   _S
## 10 природа_S      считать_V 0.8255186   _S   _V
Dist_s5 %>% 
  filter(feature1 == "лес_S") %>% 
  head(10)
##    feature1     feature2    cosine POS1 POS2
## 1     лес_S     дерево_S 0.6925997   _S   _S
## 2     лес_S      место_S 0.6452753   _S   _S
## 3     лес_S    убивать_V 0.6205192   _S   _V
## 4     лес_S      земля_S 0.5991377   _S   _S
## 5     лес_S истреблять_V 0.5916859   _S   _V
## 6     лес_S      целый_A 0.5790704   _S   _A
## 7     лес_S      мусор_S 0.5646560   _S   _S
## 8     лес_S      новый_A 0.5641967   _S   _A
## 9     лес_S    планета_S 0.5502661   _S   _S
## 10    лес_S загрязнять_V 0.5501309   _S   _V
Dist_s5 %>% 
  filter(feature1 == "вода_S") %>% 
  head(10)
##    feature1      feature2    cosine POS1 POS2
## 1    вода_S      чистый_A 0.6830767   _S   _A
## 2    вода_S  загрязнять_V 0.6780243   _S   _V
## 3    вода_S      дышать_V 0.6439513   _S   _V
## 4    вода_S      воздух_S 0.6407648   _S   _S
## 5    вода_S загрязнение_S 0.6272890   _S   _S
## 6    вода_S       земля_S 0.6109383   _S   _S
## 7    вода_S  количество_S 0.5825514   _S   _S
## 8    вода_S        свет_S 0.5766849   _S   _S
## 9    вода_S    кислород_S 0.5707529   _S   _S
## 10   вода_S необходимый_A 0.5595386   _S   _A
Dist_s5 %>% 
  filter(feature1 == "мораль_S") %>% 
  head(10)
##    feature1        feature2    cosine POS1 POS2
## 1  мораль_S     упираться_V 0.4387268   _S   _V
## 2  мораль_S рассматривать_V 0.4259387   _S   _V
## 3  мораль_S  регулировать_V 0.4217625   _S   _V
## 4  мораль_S         рамка_S 0.4118887   _S   _S
## 5  мораль_S     поведение_S 0.4089513   _S   _S
## 6  мораль_S          мочь_V 0.4066770   _S   _V
## 7  мораль_S   становиться_V 0.4045058   _S   _V
## 8  мораль_S         время_S 0.3980643   _S   _S
## 9  мораль_S       природа_S 0.3973647   _S   _S
## 10 мораль_S       должный_A 0.3962985   _S   _A

Dist_s2All По предложениям - Все слова - Контекст 2

aTime <- Sys.time()

Dist_s2All <- Tokens_S2 %>% 
  #tokens_keep(pattern = c("*_S", "*_V", "*_A")) %>% 
  fcm(context = "window", count = "frequency"
    , window = 2
    , tri = FALSE) %>% 
  as.dfm() %>% # вроде и напрямую работает, но на всякий случай.
  textstat_simil(margin = "features", method = "cosine"
                 #, min_simil = 0.80
                 ) %>%
  as.data.frame() %>% 
  arrange(desc(cosine)) %>% 
  mutate(POS1 = str_extract(feature1, "_[A-Z]+")) %>% 
  mutate(POS2 = str_extract(feature2, "_[A-Z]+")) %>%
  filter(POS1 %in% c( "_S", "_V", "_A")) %>% 
  filter(POS2 %in% c( "_S", "_V", "_A")) %T>%
  {
    extract2(., 3) %>% 
    hist()
  }

Sys.time() - aTime
## Time difference of 1.706341 mins
Dist_s2All %>% 
  filter(feature1 == "природа_S") %>% 
  head(10)
##     feature1          feature2    cosine POS1 POS2
## 1  природа_S         близкий_A 0.7632727   _S   _A
## 2  природа_S        начинать_V 0.7303035   _S   _V
## 3  природа_S          любовь_S 0.7155067   _S   _S
## 4  природа_S взаимоотношение_S 0.7136506   _S   _S
## 5  природа_S  взаимодействие_S 0.7132018   _S   _S
## 6  природа_S            быть_V 0.7107313   _S   _V
## 7  природа_S    безразличный_A 0.7101026   _S   _A
## 8  природа_S       трепетный_A 0.7077484   _S   _A
## 9  природа_S     взаимосвязь_S 0.6971942   _S   _S
## 10 природа_S         человек_S 0.6915690   _S   _S
Dist_s2All %>% 
  filter(feature1 == "лес_S") %>% 
  head(10)
##    feature1     feature2    cosine POS1 POS2
## 1     лес_S     дерево_S 0.6067527   _S   _S
## 2     лес_S       жить_V 0.6000566   _S   _V
## 3     лес_S      город_S 0.5780660   _S   _S
## 4     лес_S      мусор_S 0.5777680   _S   _S
## 5     лес_S      школа_S 0.5758079   _S   _S
## 6     лес_S       сила_S 0.5612883   _S   _S
## 7     лес_S        мир_S 0.5587740   _S   _S
## 8     лес_S      место_S 0.5586239   _S   _S
## 9     лес_S   мичурина_S 0.5550108   _S   _S
## 10    лес_S находиться_V 0.5498080   _S   _V
Dist_s2All %>% 
  filter(feature1 == "вода_S") %>% 
  head(10)
##    feature1       feature2    cosine POS1 POS2
## 1    вода_S    поощрение_S 0.6743214   _S   _S
## 2    вода_S       чистый_A 0.6605448   _S   _A
## 3    вода_S       воздух_S 0.6499613   _S   _S
## 4    вода_S      экватор_S 0.6455713   _S   _S
## 5    вода_S         пища_S 0.6425593   _S   _S
## 6    вода_S производство_S 0.6414993   _S   _S
## 7    вода_S       вечный_A 0.6374675   _S   _A
## 8    вода_S   экосистема_S 0.6352368   _S   _S
## 9    вода_S         море_S 0.6331547   _S   _S
## 10   вода_S    различный_A 0.6287552   _S   _A
Dist_s2All %>% 
  filter(feature1 == "мораль_S") %>% 
  head(10)
##    feature1     feature2    cosine POS1 POS2
## 1  мораль_S допустимый_A 0.5480243   _S   _A
## 2  мораль_S      школа_S 0.5191094   _S   _S
## 3  мораль_S      садик_S 0.5054959   _S   _S
## 4  мораль_S      город_S 0.5033784   _S   _S
## 5  мораль_S      семья_S 0.5031752   _S   _S
## 6  мораль_S        мир_S 0.5017831   _S   _S
## 7  мораль_S      место_S 0.4997931   _S   _S
## 8  мораль_S       жить_V 0.4966188   _S   _V
## 9  мораль_S    доспехи_S 0.4927637   _S   _S
## 10 мораль_S   общество_S 0.4899087   _S   _S

Dist_s3All По предложениям - Все слова - Контекст 3

aTime <- Sys.time()


Dist_s3All <- Tokens_S2 %>% 
  #tokens_keep(pattern = c("*_S", "*_V", "*_A")) %>% 
  fcm(context = "window", count = "frequency"
    , window = 3
    , tri = FALSE) %>% 
  as.dfm() %>% # вроде и напрямую работает, но на всякий случай.
  textstat_simil(margin = "features", method = "cosine"
                 #, min_simil = 0.80
                 ) %>%
  as.data.frame() %>% 
  arrange(desc(cosine)) %>% 
  mutate(POS1 = str_extract(feature1, "_[A-Z]+")) %>% 
  mutate(POS2 = str_extract(feature2, "_[A-Z]+")) %>%
  filter(POS1 %in% c( "_S", "_V", "_A")) %>% 
  filter(POS2 %in% c( "_S", "_V", "_A")) %T>%
  {
    extract2(., 3) %>% 
    hist()
  }

Sys.time() - aTime
## Time difference of 2.165494 mins
Dist_s3All %>% 
  filter(feature1 == "природа_S") %>% 
  head(10)
##     feature1      feature2    cosine POS1 POS2
## 1  природа_S        быть_V 0.8078732   _S   _V
## 2  природа_S     близкий_A 0.8045582   _S   _A
## 3  природа_S    начинать_V 0.7797663   _S   _V
## 4  природа_S     должный_A 0.7759651   _S   _A
## 5  природа_S становиться_V 0.7754405   _S   _V
## 6  природа_S       жизнь_S 0.7687386   _S   _S
## 7  природа_S        жить_V 0.7624388   _S   _V
## 8  природа_S     человек_S 0.7569206   _S   _S
## 9  природа_S    проблема_S 0.7531214   _S   _S
## 10 природа_S    развитие_S 0.7408962   _S   _S
Dist_s3All %>% 
  filter(feature1 == "лес_S") %>% 
  head(10)
##    feature1    feature2    cosine POS1 POS2
## 1     лес_S    дерево_S 0.6903581   _S   _S
## 2     лес_S     мусор_S 0.6706465   _S   _S
## 3     лес_S      жить_V 0.6673127   _S   _V
## 4     лес_S     место_S 0.6590913   _S   _S
## 5     лес_S    отходы_S 0.6302538   _S   _S
## 6     лес_S     город_S 0.6285220   _S   _S
## 7     лес_S различный_A 0.6235456   _S   _A
## 8     лес_S     жизнь_S 0.6199754   _S   _S
## 9     лес_S      сила_S 0.6196105   _S   _S
## 10    лес_S       мир_S 0.6187600   _S   _S
Dist_s3All %>% 
  filter(feature1 == "вода_S") %>% 
  head(10)
##    feature1       feature2    cosine POS1 POS2
## 1    вода_S       чистый_A 0.7259768   _S   _A
## 2    вода_S    различный_A 0.7190384   _S   _A
## 3    вода_S производство_S 0.7078495   _S   _S
## 4    вода_S       воздух_S 0.7040235   _S   _S
## 5    вода_S         море_S 0.6854156   _S   _S
## 6    вода_S  загрязнение_S 0.6774438   _S   _S
## 7    вода_S       дерево_S 0.6762337   _S   _S
## 8    вода_S        жизнь_S 0.6760268   _S   _S
## 9    вода_S         свет_S 0.6755901   _S   _S
## 10   вода_S       отходы_S 0.6737888   _S   _S
Dist_s3All %>% 
  filter(feature1 == "мораль_S") %>% 
  head(10)
##    feature1   feature2    cosine POS1 POS2
## 1  мораль_S  природа_S 0.5767515   _S   _S
## 2  мораль_S начинать_V 0.5701841   _S   _V
## 3  мораль_S развитие_S 0.5574111   _S   _S
## 4  мораль_S    связь_S 0.5566547   _S   _S
## 5  мораль_S     жить_V 0.5421883   _S   _V
## 6  мораль_S      год_S 0.5353990   _S   _S
## 7  мораль_S  сторона_S 0.5353490   _S   _S
## 8  мораль_S гармония_S 0.5345201   _S   _S
## 9  мораль_S общество_S 0.5296089   _S   _S
## 10 мораль_S    семья_S 0.5287812   _S   _S

Dist_s5All По предложениям - Все слова - Контекст 5

aTime <- Sys.time()

Dist_s5All <- Tokens_S2 %>% 
  #tokens_keep(pattern = c("*_S", "*_V", "*_A")) %>% 
  fcm(context = "window", count = "frequency"
    , window = 5
    , tri = FALSE) %>% 
  as.dfm() %>% # вроде и напрямую работает, но на всякий случай.
  textstat_simil(margin = "features", method = "cosine"
                 #, min_simil = 0.80
                 ) %>%
  as.data.frame() %>% 
  arrange(desc(cosine)) %>% 
  mutate(POS1 = str_extract(feature1, "_[A-Z]+")) %>% 
  mutate(POS2 = str_extract(feature2, "_[A-Z]+")) %>%
  filter(POS1 %in% c( "_S", "_V", "_A")) %>% 
  filter(POS2 %in% c( "_S", "_V", "_A")) %T>%
  {
    extract2(., 3) %>% 
    hist()
  }

Sys.time() - aTime
## Time difference of 2.811555 mins
Dist_s5All %>% 
  filter(feature1 == "природа_S") %>% 
  head(10)
##     feature1      feature2    cosine POS1 POS2
## 1  природа_S        быть_V 0.8776845   _S   _V
## 2  природа_S становиться_V 0.8604861   _S   _V
## 3  природа_S        мочь_V 0.8595488   _S   _V
## 4  природа_S     должный_A 0.8562625   _S   _A
## 5  природа_S    начинать_V 0.8348454   _S   _V
## 6  природа_S       жизнь_S 0.8313708   _S   _S
## 7  природа_S        жить_V 0.8152517   _S   _V
## 8  природа_S переставать_V 0.8142476   _S   _V
## 9  природа_S    развитие_S 0.8132889   _S   _S
## 10 природа_S         мир_S 0.8132624   _S   _S
Dist_s5All %>% 
  filter(feature1 == "лес_S") %>% 
  head(10)
##    feature1     feature2    cosine POS1 POS2
## 1     лес_S     дерево_S 0.8075505   _S   _S
## 2     лес_S      место_S 0.7857271   _S   _S
## 3     лес_S      мусор_S 0.7825751   _S   _S
## 4     лес_S  различный_A 0.7652477   _S   _A
## 5     лес_S     отходы_S 0.7591852   _S   _S
## 6     лес_S       жить_V 0.7581253   _S   _V
## 7     лес_S       сила_S 0.7500588   _S   _S
## 8     лес_S       вода_S 0.7474851   _S   _S
## 9     лес_S количество_S 0.7469052   _S   _S
## 10    лес_S        вид_S 0.7455549   _S   _S
Dist_s5All %>% 
  filter(feature1 == "вода_S") %>% 
  head(10)
##    feature1       feature2    cosine POS1 POS2
## 1    вода_S    различный_A 0.8038749   _S   _A
## 2    вода_S       воздух_S 0.7996098   _S   _S
## 3    вода_S       чистый_A 0.7887968   _S   _A
## 4    вода_S  загрязнение_S 0.7775606   _S   _S
## 5    вода_S производство_S 0.7704254   _S   _S
## 6    вода_S       водоем_S 0.7643689   _S   _S
## 7    вода_S       отходы_S 0.7615221   _S   _S
## 8    вода_S         пища_S 0.7549560   _S   _S
## 9    вода_S     кислород_S 0.7523261   _S   _S
## 10   вода_S    природный_A 0.7504419   _S   _A
Dist_s5All %>% 
  filter(feature1 == "мораль_S") %>% 
  head(10)
##    feature1       feature2    cosine POS1 POS2
## 1  мораль_S        земля_S 0.6563555   _S   _S
## 2  мораль_S     развитие_S 0.6417610   _S   _S
## 3  мораль_S          мир_S 0.6254397   _S   _S
## 4  мораль_S     работать_V 0.6232128   _S   _V
## 5  мораль_S       данный_A 0.6214013   _S   _A
## 6  мораль_S человечество_S 0.6205773   _S   _S
## 7  мораль_S        жизнь_S 0.6193598   _S   _S
## 8  мораль_S      природа_S 0.6188475   _S   _S
## 9  мораль_S        место_S 0.6179921   _S   _S
## 10 мораль_S     общество_S 0.6164755   _S   _S