Nesse post daremos continuidade ao que já vimos em posts anteriores como Text Mining com kernels string no R - Parte 1 e Text Mining com kernels string no R - Parte 2. Nessa etapa, vamos tentar reconhecer o padrão das informações prestadas pela Petrobras de 2006 até o primeiro trimestre 2014, para isso, considere os seguintes pacotes:
#Habilita as bibliotecas necessárias library(tm) library(wordcloud) library(Rstem)
Vamos trabalhar com os textos informados pela Petrobras, os quais podem ser obtidos nesse link. Salve esses arquivos em alguma pasta do seu computador, como por exemplo, C:\Text Mining. Em seguida, precisamos transformar os arquivos em PDF para o formato TXT, o qual é possível de ser lido pelo R:
#Seleciona o arquivo de texto a ser minerado dest<- "C:\\Text Mining\\2006 - 1T.pdf" #Executa o programa que converte pdf em txt exe<-"C:\\Program Files\\xpdfbin-win-3.03\\bin64\\pdftotext.exe" system(paste("\"", exe, "\" \"", dest,"\"", sep= ""), wait= F) #Cria o arquivo no formato txt filetxt<- sub(".pdf", ".txt", dest) #Lê os dados do arquivo txt<- readLines(filetxt, warn=FALSE) #Deixa tudo minúsculo txt<- tolower(txt) #Remove algumas expressões regulares txt<-removeWords(txt, c("\\f", stopwords("portuguese"))) #Cria os objetos no formato corpus corpus<-Corpus(VectorSource(txt)) #Remove a pontuação corpus<-tm_map(corpus,removePunctuation) #Remove os números corpus<-tm_map(corpus,removeNumbers)Note que o código acima só é possível de ser executado se você tiver instalado o arquivo que converte PDF para TXT, qual seja, Xpdf. Na linha número 5 deve estar o endereço do arquivo executável pdftotext.exe o qual é obtido ao se instalar o programa Xpdf. Cada texto em PDF no arquivo é transformado em TXT e pode ser lido. Para cada texto, podemos associar um retorno obtido no trimestre após a divulgação da informação, por exemplo, para o primeiro trimestre de 2006 temos:
#Coloca os textos na forma de Matriz tdm<- TermDocumentMatrix(corpus) m<- as.matrix(tdm) #Cria um data.frame com a frequência das palavras d<- data.frame(freq= sort(rowSums(m), decreasing =TRUE)) #Coloca as palavras nas colunas d$word <- row.names(d) d$stem<- wordStem(d$word, language="portuguese") #Remove as palavras muito grandes d<- d[nchar(row.names(d))<20,] #Agrega as frequências das palavras agg_freq<- aggregate(freq ~stem, data = d, sum) agg_word<- aggregate(word ~stem, data =d, function(x) x[1]) #Une os dados de frequência e palavras d<- cbind(freq = agg_freq[,2], agg_word) #Ordena as palavras pela frequência d<- d[order(d$freq,decreasing =TRUE),] #1 Trimestre 2006 d$Trimestre<-"1t2006" d$Retorno<-0.03789927 #Retorno do 2t2006Uma vez criado um DataFrame para cada texto com o seu respectivo retorno trimestral, podemos usar as frequências das palavras como uma covariável na previsão do retorno trimestral. Essa proposta não é nova e tem sido usada em finanças na busca por padrões. Um bom texto para se começar a estudar esse assunto é o artigo Text mining for market prediction: A systematic review.