Немного об анализе текста в R. Нижеприведенный код разбирает текст (вектор mydata содержит название тем диссертаций) на слова, выделяет корни, строит частотную матрицу слов и выводит в файл картинку.
Версия с перекодировкой в UTF8. Работает под Windows и MacOS.
Код:
plot.wordcloud<-function(mydata) {
library(tm)
library(wordcloud)
library(RColorBrewer)
library(SnowballC)
strsplit_space_tokenizer <- function(x) unlist(strsplit(x, "[[:space:]]+"))
# Надо преобразовать
temp.x<-enc2utf8(tolower(paste(as.vector(mydata),collapse = " ")))
ds <- DataframeSource(data.frame(temp.x),encoding ="UTF8")
xkcd.corpus <- Corpus(ds,readerControl = list(reader = readPlain, language = "ru"))
xkcd.corpus <- tm_map(xkcd.corpus, removePunctuation)
xkcd.corpus<- tm_map(xkcd.corpus, removeWords, stopwords("russian"))
xkcd.corpus <- tm_map(xkcd.corpus, stemDocument, language = "russian")
xkcd.corpus <- tm_map(xkcd.corpus, stripWhitespace)
tdm <- TermDocumentMatrix(xkcd.corpus,control = list(tokenize=strsplit_space_tokenizer))
m <- as.matrix(tdm)
v <- sort(rowSums(m),decreasing=TRUE)
d <- data.frame(word = names(v),freq=v)
pal <- brewer.pal(9, "BuGn")
pal <- pal[-(1:2)]
pal2 <- brewer.pal(8,"Dark2")
png("wordcloud.png", width=1000,height=1000)
wordcloud(d$word,d$freq, scale=c(8,.2),min.freq=3,
max.words=Inf, random.order=FALSE, rot.per=.15, colors=pal2)
dev.off()
return(xkcd.corpus)
}
Во вложении находится архив, содержащий данные о всех диссертациях, которые находятся на сайте ВАК с 2011 года.
При желании, с этим файлом можно делать что угодно.
Загрузка в R
Код:
# Для MacOS и Linux
dissers<-read.csv2("dissers.csv",header=T,fileEncoding="cp1251",encoding="cp1251")
# Для windows
dissers<-read.csv2("dissers.csv",header=T)
А дальше строим облако для 08 специальности
Код:
plot.wordcloud(subset(dissers,substr(Nspec,1,2)=="08")$diser)