У меня есть таблица данных, составленная из положительных и отрицательных ассоциаций слов.Я хотел бы создать два облака слов, одно для положительных слов и одно для отрицательных слов.
Пример таблицы sentiment_words
:
element_id sentence_id negative positive
1115: 1 1115 limits agree,available
1116: 1 1116 slow strongly,agree
1117: 1 1117 management
1118: 1 1118
1119: 1 1119 concerns strongly,agree,better,
Я использую library(wordcloud)
и library(sentimentr)
Например, как мне извлечь слова из «положительного» столбца, чтобы создать облако слов?Я не уверен, как решить тот факт, что с каждой строкой связано несколько слов (например, «согласен, доступно» следует рассматривать как две записи)
Я предпринял разные попытки для wordcloud()
функция, такая как wordcloud(words = sentiment_words$positive, freq = 3, min.freq = 1, max.words = 200, random.order = FALSE, rot.per=0.35, colors=brewer.pal(8, "Dark2"))
, но она возвращает только облако с термином в первой записи
Редактировать: я попробовал ответ tidyverse
ниже, и я получаю следующий результат:
words n
<chr> <int>
1 " \"ability\"" 3
2 " \"ability\")" 1
3 " \"acceptable\")" 1
4 " \"accomplish\"" 1
5 " \"accomplished\")" 1
6 " \"accountability\"" 1
7 " \"accountability\")" 1
8 " \"accountable\"" 2
9 " \"accountable\")" 1
Я пробовал умножить варианты gsub()
и apply
, чтобы удалить лишние )
и c(
, но пока не нашел ничего, что работает.В результате слова, которые должны быть подсчитаны вместе, считаются отдельно (например, «приемлемый» и «приемлемый)» - это два разных слова в слове «облако»)
Редактировать: чтобы заставить его работать правильно, я имелсначала очистить мой sentiment_words
, как предложено ниже.
for (j in seq(sentiment_words)) {
sentiment_words[[j]] <- gsub("character(0)", "", sentiment_words[[j]])
sentiment_words[[j]] <- gsub('"', "", sentiment_words[[j]])
sentiment_words[[j]] <- gsub("c\\(", "", sentiment_words[[j]])
sentiment_words[[j]] <- gsub(" ", "", sentiment_words[[j]])
sentiment_words[[j]] <- gsub("\\)", "", sentiment_words[[j]])
}
, и мне также пришлось отфильтровать оставшиеся строки «символ (0» в функции count_words
. Обратите внимание, что он фильтрует символ «(0 «а не« символ (0) », потому что я удалил закрывающую скобку выше
filter(!!var != "character(0") %>%
Реализация вышеупомянутого дала самое чистое слово-облако, основанное на полярности текста