rm(list = ls())
date()
## [1] "Fri Aug 16 21:43:39 2019"
sessionInfo()
## R version 3.5.1 (2018-07-02)
## Platform: x86_64-apple-darwin15.6.0 (64-bit)
## Running under: macOS 10.14.6
##
## Matrix products: default
## BLAS: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/3.5/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.5.1 magrittr_1.5 tools_3.5.1 htmltools_0.3.6
## [5] yaml_2.2.0 Rcpp_1.0.0 stringi_1.2.4 rmarkdown_1.11
## [9] knitr_1.21 stringr_1.3.1 xfun_0.4 digest_0.6.18
## [13] evaluate_0.12
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(readtext)
## Warning: package 'readtext' was built under R version 3.5.2
library(quanteda)
## Warning: package 'quanteda' was built under R version 3.5.2
## Package version: 1.4.3
## 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(stringr)
Data <- readtext("../AllTexts"
, docvarsfrom = "filepaths"
, dvsep = "[/]")
Data <- select(Data, doc_id, text, group = docvar3) #Можно сразу переименовать колонку
Сохраняю названия на всякий случай, но в таблице делаю короткий вариант
filenames <- data.frame(names = Data$doc_id
, docId = paste0(Data$group, 1:length(Data$group))
, stringsAsFactors = FALSE)
Data$doc_id <- filenames$docId
Corpus <- corpus(Data)
CorpusSummary <- summary(Corpus, n = 10000)
CorpusSummary
## Corpus consisting of 226 documents:
##
## Text Types Tokens Sentences group
## Bio1 592 1004 58 Bio
## Bio2 496 927 44 Bio
## Bio3 373 679 22 Bio
## Bio4 370 639 35 Bio
## Bio5 546 949 58 Bio
## Bio6 658 1303 38 Bio
## Bio7 581 1112 42 Bio
## Bio8 395 775 30 Bio
## Bio9 465 775 44 Bio
## Bio10 691 1239 68 Bio
## Bio11 471 896 54 Bio
## Bio12 517 1006 66 Bio
## Bio13 340 563 32 Bio
## Bio14 473 776 40 Bio
## Bio15 396 715 57 Bio
## Bio16 284 469 18 Bio
## Bio17 385 614 32 Bio
## Bio18 352 589 43 Bio
## Bio19 317 674 25 Bio
## Bio20 428 733 48 Bio
## Bio21 395 693 38 Bio
## Bio22 504 915 45 Bio
## Bio23 543 1019 66 Bio
## Bio24 412 741 39 Bio
## Bio25 407 640 33 Bio
## Bio26 519 871 50 Bio
## Bio27 322 591 30 Bio
## Bio28 366 608 38 Bio
## Bio29 435 780 43 Bio
## Chem30 246 422 22 Chem
## Chem31 544 878 35 Chem
## Chem32 479 824 45 Chem
## Chem33 356 596 38 Chem
## Chem34 482 875 54 Chem
## Chem35 620 1051 51 Chem
## Chem36 803 1598 85 Chem
## Chem37 385 743 45 Chem
## Chem38 253 410 19 Chem
## Chem39 282 439 31 Chem
## Chem40 415 725 36 Chem
## Chem41 290 506 21 Chem
## Chem42 301 508 25 Chem
## Chem43 356 634 35 Chem
## Chem44 357 675 37 Chem
## Chem45 571 970 57 Chem
## Chem46 331 554 29 Chem
## Chem47 267 480 36 Chem
## Chem48 524 836 39 Chem
## Chem49 652 1368 72 Chem
## Chem50 434 901 52 Chem
## Chem51 394 788 48 Chem
## IDOR52 514 1158 50 IDOR
## IDOR53 616 1254 93 IDOR
## IDOR54 430 749 36 IDOR
## IDOR55 346 614 43 IDOR
## IDOR56 434 768 39 IDOR
## IDOR57 538 1038 61 IDOR
## IDOR58 579 1181 63 IDOR
## IDOR59 466 823 51 IDOR
## IDOR60 480 833 48 IDOR
## IDOR61 569 1005 76 IDOR
## IDOR62 592 1058 53 IDOR
## IDOR63 412 747 31 IDOR
## IDOR64 422 690 38 IDOR
## IDOR65 398 722 37 IDOR
## IDOR66 405 711 48 IDOR
## IDOR67 553 995 52 IDOR
## IDOR68 723 1360 86 IDOR
## IDOR69 457 804 39 IDOR
## IDOR70 350 735 41 IDOR
## IDOR71 521 851 43 IDOR
## IDOR72 529 1086 39 IDOR
## IDOR73 524 977 58 IDOR
## IDOR74 485 839 46 IDOR
## IDOR75 580 1081 57 IDOR
## IDOR76 642 1238 64 IDOR
## IDOR77 402 689 42 IDOR
## IDOR78 470 761 40 IDOR
## IDOR79 477 824 45 IDOR
## IDOR80 583 1011 49 IDOR
## IDOR81 496 810 38 IDOR
## IDOR82 378 690 29 IDOR
## IDOR83 432 803 38 IDOR
## IDOR84 525 927 57 IDOR
## IDOR85 357 542 25 IDOR
## IDOR86 483 786 38 IDOR
## IDOR87 430 707 30 IDOR
## IDOR88 463 905 32 IDOR
## IDOR89 253 471 32 IDOR
## IDOR90 414 695 37 IDOR
## IDOR91 511 955 57 IDOR
## IDOR92 512 1057 40 IDOR
## IDOR93 524 967 54 IDOR
## IDOR94 494 835 35 IDOR
## IDOR95 592 1028 65 IDOR
## IDOR96 387 738 36 IDOR
## IDOR97 452 738 35 IDOR
## IDOR98 400 753 38 IDOR
## IDOR99 489 976 31 IDOR
## IDOR100 516 909 44 IDOR
## IDOR101 402 701 33 IDOR
## IDOR102 403 679 47 IDOR
## IDOR103 510 917 53 IDOR
## IDOR104 581 1075 35 IDOR
## IDOR105 479 855 48 IDOR
## IDOR106 511 949 50 IDOR
## IDOR107 555 929 62 IDOR
## IDOR108 729 1436 60 IDOR
## IDOR109 417 760 53 IDOR
## IDOR110 479 1059 31 IDOR
## IDOR111 392 698 20 IDOR
## IDOR112 511 914 49 IDOR
## IDOR113 425 773 42 IDOR
## IDOR114 434 842 48 IDOR
## IDOR115 466 836 53 IDOR
## IDOR116 454 782 25 IDOR
## IDOR117 403 709 36 IDOR
## IDOR118 474 851 45 IDOR
## IDOR119 389 685 38 IDOR
## IDOR120 495 1023 45 IDOR
## IDOR121 510 1026 58 IDOR
## IDOR122 467 848 54 IDOR
## IDOR123 487 891 45 IDOR
## IDOR124 484 928 44 IDOR
## IDOR125 418 1014 82 IDOR
## IDOR126 602 1191 47 IDOR
## IDOR127 489 900 58 IDOR
## IDOR128 502 845 37 IDOR
## IDOR129 339 579 37 IDOR
## IDOR130 636 1212 59 IDOR
## IDOR131 421 715 40 IDOR
## IDOR132 397 668 36 IDOR
## IDOR133 308 510 33 IDOR
## IDOR134 417 722 29 IDOR
## IDOR135 309 494 16 IDOR
## IDOR136 384 754 53 IDOR
## IDOR137 320 578 39 IDOR
## IDOR138 495 859 55 IDOR
## IDOR139 406 668 22 IDOR
## IDOR140 413 657 35 IDOR
## IDOR141 537 949 63 IDOR
## IDOR142 536 1071 67 IDOR
## IDOR143 473 897 53 IDOR
## IDOR144 644 1282 57 IDOR
## IDOR145 455 796 37 IDOR
## IDOR146 445 777 43 IDOR
## IDOR147 616 1105 64 IDOR
## IDOR148 486 759 20 IDOR
## IDOR149 425 731 29 IDOR
## IDOR150 452 769 36 IDOR
## IDOR151 400 695 39 IDOR
## IDOR152 549 1019 65 IDOR
## IDOR153 432 782 29 IDOR
## IDOR154 482 827 41 IDOR
## IDOR155 573 984 53 IDOR
## IDOR156 806 1454 91 IDOR
## IDOR157 443 841 48 IDOR
## IDOR158 410 698 28 IDOR
## IDOR159 462 915 69 IDOR
## IDOR160 559 1001 57 IDOR
## IDOR161 666 1242 88 IDOR
## IDOR162 332 524 27 IDOR
## IDOR163 578 1167 46 IDOR
## IDOR164 607 1293 68 IDOR
## IDOR165 468 871 38 IDOR
## IDOR166 414 764 35 IDOR
## IDOR167 509 903 64 IDOR
## IDOR168 472 989 54 IDOR
## IDOR169 556 934 60 IDOR
## IDOR170 540 1074 41 IDOR
## IDOR171 642 1310 65 IDOR
## IDOR172 472 879 43 IDOR
## IDOR173 579 969 49 IDOR
## IDOR174 451 801 21 IDOR
## IDOR175 386 621 35 IDOR
## IDOR176 806 1486 85 IDOR
## IDOR177 488 916 52 IDOR
## IDOR178 830 1572 92 IDOR
## IDOR179 654 1142 72 IDOR
## IDOR180 470 796 37 IDOR
## IDOR181 427 779 24 IDOR
## IP16-10182 333 529 31 IP16-10
## IP16-10183 397 767 64 IP16-10
## IP16-10184 418 688 38 IP16-10
## IP16-10185 308 496 34 IP16-10
## IP16-10186 497 834 49 IP16-10
## IP16-10187 485 946 37 IP16-10
## IP16-10188 400 708 33 IP16-10
## IP16-10189 476 804 46 IP16-10
## IP16-10190 432 782 40 IP16-10
## IP16-10191 488 947 48 IP16-10
## IP16-10192 473 833 44 IP16-10
## IP16-10193 426 725 47 IP16-10
## IP16-10194 434 727 47 IP16-10
## IP18-42195 482 799 44 IP18-42
## IP18-42196 435 857 55 IP18-42
## IP18-42197 359 798 34 IP18-42
## IP18-42198 402 710 19 IP18-42
## IP18-42199 465 830 31 IP18-42
## IP18-42200 510 880 46 IP18-42
## IP18-42201 524 902 54 IP18-42
## IP18-42202 879 2015 202 IP18-42
## IP18-42203 487 787 35 IP18-42
## IP18-42204 779 1320 87 IP18-42
## IP18-42205 559 945 56 IP18-42
## IP18-42206 437 796 39 IP18-42
## Sluzh207 348 584 24 Sluzh
## Sluzh208 501 930 54 Sluzh
## Sluzh209 424 722 47 Sluzh
## Sluzh210 382 714 32 Sluzh
## Sluzh211 285 602 25 Sluzh
## Sluzh212 509 875 36 Sluzh
## Sluzh213 454 843 41 Sluzh
## Sluzh214 386 658 40 Sluzh
## Sluzh215 614 1220 98 Sluzh
## Sluzh216 455 807 40 Sluzh
## Sluzh217 370 664 45 Sluzh
## Sluzh218 519 945 48 Sluzh
## Sluzh219 386 814 65 Sluzh
## Sluzh220 503 969 71 Sluzh
## Sluzh221 485 846 47 Sluzh
## Sluzh222 568 1056 41 Sluzh
## Sluzh223 459 753 27 Sluzh
## Sluzh224 525 927 56 Sluzh
## Sluzh225 573 1011 45 Sluzh
## Sluzh226 403 694 39 Sluzh
##
## Source: /Users/Petr001/Documents/Документы/Научные_проекты/ЭКОинструмент/R_script_4.1/Ecoinstrument_4.1/* on x86_64 by Petr001
## Created: Fri Aug 16 21:43:41 2019
## Notes:
summary(CorpusSummary[-1])
## Types Tokens Sentences group
## Min. :246.0 Min. : 410.0 Min. : 16.00 Length:226
## 1st Qu.:402.2 1st Qu.: 714.2 1st Qu.: 36.00 Class :character
## Median :469.0 Median : 828.5 Median : 43.00 Mode :character
## Mean :472.8 Mean : 858.2 Mean : 46.13
## 3rd Qu.:524.0 3rd Qu.: 968.5 3rd Qu.: 54.00
## Max. :879.0 Max. :2015.0 Max. :202.00
table(CorpusSummary$group)
##
## Bio Chem IDOR IP16-10 IP18-42 Sluzh
## 29 22 130 13 12 20
Функция для стемминга -n Построчный режим; каждое слово печатается на новой строке. -c Копировать весь ввод на вывод. То есть, не только слова, но и межсловные промежутки. Опция необходима для возврата к полному представлению текста. В случае построчного вывода (когда задана опция n) межсловные промежутки вытягиваются в одну строку, символы перевода строки заменяются на и/или . Пробел для большей видимости заменяется на подчеркивание. Символ заменяется на \, подчеркивание на _. Таким образом можно однозначно восстановить исходный текст. -w Печатать только словарные слова. -l Не печатать исходные словоформы, только леммы и граммемы. -i Печатать грамматическую информацию, расшифровка ниже. -g Склеивать информацию словоформ при одной лемме (только при включенной опции -i). -s Печатать маркер конца предложения (только при включенной опции -c). -e Кодировка ввода/вывода. Возможные варианты: cp866, cp1251, koi8-r, utf-8 (по умолчанию). -d Применить контекстное снятие омонимии. –eng-gr Печатать английские обозначения граммем. –filter-gram Строить разборы только с указанными граммемами. –fixlist Использовать файл с пользовательским словарём. –format Формат вывода.Возможные варианты: text, xml, json. Значение по умолчанию — text. –generate-all Генерировать все возможные гипотезы для несловарных слов. –weight Печатать бесконтекстную вероятность леммы.
system2("./mystem", args = "-v") #Вывод версии программы Mystem
mystem <- function(doc, arg, format = "") { # Можно вствить формат вывода
# " --format xml" и " -- format json"
sdoc <- system2("./mystem"
, args = paste0("-", arg, format)
, stdout = TRUE
# TRUE (capture the output
# in a character vector)
, input = doc)
sdoc
}
Части речи
A прилагательное ADV наречие ADVPRO местоименное наречие ANUM числительное-прилагательное APRO местоимение-прилагательное COM часть композита - сложного слова CONJ союз INTJ междометие NUM числительное PART частица PR предлог S существительное SPRO местоимение-существительное V глагол
aTime <- Sys.time()
Data_S <- Data
for (i in 1:length(Data$text)) {
Data_S$text[i] <- paste(mystem(Data$text[i], "cligsd"), collapse = "{\\s}") %>% # Майстем выдает по абзацам - склеиваю абзацы
# добавляю маркеры конца предложения
str_extract_all("([{])(([\\\\а-яa-z]+))([^{}]+)([}])") %>% # Открывающая скобка, один слеш (нужно написать четыре) или буква русская или латинская, один или несколько любых символов кроме скобок, закрывающая скобка
unlist(.) %>%
str_replace("([{])([а-я?-]+)([=])([[:alpha:]]+)([=,])([[:graph:]]*?)()([}])"
, "\\2_\\4") %>%
str_replace("([{])([:graph:]*)([}])", "\\2") %>%
str_c(collapse = " ")
}
bTime <- Sys.time()
bTime - aTime
## Time difference of 4.786082 mins
#Data_S$text[1]
# добавляю конце предложения в разбивку абзацев. Майстем по обзацам выдаёт и нужно объединять
# # . Точка позволяет вствить в другое место pipe operator
Corpus_S <- corpus(Data_S)
CorpusSummary_S <- summary(Corpus_S, n = 1000)
#CorpusSummary_S[-1]
summary(CorpusSummary_S[-1])
## Types Tokens Sentences group
## Min. :194.0 Min. : 387.0 Min. : 1.000 Length:226
## 1st Qu.:315.0 1st Qu.: 666.8 1st Qu.: 1.000 Class :character
## Median :361.0 Median : 779.0 Median : 2.000 Mode :character
## Mean :367.2 Mean : 817.6 Mean : 2.903
## 3rd Qu.:407.0 3rd Qu.: 926.8 3rd Qu.: 3.000
## Max. :650.0 Max. :2188.0 Max. :31.000
table(CorpusSummary$group)
##
## Bio Chem IDOR IP16-10 IP18-42 Sluzh
## 29 22 130 13 12 20
save(Corpus, file = "Corpus.RData")
save(Corpus_S, file = "Corpus_S.RData")