R/sentiment.wordfreq.R

Defines functions sentiment.wordfreq

Documented in sentiment.wordfreq

#' @title rSentiment Word Frequency
#' @description Blank Description.
#' @param s NRC Sentiment Data
#' @param n Name
#' @keywords package
#' @return NULL
#' @export
#' @examples sentiment.wordfreq()
#' sentiment.wordfreq(nk.tweets, nk.name)

sentiment.wordfreq <- function(s, n, rw) {

if('tidytext' %in% rownames(installed.packages()) == TRUE) {
require(tidytext)} else {
install.packages("tidytext", repos = "http://cran.us.r-project.org")	
require(tidytext)}

if('textdata' %in% rownames(installed.packages()) == TRUE) {
require(textdata)} else {
install.packages("textdata", repos = "http://cran.us.r-project.org")	
require(textdata)}

if('dplyr' %in% rownames(installed.packages()) == TRUE) {
require(dplyr)} else {
install.packages("dplyr", repos = "http://cran.us.r-project.org")	
require(dplyr)}

if('ggrepel' %in% rownames(installed.packages()) == TRUE) {
require(ggrepel)} else {
install.packages("ggrepel", repos = "http://cran.us.r-project.org")	
require(ggrepel)}

# Make New Data from Input

nk.tidy <- s
nk.name <- n
rw <- NA
nk.remove.words <- rw

theme.sentiment <- function() {theme(
	plot.title = element_text(hjust = 0.5), legend.position = "none",
	axis.text.x = element_blank(), axis.ticks = element_blank(),
	panel.grid.major = element_blank(), panel.grid.minor = element_blank())}

nk.tidy <- nk.tweets %>%
	#Unnest - Break the text into individual words
	unnest_tokens(word, text) %>%
	#Remove undesirables
	filter(!word %in% nk.remove.words) %>%
	# Remove words with less than 3 characters (an, is)
	filter(!nchar(word) < 3) %>%
	# Stop words provided by tidytext package
	anti_join(stop_words)
# glimpse(nk.tidy)  
 
nk.nrc <- nk.tidy %>% inner_join(get_sentiments("nrc")) 

nk.sentiment.word.freq <- nk.nrc %>% group_by(sentiment) %>% 
	count(word, sort = TRUE) %>% arrange(desc(n)) %>% slice(seq_len(8)) %>% ungroup()

nk.sentiment.word.freq.plot <- nk.sentiment.word.freq %>%
	ggplot(aes(word, 1, label = word, fill = sentiment )) +
	geom_point(color = "transparent") +
	geom_label_repel(force = 1,nudge_y = .5,  direction = "y",
		box.padding = 0.04, segment.color = "transparent", size = 3) +
	facet_grid(~sentiment) +
	theme.sentiment() +
	theme(axis.text.y = element_blank(), axis.text.x = element_blank(),
		axis.title.x = element_text(size = 6),
        panel.grid = element_blank(), panel.background = element_blank(),
        panel.border = element_rect("lightgray", fill = NA),
        strip.text.x = element_text(size = 9)) +
	xlab(NULL) + ylab(NULL) +
	ggtitle(paste("Top Words per Emotion for Query", nk.name)) +
	coord_flip()
nk.sentiment.word.freq.plot

return(nk.sentiment.word.freq.plot)

}
sabalicodev/sabali documentation built on Jan. 13, 2020, 2:22 p.m.