Облако слов сентиментальности с использованием R's quanteda? - PullRequest
0 голосов
/ 30 октября 2018

У меня есть набор отзывов (комментарий в словах + рейтинг от 0-10), и я хочу создать облако слов настроения в R, в котором:

  • Размер слова соответствует его частоте.
  • Цвет слова представляет собой средний рейтинг всех отзывов, в которых оно встречается (предпочтительно цветовой градиент зелено-желто-красный)

Я использовал quanteda для создания dfm комментариев. Теперь я думаю, что хочу использовать функцию textplot_wordcloud, и мне нужно сделать следующее:

  1. Для каждого слова получите все отзывы, которые появились в
  2. Рассчитать средний рейтинг этого подмножества отзывов
  3. Разделите на 10 для масштабирования до 0-1 и присвойте это значение этому слову
  4. Сортировка слов по средней оценке (чтобы цвета были назначены правильно?)
  5. Используйте color=RColorBrewer::brewer.pal(11, "RdYlGn") для расчета цветов по средним рейтингам

У меня проблемы с шагами 1 и 4. Остальное должно быть выполнимо. Может кто-нибудь объяснить, как легко можно читать dfm, манипулируя им?

1 Ответ

0 голосов
/ 30 октября 2018

Я нашел эффективный способ сделать это с помощью умножения матриц: в основном функциональность равна sw = sd * C / Nw, где:

  • sw = настроение на слово
  • sd = рейтинги за документ
  • C = частотная матрица слов для каждого документа
  • Nw = количество вхождений в слове

В коде:

# create the necessary variables
sd <- as.integer(df$rating)
C <- as.matrix(my_dfm)
Nw <- as.integer(colSums(C))

# calculate the word sentiment
sw <- as.integer(s_d %*% C) / n_w

# normalize the word sentiment to values between 0 and 1
sw <- (sw - min(sw)) / (max(sw) - min(sw)

# make a function that converts a sentiment value to a color
num_to_color <- seq_gradient_pal(low="#FF0000", high="#00FF00")

# apply the function to the sentiment values
word_colors <- num_to_color(sw)

# create a new window; 
# before executing the next command, manually maximize in order to get a better readable wordcloud
dev.new()

# create the wordcloud with the calculated color values
textplot_wordcloud(my_dfm, color=word_colors)
...