- Mineração de opinião e análise de sentimentos são as técnicas mais usadas de mineração de texto em rede social.
- Dar uma ideia geral e comentar as limitações.
- Apresentar os conjuntos léxicos de sentimentos.
- Fazer uma aplicação simples.
07 de dezembro de 2018
#-----------------------------------------------------------------------
# Lendo o dicionário léxico de sentimentos.
sent <- read.table("oplexicon_v3.0/lexico_v3.0.txt",
header = FALSE,
sep = ",",
quote = "",
stringsAsFactors = FALSE)
names(sent) <- c("term", "class", "pol", "ann")
xtabs(~class + pol, data = sent)
## pol ## class -1 0 1 ## adj 12825 6226 5424 ## emot 45 9 12 ## vb 1297 2761 2831 ## vb adj 15 0 59 ## vb adv 4 0 18 ## vb det n prp 41 0 62 ## vb n prp 28 0 63
#-----------------------------------------------------------------------
# Lendo opiniões sobre Capitão América: Gerra Civil na Google Play.
library(XML)
# `pg` é a página tirada da Google Play com o RSelenium.
load("./scripts/Captain_America_Civil_War.RData")
doc <- htmlParse(pg)
path <- paste0("//div[@class = 'single-review']",
"/div[@class = 'review-body with-review-wrapper']")
# Extrai os reviews.
reviews <- xpathSApply(doc,
path = path,
fun = xmlValue)
# Conserta problema de encoding. Deveria ser consertado na leitura.
reviews <- iconv(reviews, to = "iso-8859-1")
# Considerar apenas as primeiras opiniões.
rev <- reviews[1:20]
#-----------------------------------------------------------------------
# Criando o Corpus.
library(tm)
cps <- VCorpus(VectorSource(rev),
readerControl = list(language = "pt"))
cps
## <<VCorpus>> ## Metadata: corpus specific: 0, document level (indexed): 0 ## Content: documents: 20
replacePunctuation <- content_transformer(
function(x) {gsub("[[:punct:]]"," ", x)})
# Fazendo as operações de limpeza.
cps <- tm_map(cps, FUN = content_transformer(tolower))
cps <- tm_map(cps, FUN = replacePunctuation)
cps <- tm_map(cps, FUN = removeNumbers)
cps <- tm_map(cps, FUN = stripWhitespace)
# Criada com o vocabulário existente no corpus. dtm_cor <- DocumentTermMatrix(cps) dtm_cor
## <<DocumentTermMatrix (documents: 20, terms: 415)>> ## Non-/sparse entries: 695/7605 ## Sparsity : 92% ## Maximal term length: 17 ## Weighting : term frequency (tf)
# Criada com o vocabulário do dicionário.
dtm_dic <- DocumentTermMatrix(cps,
control = list(dictionary = sent$term))
dtm_dic
## <<DocumentTermMatrix (documents: 20, terms: 31648)>> ## Non-/sparse entries: 169/632791 ## Sparsity : 100% ## Maximal term length: 25 ## Weighting : term frequency (tf)
# A intersecção entre os termos do corpus e do dicionário.
inter <- intersect(x = Terms(dtm_cor),
y = sent$term[sent$pol != 0])
# length(inter)
# Obter o vetor de polaridades associada aos termos na matriz.
lex <- merge(x = data.frame(term = inter,
stringsAsFactors = FALSE),
y = sent,
sort = FALSE)
# str(lex)
# Remover os termos na DTM que não tem polaridade atribuida.
m <- as.matrix(dtm_cor)
m <- m[, lex$term]
# Verifica dimensões e disposição.
all.equal(colnames(m), lex$term)
## [1] TRUE
# Média aritmética das polaridades por termo em cada documento. pol <- (m %*% cbind(lex$pol))/rowSums(m) fra <- sapply(lapply(rev, strwrap, width = 60), "[[", 1) knitr::kable(data.frame(Polaridade = pol, Fragmento = fra))
| Polaridade | Fragmento |
|---|---|
| 0.0000000 | Mais um do mesmo de sempre da Marvel É divertido, porém |
| -0.0909091 | Capitão América Depois dos eventos de Vingadores: Era de |
| -0.2000000 | Depois dos eventos de Vingadores: Era de Ultron, 'Capitão |
| -0.2000000 | À s Boa dia tia Boa dia tia Marly tá bem ele fica brecopada |
| 0.5555556 | Reinaldo junior Gente adorei o filme guerra civil. Só |
| 0.1428571 | Muito esperado! Já adicionei a minha coleção de filmes da |
| 1.0000000 | Galera da uma Passadinha no meu Canal GALERA EU TÓ |
| -0.2500000 | Como sempre "diálogos que não levam a lugar nenhum" roteiro |
| 1.0000000 | Muito bom uito bom Eu mexendo muito bom naquela que aparece |
| 0.1428571 | Sem dúvidas o melhor filme de 'CAPITÃO AMÉRICA' Não é por |
| 0.0000000 | Razoável Reúne toda a liga, mas é um pco cansativo, |
| 0.6000000 | Essa filme é o Melhor Filme de 2016 O filme prometeu oque |
| 1.0000000 | Adorei Sério esse filme é muito bom meu time ganhou torçi |
| -0.2000000 | Médio Motivo da briga entre o capitão e homem de ferro é |
| -0.3333333 | Absurdo! Que absurdo cobrar R$15,00 no aluguel de um filme, |
| 0.5000000 | Eu adorei É um verdadeiro filme de ação é incrível de 0 a |
| 0.5000000 | Muito bom Sinceramente esse é um filme muito bom da |
| 1.0000000 | Team Stark!! Amoooooooo! Fã das HQs e agora ver tudo isso |
| -0.3333333 | Nilton almeida de fritas Eu tenho a coleção dos vingadores |
| -0.3333333 | Não muito bom Sério não compre esta muito caro esse filme |
amoooo e expressões coloquiais?