Introdução

O avanço das tecnologias e o surgimento das redes sociais, smartphones e tablets, tornam os videogames ainda mais populares e acessíveis a diversos públicos. O número de jogadores em todo o mundo ainda está aumentando e ultrapassará três bilhões até 2023. O mercado global de videogames deve gerar cerca de $159,3 bilhões em 2020, com um aumento anual de +9,3% (NewZoo 2020).

Para ter sucesso neste mercado competitivo, um desenvolvedor de jogos precisa saber os motivos que levam os clientes a jogar um determinado jogo e entender como manter seus jogadores envolvidos. Com a popularização da internet obter essas informações se tornou mais fácil, jogadores podem expressar sua opinião de forma livre, fornecendo feedbacks e análises que podem ser acessados por meio de redes sociais e plataformas de jogos.

Os comentários sobre jogos são uma fonte rica de opiniões e sentimentos do usuário, dando a outros jogadores uma ideia sobre o que esperar do jogo e influenciando de forma significativa a decisão de compra (Livingston, Nacke, and Mandryk 2011). Conforme relatado na literatura, os sentimentos expressos pelos usuários sobre diferentes aspectos do jogo têm forte correlação com a aceitação do jogo pelo usuário (A. Vieira and Brandão 2019; Strååt and Verhagen 2017).

Neste contexto, abordagens de análise de sentimento foram recentemente adotadas para avaliar a aceitação de videogames pelos usuários (A. Vieira and Brandão 2019; A. de C. Vieira and Brandão 2019; Chaves 2019). A Análise de Sentimentos (AS) é um processo automatizado que usa Inteligência Artificial para analisar documentos textuais e identificar sentimentos e opiniões. Por meio de abordagens AS, é possível explorar os comentários de jogos automaticamente, identificando as taxas de aceitação do usuário contidas nessas análises. Quando um comentário expressa sentimentos e opiniões positivas, isso significa que o jogo é bem aceito. Os comentários negativos permitem que a equipe de desenvolvimento de jogos saiba quais são considerados, por alguns usuários, os pontos mais fracos de um jogo, orientando futuras decisões de design de jogos e melhorias.

Neste trabalho, comentários de jogos extraídos da Plataforma Steam são analisados usando técnicas de processamento de linguagem natural, buscando entender as características dos documentos que expressão sentimentos positivos e negativos e avaliar pontos significativos levantados pelos jogadores a respeito de diversos aspectos dos jogos.

Pacotes Requeridos

#install.packages("dplyr")
#install.packages("DT")
#install.packages("tm")
#install.packages("textreuse")
#install.packages("stylo")
#install.packages("wordcloud")
#install.packages("RColorBrewer")

library(wordcloud)
## Loading required package: RColorBrewer
library(RColorBrewer)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(DT)
library(tm)
## Loading required package: NLP
library(stylo)
## Warning in fun(libname, pkgname): couldn't connect to display ":0"
## 
## ### stylo version: 0.7.3 ###
## 
## If you plan to cite this software (please do!), use the following reference:
##     Eder, M., Rybicki, J. and Kestemont, M. (2016). Stylometry with R:
##     a package for computational text analysis. R Journal 8(1): 107-121.
##     <https://journal.r-project.org/archive/2016/RJ-2016-007/index.html>
## 
## To get full BibTeX entry, type: citation("stylo")
library(textreuse)

Preparação dos Dados

O conjunto de dados adotado neste trabalho é composto por análises de jogos extraídas da Steam usando sua API Web. Essas análises, todas em português do Brasil, expressam o que os jogadores pensam e como se sentem sobre os jogos. Além das análises, é extraída ainda a avaliação dada pelo jogador para o jogo. Essa avaliação é dada através de uma funcionalidade da plataforma que permite ao jogador recomendar ou não o jogo avaliado. Exemplos de comentários da Steam podem ser vistos nas imagens abaixo.

Recomendado Não Recomendado

O conjunto de dados está disponível em um repositório público, sem nenhum processamento para dar aos pesquisadores a liberdade de escolher quais etapas de pré-processamento são mais adequadas às suas pesquisas.

Carregando os dados

A base de dados está disposta em dois arquivos de texto: pos e neg, que contém os comentários com polaridade positiva e negativa, respectivamente. Nos arquivos, cada linha equivale a um comentário. Essas linhas são lidas através do comando readLines e carregadas em um dataframe. Através da função mutate do pacote dplyr, a polaridade do comentário é adicionado ao dataframe, (1 para comentários positivos e 0 para os negativos). Todo o código para leitura da base de dados pode ser visto abaixo.

pos <- data.frame(text=readLines("pos_sample"))
pos <- mutate(pos, class=1)

neg <- data.frame(text=readLines("neg_sample"))
neg <- mutate(neg, class=0)

data <- rbind(pos, neg)

set.seed(42)
data <- data[sample(nrow(data)),]
data_size <- nrow(data)
n_words <- length(unique(tokenize_words(paste(data$text, sep = " ", collapse = " "))))

Visualização dos Dados

A base de dados carregada é composta por 200 documentos entre comentários positivos e negativos, com 3331 palavras únicas. A base de dados pode ser vista na tabela abaixo. Para fins de melhor visualização, os comentários com mais de 200 caracteres foram filtrados.

datatable(filter(data, nchar(text) < 200), rownames = F)

Preprocessamento

Uma das etapas mais fundamentais na classificação de textos é o pré-processamento dos documentos textuais, que inclui a limpeza dos dados textuais, que removerá informações irrelevantes e quaisquer outros ruídos que possam piorar o entendimento e análise dos documentos. Para ilustrar cada etapa do préprocessamento, um comentário significativo foi selecionado para demonstrar o efeito de cada um dos passos executados:

text class
25 ao Team Fortress 2. Depois de 9 anos em desenvolvimento, nós temos um jogo incrível que rende boas horas de diversão. 1

Neste trabalho, as seguintes etapas foram realizadas para o pré-processamento dos dados.

Conversão de Letras para Minúsculas

Uma abordagem básica no pré-processamento de textos e de grande impacto, foi adotada neste trabalho: a conversão de todas as letras maiúsculas dos documentos em minúsculas. Essa conversão elimina o problema de termos que, apesar de iguais, são considerados diferentes por algoritmos, como “jogo” e “Jogo”.

data$text <- sapply(data$text, tolower)
text class
25 ao team fortress 2. depois de 9 anos em desenvolvimento, nós temos um jogo incrível que rende boas horas de diversão. 1

Remoção de Caracteres Especiais

Todos os caracteres especiais dos documentos foram removidos, como pontuação, símbolos e dígitos. No nosso contexto, esses caracteres não são significativos e não indicam polaridade de sentimentos, sendo totalmente descartáveis. Além disso, espaços em brancos desnecessários também são removidos.

removeNumPunct <- function(x){
  x = gsub("[^[:alnum:]]", " ",x)
  return (stripWhitespace(x))
}
data$text <- sapply(data$text, removePunctuation)
data$text <- sapply(data$text, removeNumbers)
data$text <- sapply(data$text,  removeNumPunct)
text class
25 ao team fortress depois de anos em desenvolvimento nós temos um jogo incrível que rende boas horas de diversão 1

Remoção de Stop Words

Stop words são palavras consideradas pouco significativas, que ocorrem com alta frequência em um documento (Kaur and Buttar 2018), como conjunções, determinantes e preposições. A frequência desses termos podem dificultar a análise dos documentos, sendo, por isso, removidos.

data$text <- sapply(data$text,  removeWords, words=stopwords('portuguese'))
data$text <- sapply(data$text,  stripWhitespace)
text class
25 team fortress anos desenvolvimento jogo incrível rende boas horas diversão 1

Por fim, a base de dados já processada conta com um total de 200 documentos e 3131 palavras únicas, contendo dados mais representativos, o que facilitará significativamente a análise dos mesmos.

Análise Exploratória dos Dados

#Filtrando e selecionando os documentos textuais de cada classe
positive_texts <- select(filter(data, class==1), text)
negative_texts <- select(filter(data, class==0), text)

#Unindo documentos textuais
data_pos_string <- paste(positive_texts, sep = " ", collapse = " ")
data_neg_string <- paste(negative_texts, sep = " ", collapse = " ")

#Tokenizando 
BigramTokenizer <- function(x){
return(unlist(lapply(ngrams(words(x), 2), paste, collapse = " "), use.names = FALSE))
}

#Criando Matriz de Termos do Documento
classes = c("Positivo", "Negativo")
corpus_data <- removeNumPunct(c(data_pos_string, data_neg_string))
corpus <- VCorpus(VectorSource(corpus_data))
tdm <- TermDocumentMatrix(corpus, control = list(tokenize = BigramTokenizer))
tdm_clean <- as.matrix(removeSparseTerms(tdm, 0.8))
colnames(tdm_clean) <- classes

#Gerando nuvem de palavras
comparison.cloud(tdm_clean,max.words=300,random.order=FALSE,scale=c(2,.3), title.size=1.4)

Referências

Chaves, Francisco Miguel Duarte Pinheiro Ramos. 2019. “Video Game Success and Consumer Acceptance: A Sentiment Classification of Gamer Reviews.” PhD thesis.

Kaur, Jashanjot, and P Kaur Buttar. 2018. “A Systematic Review on Stopword Removal Algorithms.” Int. J. Futur. Revolut. Comput. Sci. Commun. Eng 4 (4).

Livingston, Ian, Lennart Nacke, and Regan Mandryk. 2011. “The Impact of Negative Game Reviews and User Comments on Player Experience.” Proceedings - Sandbox 2011: ACM SIGGRAPH Video Game, August. https://doi.org/10.1145/2037692.2037697.

Strååt, Björn, and Harko Verhagen. 2017. “Using User Created Game Reviews for Sentiment Analysis: A Method for Researching User Attitudes.” In GHITALY@ Chitaly.

Vieira, Augusto, and Wladmir Brandão. 2019. “Evaluating Acceptance of Video Games Using Convolutional Neural Networks for Sentiment Analysis of User Reviews.” In Proceedings of the 30th Acm Conference on Hypertext and Social Media, 273–74.

Vieira, Augusto de Castro, and Wladmir Cardoso Brandão. 2019. “GA-Eval: A Neural Network Based Approach to Evaluate Video Games Acceptance.” In Proceedings of the 18th Brazilian Symposium on Computer Games and Digital Entertainment, 595–98. SBGAMES’19. Rio de Janeiro, Brazil.