Teoría

Minería de Datos (TM)

La Minería de Datos (TM) es el proceso de extraer información útil, patrones o conocimientos de textos no estructurados.

Etapas del proceso

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:

  • Análisis de sentimientos
  • Nube de palabras
  • Topic Modeling

3. Análisis predictivo

Técnicas y modelos estadísticos para predecir resultados futuros.
Los modelos más usados son:

  • Random Forest
  • Redes neuronales
  • Regresiones
library(tidyverse) # Manipulación de datos
library(tesseract) #OCR
library(magick) #PNG
library(pdftools) #Office Word
library(officer) #PDF
library(purrr)

Etapa 1. Obtener datos mediantne OCR

**De imagen PNG a texto en Word*

# Definir la carpeta donde se guardará el documento
carpeta_destino <- "D:/Tec/Sexto Semestre/IA concentracion/Rstudio/"
# Leer la imagen
imagen1 <- image_read("D:/Tec/Sexto Semestre/IA concentracion/Rstudio/imagen1.PNG")
# Extraer el texto con OCR
texto1 <- ocr(imagen1)
# Crear el documento de Word en blanco
doc1 <- read_docx()
# Agregar el texto extraído al documento
doc1 <- doc1 %>% body_add_par(texto1)

# Definir la ruta completa para guardar el archivo
ruta_guardado <- file.path(carpeta_destino, "texto1.docx")

print(doc1, target = ruta_guardado)

De Imagen PNG en español a texto en WORD

tesseract_download("spa")
## Training data already exists. Overwriting C:\Users\asarr\AppData\Local\tesseract5\tesseract5\tessdata/spa.traineddata
## [1] "C:\\Users\\asarr\\AppData\\Local\\tesseract5\\tesseract5\\tessdata/spa.traineddata"
# Leer la imagen
imagen2 <- image_read("D:/Tec/Sexto Semestre/IA concentracion/Rstudio/imagen2.PNG")
# Extraer el texto con OCR
texto2 <- ocr(imagen2, engine =tesseract("spa"))
# Crear el documento de Word en blanco
doc2 <- read_docx()
# Agregar el texto extraído al documento
doc2 <- doc2 %>% body_add_par(texto2)

# Definir la ruta completa para guardar el archivo
ruta_guardado <- file.path(carpeta_destino, "texto2.docx")

print(doc2, target = ruta_guardado)

** Actividad 1. Eso**

#De PDF a Texto en Word
pdf_eso <- pdf_convert("D:/Tec/Sexto Semestre/IA concentracion/Rstudio/eso.pdf", dpi=600) %>% map(ocr)
## Converting page 1 to eso_1.png... done!
## Converting page 2 to eso_2.png... done!
# Leer ambas imagenes
imagen3 <- image_read("D:/Tec/Sexto Semestre/IA concentracion/Rstudio/eso_1.png")
imagen4<- image_read("D:/Tec/Sexto Semestre/IA concentracion/Rstudio/eso_2.png")

texto3 <- ocr(imagen3)
texto4 <- ocr(imagen4)

doc3 <- read_docx()
doc3 <- doc3 %>% body_add_par(texto3) %>% body_add_par(texto4)

ruta_guardado <- file.path(carpeta_destino, "textoESO.docx")

print(doc3, target = ruta_guardado)

Etapa 2. Explorar Datos mediante Análisis de Senimientos

Instalar paquetes y llamar librerías

library(syuzhet) #Análisis de sentimientos"
library(tm) #Míneria de Texto
## Cargando paquete requerido: NLP
## 
## Adjuntando el paquete: 'NLP'
## The following object is masked from 'package:ggplot2':
## 
##     annotate
library(wordcloud) #Nube de palabras
## Cargando paquete requerido: RColorBrewer
library(RColorBrewer) #Colores a la nube de palabras

Análisis de Emociones y Sentimientos

texto <- pdf_eso
texto_palabras <- get_tokens(texto)
emociones <- get_nrc_sentiment(texto_palabras, language = "spanish")
#Las emociones son: alegría, tristeza, ira, miedo, sorpresa, asco, anticipación, confianza 
barplot(colSums(prop.table(emociones[,1:8])))

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

## 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)
## Warning in tm_map.SimpleCorpus(corpus, tm::removePunctuation): transformation
## drops documents
## Warning in tm_map.SimpleCorpus(corpus, function(x) tm::removeWords(x,
## tm::stopwords())): transformation drops documents

LS0tDQp0aXRsZTogIjFlciBjbGFzZSINCmF1dGhvcjogIkFuZHJldSBTYXJyZXRhIg0KZGF0ZTogIjIwMjUtMDItMTciDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogVFJVRQ0KICAgIHRvY19mbG9hdDogVFJVRQ0KICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUNCiAgICB0aGVtZTogY29zbW8NCiAgICANCi0tLQ0KDQohW10oRDovVGVjL1NleHRvIFNlbWVzdHJlL0lBIGNvbmNlbnRyYWNpb24vUnN0dWRpby9JVC5qcGVnKQ0KDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOnJlZDsiPioqVGVvcsOtYSoqPC9zcGFuPg0KDQojIyBNaW5lcsOtYSBkZSBEYXRvcyAoVE0pDQoNCkxhICoqTWluZXLDrWEgZGUgRGF0b3MgKFRNKSoqIGVzIGVsIHByb2Nlc28gZGUgZXh0cmFlciBpbmZvcm1hY2nDs24gw7p0aWwsIHBhdHJvbmVzIG8gY29ub2NpbWllbnRvcyBkZSB0ZXh0b3Mgbm8gZXN0cnVjdHVyYWRvcy4NCg0KIyMjIEV0YXBhcyBkZWwgcHJvY2Vzbw0KDQojIyMjIDEuIE9idGVuZXIgZGF0b3MgIA0KRWwgKipSZWNvbm9jaW1pZW50byDDk3B0aWNvIGRlIENhcmFjdGVyZXMgKE9DUikqKiBlcyB1bmEgdGVjbm9sb2fDrWEgcXVlIHBlcm1pdGUgY29udmVydGlyIGltw6FnZW5lcyBkZSB0ZXh0byBlbiB0ZXh0byBlZGl0YWJsZS4gIA0KVGFtYmnDqW4gZXMgY29ub2NpZG8gY29tbyAqKmV4dHJhY2Npw7NuIGRlIHRleHRvIGRlIGltw6FnZW5lcyoqLg0KDQojIyMjIDIuIEV4cGxvcmFyIGRhdG9zICANClJlcHJlc2VudGFjacOzbiBncsOhZmljYSBvIHZpc3VhbCBkZSBsb3MgZGF0b3MgcGFyYSBzdSBpbnRlcnByZXRhY2nDs24uICANCkxvcyBtw6l0b2RvcyBtw6FzIGNvbXVuZXMgc29uOiAgDQoNCi0gQW7DoWxpc2lzIGRlIHNlbnRpbWllbnRvcyAgDQotIE51YmUgZGUgcGFsYWJyYXMgIA0KLSAqVG9waWMgTW9kZWxpbmcqICANCg0KIyMjIyAzLiBBbsOhbGlzaXMgcHJlZGljdGl2byAgDQpUw6ljbmljYXMgeSBtb2RlbG9zIGVzdGFkw61zdGljb3MgcGFyYSBwcmVkZWNpciByZXN1bHRhZG9zIGZ1dHVyb3MuICANCkxvcyBtb2RlbG9zIG3DoXMgdXNhZG9zIHNvbjogIA0KDQotICpSYW5kb20gRm9yZXN0KiAgDQotIFJlZGVzIG5ldXJvbmFsZXMgIA0KLSBSZWdyZXNpb25lcyANCg0KYGBge3IgbWVzc2FnZT0gRkFMU0UsICB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeSh0aWR5dmVyc2UpICMgTWFuaXB1bGFjacOzbiBkZSBkYXRvcw0KbGlicmFyeSh0ZXNzZXJhY3QpICNPQ1INCmxpYnJhcnkobWFnaWNrKSAjUE5HDQpsaWJyYXJ5KHBkZnRvb2xzKSAjT2ZmaWNlIFdvcmQNCmxpYnJhcnkob2ZmaWNlcikgI1BERg0KbGlicmFyeShwdXJycikNCmBgYA0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpyZWQ7Ij4qKkV0YXBhIDEuIE9idGVuZXIgZGF0b3MgbWVkaWFudG5lIE9DUioqPC9zcGFuPg0KDQoNCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjpyZWQ7Ij4qKkRlIGltYWdlbiBQTkcgYSB0ZXh0byBlbiBXb3JkKjwvc3Bhbj4NCg0KYGBge3J9DQojIERlZmluaXIgbGEgY2FycGV0YSBkb25kZSBzZSBndWFyZGFyw6EgZWwgZG9jdW1lbnRvDQpjYXJwZXRhX2Rlc3Rpbm8gPC0gIkQ6L1RlYy9TZXh0byBTZW1lc3RyZS9JQSBjb25jZW50cmFjaW9uL1JzdHVkaW8vIg0KIyBMZWVyIGxhIGltYWdlbg0KaW1hZ2VuMSA8LSBpbWFnZV9yZWFkKCJEOi9UZWMvU2V4dG8gU2VtZXN0cmUvSUEgY29uY2VudHJhY2lvbi9Sc3R1ZGlvL2ltYWdlbjEuUE5HIikNCiMgRXh0cmFlciBlbCB0ZXh0byBjb24gT0NSDQp0ZXh0bzEgPC0gb2NyKGltYWdlbjEpDQojIENyZWFyIGVsIGRvY3VtZW50byBkZSBXb3JkIGVuIGJsYW5jbw0KZG9jMSA8LSByZWFkX2RvY3goKQ0KIyBBZ3JlZ2FyIGVsIHRleHRvIGV4dHJhw61kbyBhbCBkb2N1bWVudG8NCmRvYzEgPC0gZG9jMSAlPiUgYm9keV9hZGRfcGFyKHRleHRvMSkNCg0KIyBEZWZpbmlyIGxhIHJ1dGEgY29tcGxldGEgcGFyYSBndWFyZGFyIGVsIGFyY2hpdm8NCnJ1dGFfZ3VhcmRhZG8gPC0gZmlsZS5wYXRoKGNhcnBldGFfZGVzdGlubywgInRleHRvMS5kb2N4IikNCg0KcHJpbnQoZG9jMSwgdGFyZ2V0ID0gcnV0YV9ndWFyZGFkbykNCmBgYA0KDQoNCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjpyZWQ7Ij4qKkRlIEltYWdlbiBQTkcgZW4gZXNwYcOxb2wgYSB0ZXh0byBlbiBXT1JEKio8L3NwYW4+DQpgYGB7cn0NCnRlc3NlcmFjdF9kb3dubG9hZCgic3BhIikNCiMgTGVlciBsYSBpbWFnZW4NCmltYWdlbjIgPC0gaW1hZ2VfcmVhZCgiRDovVGVjL1NleHRvIFNlbWVzdHJlL0lBIGNvbmNlbnRyYWNpb24vUnN0dWRpby9pbWFnZW4yLlBORyIpDQojIEV4dHJhZXIgZWwgdGV4dG8gY29uIE9DUg0KdGV4dG8yIDwtIG9jcihpbWFnZW4yLCBlbmdpbmUgPXRlc3NlcmFjdCgic3BhIikpDQojIENyZWFyIGVsIGRvY3VtZW50byBkZSBXb3JkIGVuIGJsYW5jbw0KZG9jMiA8LSByZWFkX2RvY3goKQ0KIyBBZ3JlZ2FyIGVsIHRleHRvIGV4dHJhw61kbyBhbCBkb2N1bWVudG8NCmRvYzIgPC0gZG9jMiAlPiUgYm9keV9hZGRfcGFyKHRleHRvMikNCg0KIyBEZWZpbmlyIGxhIHJ1dGEgY29tcGxldGEgcGFyYSBndWFyZGFyIGVsIGFyY2hpdm8NCnJ1dGFfZ3VhcmRhZG8gPC0gZmlsZS5wYXRoKGNhcnBldGFfZGVzdGlubywgInRleHRvMi5kb2N4IikNCg0KcHJpbnQoZG9jMiwgdGFyZ2V0ID0gcnV0YV9ndWFyZGFkbykNCg0KYGBgDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6cmVkOyI+KiogQWN0aXZpZGFkIDEuIEVzbyoqPC9zcGFuPg0KYGBge3J9DQojRGUgUERGIGEgVGV4dG8gZW4gV29yZA0KcGRmX2VzbyA8LSBwZGZfY29udmVydCgiRDovVGVjL1NleHRvIFNlbWVzdHJlL0lBIGNvbmNlbnRyYWNpb24vUnN0dWRpby9lc28ucGRmIiwgZHBpPTYwMCkgJT4lIG1hcChvY3IpDQoNCmBgYA0KYGBge3J9DQojIExlZXIgYW1iYXMgaW1hZ2VuZXMNCmltYWdlbjMgPC0gaW1hZ2VfcmVhZCgiRDovVGVjL1NleHRvIFNlbWVzdHJlL0lBIGNvbmNlbnRyYWNpb24vUnN0dWRpby9lc29fMS5wbmciKQ0KaW1hZ2VuNDwtIGltYWdlX3JlYWQoIkQ6L1RlYy9TZXh0byBTZW1lc3RyZS9JQSBjb25jZW50cmFjaW9uL1JzdHVkaW8vZXNvXzIucG5nIikNCg0KdGV4dG8zIDwtIG9jcihpbWFnZW4zKQ0KdGV4dG80IDwtIG9jcihpbWFnZW40KQ0KDQpkb2MzIDwtIHJlYWRfZG9jeCgpDQpkb2MzIDwtIGRvYzMgJT4lIGJvZHlfYWRkX3Bhcih0ZXh0bzMpICU+JSBib2R5X2FkZF9wYXIodGV4dG80KQ0KDQpydXRhX2d1YXJkYWRvIDwtIGZpbGUucGF0aChjYXJwZXRhX2Rlc3Rpbm8sICJ0ZXh0b0VTTy5kb2N4IikNCg0KcHJpbnQoZG9jMywgdGFyZ2V0ID0gcnV0YV9ndWFyZGFkbykNCmBgYA0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpyZWQ7Ij4qKkV0YXBhIDIuIEV4cGxvcmFyIERhdG9zIG1lZGlhbnRlIEFuw6FsaXNpcyBkZSBTZW5pbWllbnRvcyoqPC9zcGFuPg0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOnJlZDsiPioqSW5zdGFsYXIgcGFxdWV0ZXMgeSBsbGFtYXIgbGlicmVyw61hcyoqPC9zcGFuPg0KDQoNCmBgYHtyfQ0KbGlicmFyeShzeXV6aGV0KSAjQW7DoWxpc2lzIGRlIHNlbnRpbWllbnRvcyINCmxpYnJhcnkodG0pICNNw61uZXJpYSBkZSBUZXh0bw0KbGlicmFyeSh3b3JkY2xvdWQpICNOdWJlIGRlIHBhbGFicmFzDQpsaWJyYXJ5KFJDb2xvckJyZXdlcikgI0NvbG9yZXMgYSBsYSBudWJlIGRlIHBhbGFicmFzDQpgYGANCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjpyZWQ7Ij4qKkFuw6FsaXNpcyBkZSBFbW9jaW9uZXMgeSBTZW50aW1pZW50b3MqKjwvc3Bhbj4NCmBgYHtyfQ0KdGV4dG8gPC0gcGRmX2Vzbw0KdGV4dG9fcGFsYWJyYXMgPC0gZ2V0X3Rva2Vucyh0ZXh0bykNCmVtb2Npb25lcyA8LSBnZXRfbnJjX3NlbnRpbWVudCh0ZXh0b19wYWxhYnJhcywgbGFuZ3VhZ2UgPSAic3BhbmlzaCIpDQojTGFzIGVtb2Npb25lcyBzb246IGFsZWdyw61hLCB0cmlzdGV6YSwgaXJhLCBtaWVkbywgc29ycHJlc2EsIGFzY28sIGFudGljaXBhY2nDs24sIGNvbmZpYW56YSANCmJhcnBsb3QoY29sU3Vtcyhwcm9wLnRhYmxlKGVtb2Npb25lc1ssMTo4XSkpKQ0KYGBgDQoNCg0KYGBge3J9DQpzZW50aW1lbnRvcyA8LSAoZW1vY2lvbmVzJG5lZ2F0aXZlKi0xKStlbW9jaW9uZXMkcG9zaXRpdmUNCnNpbXBsZV9wbG90KHNlbnRpbWVudG9zKQ0KYGBgDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6cmVkOyI+KipOdWJlIGRlIFBhbGFicmFzKio8L3NwYW4+DQpgYGB7cn0NCnBhbGFicmFzIDwtIHRleHRvX3BhbGFicmFzIA0KcGFsYWJyYXMgPC0gcmVtb3ZlV29yZHMocGFsYWJyYXMsYyhzdG9wd29yZHMoInNwYW5pc2giKSwiaGFjaWEiLCJoYWJpYSIsImhhYmlhbiIsImhlY2hvIikpDQp3b3JkY2xvdWQod29yZHM9cGFsYWJyYXMsIG1pbi5mcmVxPSAyLCByb3QucGVyPSAwLCByYW5kb20ub3JkZXI9RkFMU0UpDQoNCmBgYA0KDQoNCg0K