Как видно из учебника , чтобы иметь такой результат, у вас должен быть лексикон, то есть «словарь», который дает вам, если слово положительное или отрицательное. Имея эту информацию, вы можете использовать ее, чтобы раскрасить ваше облако слов.
Мы можем прокомментировать красивый пример по ссылке:
library(janeaustenr)
library(dplyr)
library(stringr)
# here we tidy up the corpus, all the J.Austen books, having them cleaned and as result, a tibble with words.
tidy_books <- austen_books() %>%
group_by(book) %>%
mutate(linenumber = row_number(),
chapter = cumsum(str_detect(text, regex("^chapter [\\divxlc]",
ignore_case = TRUE)))) %>%
ungroup() %>%
unnest_tokens(word, text)
library(wordcloud)
library(reshape2)
Как уже говорилось, вам нужен лексикон. Ссылка говорит о различной лексике, в данном случае используется bing
:
get_sentiments("bing")
# A tibble: 6,788 x 2
word sentiment
<chr> <chr>
1 2-faced negative
2 2-faces negative
3 a+ positive
4 abnormal negative
5 abolish negative
6 abominable negative
7 abominably negative
8 abominate negative
9 abomination negative
10 abort negative
# ... with 6,778 more rows
Теперь, соединяя каждое слово tidy_books
(корпус) и bing
(лексика), мы можем дать положительное или отрицательное значение каждому слову:
library(wordcloud)
library(reshape2)
tidy_books %>%
inner_join(get_sentiments("bing")) %>%
count(word, sentiment, sort = TRUE) %>%
acast(word ~ sentiment, value.var = "n", fill = 0) %>%
comparison.cloud(colors = c("gray20", "gray80"),
max.words = 100)
И вы получите желаемый результат. Очевидно, вы должны согнуть это к своим данным, которых у меня нет.
EDIT :
Согнутое в вашем случае, мы можем сделать это:
# take all the phrases
docs1 <-tibble(phrases =docs$content)
# add an id, from 1 to n
docs1$ID <- row.names(docs1)
# split all the words
tidy_docs <- docs1 %>% unnest_tokens(word, phrases)
#create now the cloud: a pair of warnings, because you do not have negative words and it is joining by word(correct)
tidy_docs %>%
inner_join(get_sentiments("bing")) %>%
count(word, sentiment, sort = TRUE) %>%
acast(word ~ sentiment, value.var = "n", fill = 0) %>%
comparison.cloud(colors = c("gray20", "gray80"),
max.words = 100)