library(pdftools)
## Using poppler version 25.09.1
# Cargar el texto del archivo PDF
texto_raw <- pdf_text("eso.pdf")
# Crear la base de datos a partir del contenido
base_datos <- data.frame(
pagina = seq_along(texto_raw),
texto = texto_raw,
stringsAsFactors = FALSE
)
TeorÃa
La minerÃa de texto (TM) es el proceso de extraer
información útil, patrones o conocimiento de textos no
estructurados.
Consta de tres etapas:
1. Obtener datos: El Reconocimiento Óptico de Caracteres
(OCR) es una tecnologÃa que permite convertir imágenes de texto
en texto editable. También es conocido como extracción de texto
de imágenes.
2. Explorar datos: Representación gráfica o visual de los datos para su
interpretación. Los métodos más comunes son el Análisis de Sentimientos,
la Nube de Palabras y el Topic Modeling.
3. Análisis predictivo: Son las técnicas y modelos estadÃsticos para
predecir resultados futuros. Los modelos más usados son el Random
Forest, redes neuronales y regresiones.
Instalar paquetes y llamar
librerÃas
# install.packages("tidyverse") # Manipulación de datos
library(tidyverse)
# install.packages("tesseract") # OCR
library(tesseract)
# install.packages("magick") # PNG
library(magick)
# install.packages("officer") # Office (Word)
library(officer)
# install.packages("pdftools") # PDF
library(pdftools)
# install.packages("purrr") # Para la función "map" para aplicar una función a cada elemento de un vector
library(purrr)
Etapa 2. Explorar Datos
Instalar paquetes y llamar
librerÃas
# install.packages("syuzhet") #Análisis de Sentimientos
library(syuzhet)
# install.packages("tm") # MinerÃa de Texto
library(tm)
# install.packages("wordcloud") # Nube de palabras
library(wordcloud)
# install.packages("RColorBrewer") # Colores
library(RColorBrewer)
Análisis de Emociones y
Sentimientos
texto <- pdf_eso
texto_palabras <- get_tokens(texto)
emociones <- get_nrc_sentiment(texto_palabras, language = "spanish")
# AlegrÃa, Tristeza, Ira, Miedo, Sopresa, Asco, Anticipación, Confianza
barplot(colSums(prop.table(emociones[, 1:8])))

sentimientos <- (emociones$negative * -1) + emociones$positive
simple_plot(sentimientos)

Nube de Palabras
palabras <- texto_palabras
palabras <- removeWords(palabras, c(stopwords("spanish"), "hacia", "habia", "habian", "hecho"))
wordcloud(words = palabras, min.freq = 2, rot.per = 0, random.order = FALSE)

LS0tCnRpdGxlOiAiVGV4dCBNaW5pbmciCmF1dGhvcjogIiIKZGF0ZTogIiIKb3V0cHV0OiAKICBodG1sX2RvY3VtZW50OgogICAgdG9jOiBUUlVFCiAgICB0b2NfZmxvYXQ6IFRSVUUKICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUKICAgIHRoZW1lOiBjb3NtbwotLS0KCmBgYHtyfQpsaWJyYXJ5KHBkZnRvb2xzKQoKIyBDYXJnYXIgZWwgdGV4dG8gZGVsIGFyY2hpdm8gUERGCnRleHRvX3JhdyA8LSBwZGZfdGV4dCgiZXNvLnBkZiIpCgojIENyZWFyIGxhIGJhc2UgZGUgZGF0b3MgYSBwYXJ0aXIgZGVsIGNvbnRlbmlkbwpiYXNlX2RhdG9zIDwtIGRhdGEuZnJhbWUoCiAgcGFnaW5hID0gc2VxX2Fsb25nKHRleHRvX3JhdyksCiAgdGV4dG8gPSB0ZXh0b19yYXcsCiAgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFCikKYGBgCgoKCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij5UZW9yw61hPC9zcGFuPgpMYSAqKm1pbmVyw61hIGRlIHRleHRvIChUTSkqKiBlcyBlbCBwcm9jZXNvIGRlIGV4dHJhZXIgaW5mb3JtYWNpw7NuIMO6dGlsLCBwYXRyb25lcyBvIGNvbm9jaW1pZW50byBkZSB0ZXh0b3Mgbm8gZXN0cnVjdHVyYWRvcy4gIAoKQ29uc3RhIGRlIHRyZXMgZXRhcGFzOiAgCjEuIE9idGVuZXIgZGF0b3M6IEVsICoqUmVjb25vY2ltaWVudG8gw5NwdGljbyBkZSBDYXJhY3RlcmVzIChPQ1IpKiogZXMgdW5hIHRlY25vbG9nw61hIHF1ZSBwZXJtaXRlIGNvbnZlcnRpciBpbcOhZ2VuZXMgZGUgdGV4dG8gZW4gdGV4dG8gZWRpdGFibGUuIFRhbWJpw6luIGVzIGNvbm9jaWRvIGNvbW8gKipleHRyYWNjacOzbiBkZSB0ZXh0byBkZSBpbcOhZ2VuZXMqKi4gIAoyLiBFeHBsb3JhciBkYXRvczogUmVwcmVzZW50YWNpw7NuIGdyw6FmaWNhIG8gdmlzdWFsIGRlIGxvcyBkYXRvcyBwYXJhIHN1IGludGVycHJldGFjacOzbi4gTG9zIG3DqXRvZG9zIG3DoXMgY29tdW5lcyBzb24gZWwgQW7DoWxpc2lzIGRlIFNlbnRpbWllbnRvcywgbGEgTnViZSBkZSBQYWxhYnJhcyB5IGVsIFRvcGljIE1vZGVsaW5nLiAgCjMuIEFuw6FsaXNpcyBwcmVkaWN0aXZvOiBTb24gbGFzIHTDqWNuaWNhcyB5IG1vZGVsb3MgZXN0YWTDrXN0aWNvcyBwYXJhIHByZWRlY2lyIHJlc3VsdGFkb3MgZnV0dXJvcy4gTG9zIG1vZGVsb3MgbcOhcyB1c2Fkb3Mgc29uIGVsIFJhbmRvbSBGb3Jlc3QsIHJlZGVzIG5ldXJvbmFsZXMgeSByZWdyZXNpb25lcy4gIAoKIyA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsiPkluc3RhbGFyIHBhcXVldGVzIHkgbGxhbWFyIGxpYnJlcsOtYXM8L3NwYW4+CmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMgaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIikgIyBNYW5pcHVsYWNpw7NuIGRlIGRhdG9zCmxpYnJhcnkodGlkeXZlcnNlKQojIGluc3RhbGwucGFja2FnZXMoInRlc3NlcmFjdCIpICMgT0NSCmxpYnJhcnkodGVzc2VyYWN0KQojIGluc3RhbGwucGFja2FnZXMoIm1hZ2ljayIpICMgUE5HCmxpYnJhcnkobWFnaWNrKQojIGluc3RhbGwucGFja2FnZXMoIm9mZmljZXIiKSAjIE9mZmljZSAoV29yZCkKbGlicmFyeShvZmZpY2VyKQojIGluc3RhbGwucGFja2FnZXMoInBkZnRvb2xzIikgIyBQREYKbGlicmFyeShwZGZ0b29scykKIyBpbnN0YWxsLnBhY2thZ2VzKCJwdXJyciIpICMgUGFyYSBsYSBmdW5jacOzbiAibWFwIiBwYXJhIGFwbGljYXIgdW5hIGZ1bmNpw7NuIGEgY2FkYSBlbGVtZW50byBkZSB1biB2ZWN0b3IKbGlicmFyeShwdXJycikKYGBgCgoKIyA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsiPkV0YXBhIDEuIE9idGVuZXIgRGF0b3MgbWVkaWFudGUgT0NSPC9zcGFuPgoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij5EZSBpbWFnZW4gUE5HIGEgdGV4dG8gZW4gV29yZDwvc3Bhbj4KYGBge3IgZXZhbD1GQUxTRX0KaW1hZ2VuMSA8LSBpbWFnZV9yZWFkKCkKdGV4dG8xIDwtIG9jcihpbWFnZW4xKQp0ZXh0bzEKZG9jMSA8LSByZWFkX2RvY3goKSAjIENyZWEgdW4gZG9jdW1lbnRvIGRlIFdvcmQgZW4gYmxhbmNvCmRvYzEgPC0gZG9jMSAlPiUgYm9keV9hZGRfcGFyKHRleHRvMSkgIyBQZWdhIGVsIHRleHRvIGVuIGVsIGRvYzEKIyBwcmludChkb2MxLCB0YXJnZXQ9InRleHRvMS5kb2N4IikgIyBHdWFyZGEgZWwgZG9jMSBlbiBsYSBjb21wdQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+RGUgaW1hZ2VuIFBORyBlbiBlc3Bhw7FvbCBhIHRleHRvIGVuIFdvcmQ8L3NwYW4+CmBgYHtyIGV2YWw9RkFMU0V9CmltYWdlbjIgPC0gaW1hZ2VfcmVhZCgpCnRlc3NlcmFjdF9kb3dubG9hZCgic3BhIikKdGV4dG8yIDwtIG9jcihpbWFnZW4yLCBlbmdpbmUgPSB0ZXNzZXJhY3QoInNwYSIpKQp0ZXh0bzIKZG9jMiA8LSByZWFkX2RvY3goKSAjIENyZWEgdW4gZG9jdW1lbnRvIGRlIFdvcmQgZW4gYmxhbmNvCmRvYzIgPC0gZG9jMiAlPiUgYm9keV9hZGRfcGFyKHRleHRvMikgIyBQZWdhIGVsIHRleHRvIGVuIGVsIGRvYzEKIyBwcmludChkb2MyLCB0YXJnZXQ9InRleHRvMi5kb2N4IikgIyBHdWFyZGEgZWwgZG9jMSBlbiBsYSBjb21wdQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+QWN0aXZpZGFkIDEuIEVzbzwvc3Bhbj4KYGBge3J9CiMgRGUgUERGIGEgVGV4dG8gZW4gV29yZApwZGZfZXNvIDwtIHBkZl9jb252ZXJ0KCJlc28ucGRmIiwgZHBpID0gNjAwKSAlPiUgbWFwKG9jcikKIyBwZGZfZXNvCiMgUmVwZXRpciBwYXNvcyBwcmV2aW9zIHBhcmEgY29udmVydGlyIGltw6FnZW5lcyBhIHRleHRvIGVuIFdvcmQuCmBgYAoKIyA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsiPkV0YXBhIDIuIEV4cGxvcmFyIERhdG9zPC9zcGFuPgoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij5JbnN0YWxhciBwYXF1ZXRlcyB5IGxsYW1hciBsaWJyZXLDrWFzPC9zcGFuPgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIGluc3RhbGwucGFja2FnZXMoInN5dXpoZXQiKSAjQW7DoWxpc2lzIGRlIFNlbnRpbWllbnRvcwpsaWJyYXJ5KHN5dXpoZXQpCiMgaW5zdGFsbC5wYWNrYWdlcygidG0iKSAjIE1pbmVyw61hIGRlIFRleHRvCmxpYnJhcnkodG0pCiMgaW5zdGFsbC5wYWNrYWdlcygid29yZGNsb3VkIikgIyBOdWJlIGRlIHBhbGFicmFzCmxpYnJhcnkod29yZGNsb3VkKQojIGluc3RhbGwucGFja2FnZXMoIlJDb2xvckJyZXdlciIpICMgQ29sb3JlcwpsaWJyYXJ5KFJDb2xvckJyZXdlcikKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IHJlZDsiPkFuw6FsaXNpcyBkZSBFbW9jaW9uZXMgeSBTZW50aW1pZW50b3M8L3NwYW4+CmBgYHtyfQp0ZXh0byA8LSBwZGZfZXNvCnRleHRvX3BhbGFicmFzIDwtIGdldF90b2tlbnModGV4dG8pCmVtb2Npb25lcyA8LSBnZXRfbnJjX3NlbnRpbWVudCh0ZXh0b19wYWxhYnJhcywgbGFuZ3VhZ2UgPSAic3BhbmlzaCIpCiMgQWxlZ3LDrWEsIFRyaXN0ZXphLCBJcmEsIE1pZWRvLCBTb3ByZXNhLCBBc2NvLCBBbnRpY2lwYWNpw7NuLCBDb25maWFuemEKYmFycGxvdChjb2xTdW1zKHByb3AudGFibGUoZW1vY2lvbmVzWywgMTo4XSkpKQpzZW50aW1pZW50b3MgPC0gKGVtb2Npb25lcyRuZWdhdGl2ZSAqIC0xKSArIGVtb2Npb25lcyRwb3NpdGl2ZQpzaW1wbGVfcGxvdChzZW50aW1pZW50b3MpCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7Ij5OdWJlIGRlIFBhbGFicmFzPC9zcGFuPgpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwYWxhYnJhcyA8LSB0ZXh0b19wYWxhYnJhcwpwYWxhYnJhcyA8LSByZW1vdmVXb3JkcyhwYWxhYnJhcywgYyhzdG9wd29yZHMoInNwYW5pc2giKSwgImhhY2lhIiwgImhhYmlhIiwgImhhYmlhbiIsICJoZWNobyIpKQp3b3JkY2xvdWQod29yZHMgPSBwYWxhYnJhcywgbWluLmZyZXEgPSAyLCByb3QucGVyID0gMCwgcmFuZG9tLm9yZGVyID0gRkFMU0UpCmBgYAoK