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 regresions

Instalar paquetes y llamar librerias

library(tidyverse) # Manipulación de datos
library(tesseract) # OCR
library(magick) # PNG
library(officer) # Office (word)
library(pdftools) # PDF
library(purrr)

Etapa 1. Obtener datos mediante OCR

De imagen PNG a texto en word

image1 <- image_read('C:\\Users\\ACER\\Downloads\\imagen1.PNG')
text1 <- ocr(image1)
doc1 <- read_docx()
doc1 <- doc1 %>% body_add_par(text1) # Pega el texto en el doc
# print(doc1, target = 'text1.docx')

De imagen PNG a texto en word

image2 <- image_read('C:\\Users\\ACER\\Downloads\\imagen2.PNG')
tesseract_download('spa')
## Training data already exists. Overwriting C:\Users\ACER\AppData\Local\tesseract5\tesseract5\tessdata/spa.traineddata
## [1] "C:\\Users\\ACER\\AppData\\Local\\tesseract5\\tesseract5\\tessdata/spa.traineddata"
text2 <- ocr(image2, engine = tesseract('spa'))
doc2 <- read_docx()
doc2 <- doc2 %>% body_add_par(text2) # Pega el texto en el doc
# print(doc2, target = 'text2.docx')

Actividad 1. Eso

# From pdf to text
pdf_it <- pdf_convert('C:\\Users\\ACER\\Downloads\\eso.pdf', dpi = 600) %>% map(ocr)
## Converting page 1 to eso_1.png... done!
## Converting page 2 to eso_2.png... done!
# From image to word
image_it_1 <- image_read('C:\\Users\\ACER\\Documents\\R\\eso_1.png')
text_it_1 <- ocr(image_it_1, engine = tesseract('spa'))

image_it_2 <- image_read('C:\\Users\\ACER\\Documents\\R\\eso_2.png')
text_it_2 <- ocr(image_it_2, engine = tesseract('spa'))

doc <- read_docx()

doc <- doc %>% body_add_par(text_it_1)
doc <- doc %>% body_add_par(text_it_2)

print(doc, target = 'text_it.docx')

Etapa 2. Explorar datos con análisis de senimientos

Instalar paquetes y llamar librerias

library(syuzhet)
library(tm)
## Cargando paquete requerido: NLP
## 
## Adjuntando el paquete: 'NLP'
## The following object is masked from 'package:ggplot2':
## 
##     annotate

Análisis de emociones y sentimientos

text_it <- pdf_it
text_words <- get_tokens(text_it)
emotions <- get_nrc_sentiment(text_words, language = 'spanish')
# Alegría, Tristeza, Ira, Miedo, Sorpresa, Asco, Anticipación y Confianza
barplot(colSums(prop.table(emotions[,1:8])))

sentiments <-  (emotions$negative*-1)+emotions$positive
simple_plot(sentiments)

LS0tDQp0aXRsZTogIkRhdGEgTWluaW5nIg0KYXV0aG9yOiANCmRhdGU6ICIyMDI1LTAyLTE3Ig0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICAgIHRvYzogVFJVRQ0KICAgICAgdG9jX2Zsb2F0OiBUUlVFDQogICAgICBjb2RlX2Rvd25sb2FkOiBUUlVFDQogICAgICB0aGVtZTogY29zbW8NCi0tLQ0KDQohW10oQzpcXFVzZXJzXFxBQ0VSXFxEb3dubG9hZHNcXE9JUC5qcGcpDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+VGVvcsOtYTwvc3Bhbj4NCg0KTGEgKiptaW5lcsOtYSBkZSB0ZXh0byAoVE0pKiogZXMgZWwgcHJvY2VzbyBkZSBleHRyYWVyIGluZm9ybWFjacOzbiDDunRpbCwgcGF0cm9uZXMgbyBjb25vY2ltaWVudG8gZGUgdGV4dG9zIG5vIGVzdHJ1Y3R1cmFkb3MuICANCg0KQ29uc3RhIGRlIHRyZXMgZXRhcGFzOiAgDQoNCjEuIE9idGVuZXIgZGF0b3M6IEVsICoqUmVjb25vY2ltaWVudG8gw5NwdGljbyBkZSBDYXJhY3RlcmVzIChPQ1IpKiogZXMgdW5hIHRlY25vbG9nw61hIHF1ZSBwZXJtaXRlIGNvbnZlcnRpciBpbcOhZ2VuZXMgZGUgdGV4dG8gZW4gdGV4dG8gZWRpdGFibGUuIFRhbWJpw6luIGVzIGNvbm9jaWRvIGNvbW8gKipleHRyYWNjacOzbiBkZSB0ZXh0byBkZSBpbcOhZ2VuZXMqKi4NCjIuIEV4cGxvcmFyIGRhdG9zOlJlcHJlc2VudGFjacOzbiBncsOhZmljYSBvIHZpc3VhbCBkZSBsb3MgZGF0b3MgcGFyYSBzdSBpbnRlcnByZXRhY2nDs24uIExvcyBtw6l0b2RvcyBtw6FzIGNvbXVuZXMgc29uIGVsIEFuw6FsaXNpcyBkZSBzZW50aW1pZW50b3MsIGxhIE51YmUgZGUgcGFsYWJyYXMgeSBlbCBUb3BpYyBNb2RlbGluZy4NCjMuIEFuw6FsaXNpcyBwcmVkaWN0aXZvOiBTb24gbGFzIHTDqWNuaWNhcyB5IG1vZGVsb3MgZXN0YWTDrXN0aWNvcyBwYXJhIHByZWRlY2lyIHJlc3VsdGFkb3MgZnV0dXJvcy4gTG9zIG1vZGVsb3MgbcOhcyB1c2Fkb3Mgc29uIGVsIFJhbmRvbSBGb3Jlc3QsIHJlZGVzIG5ldXJvbmFsZXMgeSByZWdyZXNpb25zDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+SW5zdGFsYXIgcGFxdWV0ZXMgeSBsbGFtYXIgbGlicmVyaWFzPC9zcGFuPg0KDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0V9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkgIyBNYW5pcHVsYWNpw7NuIGRlIGRhdG9zDQpsaWJyYXJ5KHRlc3NlcmFjdCkgIyBPQ1INCmxpYnJhcnkobWFnaWNrKSAjIFBORw0KbGlicmFyeShvZmZpY2VyKSAjIE9mZmljZSAod29yZCkNCmxpYnJhcnkocGRmdG9vbHMpICMgUERGDQpsaWJyYXJ5KHB1cnJyKQ0KYGBgDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+RXRhcGEgMS4gT2J0ZW5lciBkYXRvcyBtZWRpYW50ZSBPQ1I8L3NwYW4+DQoNCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogYmx1ZTsiPkRlIGltYWdlbiBQTkcgIGEgdGV4dG8gZW4gd29yZDwvc3Bhbj4NCg0KYGBge3J9DQppbWFnZTEgPC0gaW1hZ2VfcmVhZCgnQzpcXFVzZXJzXFxBQ0VSXFxEb3dubG9hZHNcXGltYWdlbjEuUE5HJykNCnRleHQxIDwtIG9jcihpbWFnZTEpDQpkb2MxIDwtIHJlYWRfZG9jeCgpDQpkb2MxIDwtIGRvYzEgJT4lIGJvZHlfYWRkX3Bhcih0ZXh0MSkgIyBQZWdhIGVsIHRleHRvIGVuIGVsIGRvYw0KIyBwcmludChkb2MxLCB0YXJnZXQgPSAndGV4dDEuZG9jeCcpDQpgYGANCg0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBibHVlOyI+RGUgaW1hZ2VuIFBORyAgYSB0ZXh0byBlbiB3b3JkPC9zcGFuPg0KDQpgYGB7cn0NCmltYWdlMiA8LSBpbWFnZV9yZWFkKCdDOlxcVXNlcnNcXEFDRVJcXERvd25sb2Fkc1xcaW1hZ2VuMi5QTkcnKQ0KdGVzc2VyYWN0X2Rvd25sb2FkKCdzcGEnKQ0KdGV4dDIgPC0gb2NyKGltYWdlMiwgZW5naW5lID0gdGVzc2VyYWN0KCdzcGEnKSkNCmRvYzIgPC0gcmVhZF9kb2N4KCkNCmRvYzIgPC0gZG9jMiAlPiUgYm9keV9hZGRfcGFyKHRleHQyKSAjIFBlZ2EgZWwgdGV4dG8gZW4gZWwgZG9jDQojIHByaW50KGRvYzIsIHRhcmdldCA9ICd0ZXh0Mi5kb2N4JykNCmBgYA0KDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij5BY3RpdmlkYWQgMS4gRXNvPC9zcGFuPg0KDQpgYGB7cn0NCiMgRnJvbSBwZGYgdG8gdGV4dA0KcGRmX2l0IDwtIHBkZl9jb252ZXJ0KCdDOlxcVXNlcnNcXEFDRVJcXERvd25sb2Fkc1xcZXNvLnBkZicsIGRwaSA9IDYwMCkgJT4lIG1hcChvY3IpDQojIEZyb20gaW1hZ2UgdG8gd29yZA0KaW1hZ2VfaXRfMSA8LSBpbWFnZV9yZWFkKCdDOlxcVXNlcnNcXEFDRVJcXERvY3VtZW50c1xcUlxcZXNvXzEucG5nJykNCnRleHRfaXRfMSA8LSBvY3IoaW1hZ2VfaXRfMSwgZW5naW5lID0gdGVzc2VyYWN0KCdzcGEnKSkNCg0KaW1hZ2VfaXRfMiA8LSBpbWFnZV9yZWFkKCdDOlxcVXNlcnNcXEFDRVJcXERvY3VtZW50c1xcUlxcZXNvXzIucG5nJykNCnRleHRfaXRfMiA8LSBvY3IoaW1hZ2VfaXRfMiwgZW5naW5lID0gdGVzc2VyYWN0KCdzcGEnKSkNCg0KZG9jIDwtIHJlYWRfZG9jeCgpDQoNCmRvYyA8LSBkb2MgJT4lIGJvZHlfYWRkX3Bhcih0ZXh0X2l0XzEpDQpkb2MgPC0gZG9jICU+JSBib2R5X2FkZF9wYXIodGV4dF9pdF8yKQ0KDQpwcmludChkb2MsIHRhcmdldCA9ICd0ZXh0X2l0LmRvY3gnKQ0KDQpgYGANCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij5FdGFwYSAyLiBFeHBsb3JhciBkYXRvcyBjb24gYW7DoWxpc2lzIGRlIHNlbmltaWVudG9zPC9zcGFuPg0KDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij5JbnN0YWxhciBwYXF1ZXRlcyB5IGxsYW1hciBsaWJyZXJpYXM8L3NwYW4+DQoNCmBgYHtyfQ0KbGlicmFyeShzeXV6aGV0KQ0KbGlicmFyeSh0bSkNCmBgYA0KDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6IGJsdWU7Ij5BbsOhbGlzaXMgZGUgZW1vY2lvbmVzIHkgc2VudGltaWVudG9zPC9zcGFuPg0KDQpgYGB7cn0NCnRleHRfaXQgPC0gcGRmX2l0DQp0ZXh0X3dvcmRzIDwtIGdldF90b2tlbnModGV4dF9pdCkNCmVtb3Rpb25zIDwtIGdldF9ucmNfc2VudGltZW50KHRleHRfd29yZHMsIGxhbmd1YWdlID0gJ3NwYW5pc2gnKQ0KIyBBbGVncsOtYSwgVHJpc3RlemEsIElyYSwgTWllZG8sIFNvcnByZXNhLCBBc2NvLCBBbnRpY2lwYWNpw7NuIHkgQ29uZmlhbnphDQpiYXJwbG90KGNvbFN1bXMocHJvcC50YWJsZShlbW90aW9uc1ssMTo4XSkpKQ0Kc2VudGltZW50cyA8LSAgKGVtb3Rpb25zJG5lZ2F0aXZlKi0xKStlbW90aW9ucyRwb3NpdGl2ZQ0Kc2ltcGxlX3Bsb3Qoc2VudGltZW50cykNCmBgYA0KDQoNCg==