Mineração de Textos no R

João Marcos

13 de junho de 2016

Mineração de Textos

Mineração de textos (Text Mining) é um Processo de Descoberta de Conhecimento, que utiliza técnicas de análise e extração de dados a partir de textos, frases ou apenas palavras.

Tipos de Texto

Os dados estruturados são organizados em linhas e colunas, geralmente são encontrados em banco de dados relacionais, são eficientes quanto à recuperação e processamento.

Os dados não estruturados referem-se a dados que não podem ser organizados em linhas e colunas, como vídeos, comentários em redes sociais e e-mails, entre outros.

Termo Big Data

É termo que descreve o imenso volume de dados – estruturados e não estruturados – que impactam os negócios no dia a dia. Mas o importante não é a quantidade de dados.

imagem ilustrativa

Aplicações Tipicas de Text Mining

Estrutura

A ideia para se trabalhar com os dados em texto.

Banco de dados

Softwares para Mineração de Textos

Exemplo 1

Pronunciamento dos deputados federais antes da votação.

Congresso Nacional na votação do Impeachement

Pacotes Necessários

library(NLP)
library(tm)           #Text Mining
library(RColorBrewer) #Paleta de Cores
library(wordcloud)    #Wordcloud

Mineração de Textos

#Fala dos deputados
dados<-read.csv(file.choose(),head=T,encoding = "UTF-8")
#coloca cada observação em um vetor
vs <- VectorSource(dados$Fala)
#Armazena os vetores em documentos
temp<- Corpus(vs) 
#Coloca tudo em minúsculo
wc_corpus <- tm_map(temp, tolower)
#Tira a pountuação e palavras ruído
wc_corpus <- tm_map(wc_corpus, removePunctuation)
wc_corpus <- tm_map(wc_corpus, removeWords, stopwords('portuguese'))
wc_corpus <- tm_map(wc_corpus, removeWords, c("voto","presidente"))
#Cria a frequência de palavras
wc_corpus <- tm_map(wc_corpus, PlainTextDocument)
td_mtx <- TermDocumentMatrix(wc_corpus, control = list())
v <- sort(rowSums(as.matrix(td_mtx)), decreasing=TRUE) #ordena as palavras
df <- data.frame(word=names(v), freq=v) #organiza um novo banco

Nuvem de Palavras

#Paleta de Cores
pal1 <- brewer.pal(12,"Paired")
pal3 <- brewer.pal(12,"Set3")

WC<- wordcloud(df$word, df$freq, min.freq=40,
          max.words=Inf, random.order=FALSE, 
          rot.per=.15,colors=pal1)

Exemplo 2

Sistema de Métricas declara empate técnico no uso de #naovaitergolpe e #vemprarua.

Publicação do Estadão em 13 de Dezembro de 2015

Fonte: http://politica.estadao.com.br/noticias/geral,twitter-tem-empate-em-guerra-de-hashtags-sobre-impeachment,10000004726

Como resgatar esses twittes ?

  1. Ter uma conta no Twitter
  2. Criar um aplicativo
  3. Chaves de Acesso

Ter um cadastro no Twitter

site: https://twitter.com/

Site do Twitter

Criar um aplicativo

Site: https://twitter.com/settings/applications

Site para criar o aplicativo

Cadastrar esse aplicativo

Página para cadastro do API

Pegar os seguintes códigos

Pagina do aplicativo

Pacotes Necessários

library(ROAuth)
library(bitops)
library(RCurl)
library(twitteR)

Autorizando o R fazer a busca no Twitter

accessSecret="mGacZSmVt9nDzmptEwwXt4QcKtqPDSo85uRkZIgDokhUH"

setup_twitter_oauth(consumerKey,consumerSecret,accessToken,accessSecret)
## [1] "Using direct authentication"

Chamando o #vemprarua para o R

vpr_twiiter <- searchTwitter("vemprarua", n = 1500,lang="pt") #vemprarua

Mineração de Textos

#converte de lista para vetor
vpr_twiiter_text<-sapply(vpr_twiiter, function(x) x$getText())
#coloca cada observação em um vetor
vs <- VectorSource(vpr_twiiter_text)
#Armazena os vetores em documentos
temp<- Corpus(vs) 
#Remove Numeros
wc_corpus <- tm_map(temp, removeNumbers)
#Remove Pontuação
wc_corpus <- tm_map(wc_corpus, removePunctuation)
#Remove Palavras Ruido
wc_corpus <- tm_map(wc_corpus, removeWords, stopwords('portuguese'))

#Coloca tudo em minúsculo
wc_corpus <- tm_map(wc_corpus, tolower)
#remove os twitters
removeURL <- function(x) gsub("http[[:alnum:]]*", "", x) 
wc_corpus <- tm_map(wc_corpus, removeURL)

#Cria a frequência de palavras
wc_corpus <- tm_map(wc_corpus, PlainTextDocument)
td_mtx <- TermDocumentMatrix(wc_corpus, control = list())
v <- sort(rowSums(as.matrix(td_mtx)), decreasing=TRUE) #ordena as palavras
df <- data.frame(word=names(v), freq=v) #organiza um novo banco

Nuvem de Palavras

#Paleta de cores

pal1 <- brewer.pal(12,"Paired")
pal3 <- brewer.pal(12,"Set3")
pal2 <- brewer.pal(8,"Dark2")

wordcloud(df$word, df$freq, min.freq=10,
          max.words=Inf, random.order=FALSE, 
          rot.per=.15, scale=c(2.2,0.5),colors=pal1)

Usando o mesmo para comando para #naovaitergolpe

nvtg_twiiter <- searchTwitter("naovaitergolpe", n = 1500,lang="pt") 
wordcloud(df$word, df$freq, min.freq=10,
          max.words=Inf, random.order=FALSE, 
          rot.per=.15, scale=c(2.2,0.6),colors=pal1)

Obrigado!