Облако слов в R с несколькими словами и специальными символами - PullRequest
0 голосов
/ 19 ноября 2018

Я хочу создать облако слов с R. Я хочу визуализировать появление имен переменных, которые могут состоять из более чем одного слова, а также специальных символов и чисел, например, одно имя переменной - «Дивидендная доходность S & P 500» ».

Имена переменных находятся в текстовом файле и больше не разделяются. Каждая строка текстового файла содержит новое имя переменной.

Я попробовал следующий код, однако имена переменных разбиты на разные символы:

library(tm)
library(SnowballC)
library(wordcloud)
library(RColorBrewer)


# load the text:
text <- readLines("./Overview_used_series.txt")
docs <- Corpus(VectorSource(text))
inspect(docs)

# build a term-document matrix:
tdm <- TermDocumentMatrix(docs)
m <- as.matrix(tdm)
v <- sort(rowSums(m),decreasing=TRUE)
d <- data.frame(word = names(v),freq=v)
head(d, 10)


# generate the wordcloud:
pdf("Word cloud.pdf")
wordcloud(words = d$word, freq = d$freq, min.freq = 1,
      max.words=200, random.order=FALSE, rot.per=0.35, 
      colors=brewer.pal(8, "Dark2"))
dev.off()

Как мне обращаться с именами переменных, чтобы они отображались в wordcloud с их исходными именами, как в текстовом файле?

1 Ответ

0 голосов
/ 19 ноября 2018

Если у вас есть файл, который вы указали с именем переменной в строке, вам не нужно использовать tm. Вы можете легко создать свою собственную таблицу частоты слов для использования в качестве входных данных. При использовании tm он будет разбивать слова на основе пробела и не будет уважать имена ваших переменных.

Начиная с момента загрузки текста, просто создайте data.frame с частотой, равной 1, а затем вы можете просто агрегировать все. wordcloud также принимает data.frame, как это, и вы можете просто создать Wordcloud из этого. Обратите внимание, что я немного скорректировал масштаб, потому что когда у вас длинные имена переменных, они могут не печататься. Когда это произойдет, вы получите предупреждение.

Я не вставляю полученное изображение.

#text <- readLines("./Overview_used_series.txt")
text <- c("S & P 500 dividend yield", "S & P 500 dividend yield", "S & P 500 dividend yield", 
          "visualize ", "occurence ", "variable names", "visualize ", "occurence ", 
          "variable names")

# freq = 1 adds a columns with just 1's for every value.
my_data <- data.frame(text = text, freq = 1, stringsAsFactors = FALSE)

# aggregate the data.    
my_agr <- aggregate(freq ~ ., data = my_data, sum)

wordcloud(words = my_agr$text, freq = my_agr$freq, min.freq = 1,
          max.words=200, random.order=FALSE, rot.per=0.35, 
          colors=brewer.pal(8, "Dark2"), scale = c(2, .5))
...