Показать сообщение отдельно
Старый 14.12.2013, 00:59   #51
Hogfather
Platinum Member
 
Аватар для Hogfather
 
Регистрация: 22.07.2010
Адрес: Санкт-Петербург
Сообщений: 3,286
По умолчанию

Немного об анализе текста в 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)
Картинка
Вложения
Тип файла: zip dissers.zip (1.91 Мб, 13 просмотров)

Последний раз редактировалось Hogfather; 17.12.2013 в 22:46. Причина: Окончательная версия, работающая на всех машинах
---------
DNF is not an option
Hogfather вне форума   Ответить с цитированием
Реклама