La minería de tecto (TM) es el proceso de extraeer la información útil, patrones o conocimientos de textos no estructurados.
Consta de 3 etapas: 1. Obtener datos:El reconocimiento óptico de caracteres (OCR) es una tecnología que permite convertir imágenes de texto en texto editable. Tambien conocido como extracción 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.
#install.packages("tidyverse") # Data wrangling
library(tidyverse)
#install.packages("tesseract") # OCR "RECONOCIMIENTO OPTICO DE CARACTERES"
library(tesseract)
#install.packages("magick") # PNG "Trabajar con un formato de imagen"
library(magick)
#install.packages("officer") # Office (word)
library(officer)
#install.packages("pdftools") # Leer PDF
library(pdftools)
#install.packages("purrr") # Para la función map (aplicar una funcion a cada elemento de un vector)
library(purrr)
#install.packages("tm") # Text Mining
library(tm)
#install.packages("RColorBrewer") # Colores
library(RColorBrewer)
#install.packages("wordcloud") # Nube de Palabras
library(wordcloud)
#install.packages("topicmodels") # Modelos de Temas
library(topicmodels)
#install.packages("ggplot2") # Modelos de Temas
library(ggplot2)
imagen1 <- image_read("C:\\Users\\lesda\\Downloads\\imagen1.PNG")
texto1 <- ocr(imagen1)
texto1
## [1] "Linear regression with one variable x is also known as univariate linear regression\nor simple linear regression. Simple linear regression is used to predict a single\noutput from a single input. This is an example of supervised learning, which means\nthat the data is labeled, i.e., the output values are known in the training data. Let us\nfit a line through the data using simple linear regression as shown in Fig. 4.1.\n"
doc1 <- read_docx() #Crea un documento de word en blanco
doc1 <- doc1 %>% body_add_par(texto1, style = "Normal") #Pega el texto en el word
#print(doc1, target = "texto1.docx") #Guarda el word en la computadora
imagen2 <- image_read("C:\\Users\\lesda\\Downloads\\imagen2.PNG")
tesseract_download("spa")
## [1] "C:\\Users\\lesda\\AppData\\Local\\tesseract5\\tesseract5\\tessdata/spa.traineddata"
texto2 <- ocr(imagen2, engine = tesseract("spa"))
texto2
## [1] "Un importante, y quizá controversial, asunto político es el que se refiere al efecto del salario mínimo sobre\nlas tasas de desempleo en diversos grupos de trabajadores. Aunque este problema puede ser estudiado con\ndiversos tipos de datos (corte transversal, series de tiempo o datos de panel), suelen usarse las series de\ntiempo para observar los efectos agregados. En la tabla 1.3 se presenta un ejemplo de una base de datos\nde series de tiempo sobre tasas de desempleo y salarios mínimos.\n"
doc2 <- read_docx() #Crea un documento de word en blanco
doc2 <- doc2 %>% body_add_par(texto2, style = "Normal") #Pega el texto en el word
#print(doc2, target = "texto2.docx") #Guarda el word en la computadora
#pdf1 <- pdf_convert("C:\\Users\\lesda\\Downloads\\pdf1.pdf", dpi=600) %>% map(ocr)
# Repetir pasos previos para convertir imagenes a texto de WORD
#Convertit pdf a imagenes
pdf2 <- pdf_convert("C:\\Users\\lesda\\OneDrive\\Documentos\\Concentracion IA\\R Modulo 3\\eso3.pdf", dpi=600) %>% map(ocr)
## Converting page 1 to eso3_1.png... done!
## Converting page 2 to eso3_2.png... done!
## Converting page 3 to eso3_3.png... done!
# Convertir las imagenes a word
imagenIT1 <- image_read("C:\\Users\\lesda\\OneDrive\\Documentos\\Concentracion IA\\R Modulo 3\\eso3_1.png")
textoIT1 <- ocr(imagenIT1)
textoIT1
## [1] "Y alli estaba, persiguiendo su barco de papel por el lado izquierdo de Witcham Street. Corria\ndeprisa, pero el agua le ganaba y el barquito estaba sacando ventaja. Oyo un rugido profundo y\nvio como cincuenta metros mas adelante, colina abajo, el agua de la cuneta se precipitaba\ndentro de una boca de tormenta que aun continuaba abierta. Era un largo semicirculo oscuro\nabierto en el bordillo de la acera y mientras George miraba, una rama desgarrada, con la corteza\noscura y reluciente se hundio en aquellas fauces. Alli pendio por un momento y luego se deslizo\nhacia el interior. Hacia alli se encaminaba su bote.\n\n—jiMierda! —chillo horrorizado.\n\nForzo el paso y, por un momento, parecio que iba a alcanzar al barquito. Pero uno de sus pies\nresbalo y George cayo despatarrado despellejandose la rodilla con un grito de dolor. Desde su\nnueva perspectiva, a la altura del pavimento, vio que su barco giraba en redondo dos veces,\nmomentaneamente atrapado en otro remolino, antes de desaparecer.\n\n—jiMierda y mas mierda! —volvio a chillar, estrellando el puno contra el pavimento.\n\nEso tambien dolio, y se echo a sollozar. iQue manera tan estupida de perder el barco!\n\nSe levanto para caminar hacia la boca de tormenta y alli se dejo caer de rodillas, para mirar hacia\nel interior. EL agua hacia un ruido hueco y humedo al caer en la oscuridad. Ese sonido le daba\nescalofrios. Hacia pensar en...\n\n—jEh!\n\nLa exclamacion le fue arrancada como con un cordel. Retrocedio.\n\nAlli adentro habia unos ojos amarillos. Ese tipo de ojos que el siempre imaginaba, sin verlos\nnunca, en la oscuridad del sotano. Es un animal —penso, incoherente—; eso es todo: un animal; a lo\nmejor un gato que quedo atrapado...\n\nDe todos modos, estaba por echar a correr; habria corrido Uno o dos segundos, cuando su\ntablero mental se hubiera hecho cargo del espanto que le produjeron esos dos ojos amarillos y\nbrillantes. Sintio la aspera superficie del pavimento bajo los dedos y la fina lamina de agua fria\nque corria alrededor. Se vio a si mismo levantandose y retrocediendo. Y fue entonces cuando\nuna voz, Una voz perfectamente razonable y bastante simpatica, le hablo desde dentro de la\nboca de tormenta:\n\n—Hola, George —dijo.\n\nGeorge parpadeo y volvio a mirar. Apenas podia dar credito a lo que vela; era como algo sacado\nde un cuento o de una pelicula donde uno sabe que los animales hablan y bailan. Si hubiera\ntenido diez anos mas, no habria creido en lo que estaba viendo; pero no tenia dieciseis anos, sino\nSEIS.\n\nEn la boca de tormenta habia un payaso. La luz distaba de ser buena, pero basto para que\nGeorge Denbrough estuviese seguro de lo que vela. Era un payaso, como en el circo o en la tele.\nParecia una mezcla de Bozo y Clarabell, el que hablaba haciendo sonar su bocina en Howdy\nDoody, los sabados por la manana. Bufalo Bob era el unico que entendia a Clarabell, y eso\nsiempre hacia reir a George. La cara del payaso metido en la boca de tormenta era blanca; tenia\ncomicos mechones de pelo rojo a cada lado de la calva y Una gran sonrisa de payaso pintada\n"
imagenIT2 <- image_read("C:\\Users\\lesda\\OneDrive\\Documentos\\Concentracion IA\\R Modulo 3\\eso3_2.png")
textoIT2 <- ocr(imagenIT2)
textoIT2
## [1] "alrededor de la boca. Si George hubiese vivido anos despues, habria pensado en Ronald\nMcDonald antes que en Bozo o en Clarabell.\n\nEl payaso tenia en una mano un manojo de globos de todos los colores, como tentadora fruta\nmadura.\n\nEn la otra, el barquito de papel de George.\n\n—- Quieres tu barquito, Georgie? —El payaso sonrelia.\n\nGeorge tambien sonrio. No podia evitarlo; aqguella sonrisa era del tipo que uno devuelve sin\nquerer.\n\n—Por supuesto.\n\nEl payaso se echo a relr.\n\n—«Por supuesto». iIASi me gusta! iAsi me gusta! ¢Y un globo? ¢Que te parece? ¢Quieres un globo?\n—Bueno.. Si, por Supuesto. —Alargo la mano, pero de inmediato la retiro contra su voluntad—. No\ndebo coger nada que me ofrezca un desconocido. Lo dice mi papa.\n\n—Y tu papa tiene mucha razon —replico el payaso de la boca de tormenta sonriendo. George se\nopregunto como podia haber creido que sus ojos eran amarillos, si eran de un color azul brillante,\nbailarin, como los ojos de su mama y de Bill—. Muchisima razon, ya lo creo. Por lo tanto, voy a\noresentarme. George, soy el senor Bob Gray, tambien conocido como Pennywise, el payaso\nBailarin. Pennywise, te presento a George Denbrough. George, te presento a Pennywise. Y ahora\nya nos conocemos. Yo no soy un desconocido y tu tampoco. ¢Correcto?\n\nGeorge solto una risita.\n\n—Correcto. —Volvio a estirar la mano.. y a retirarla—. ¢Como te metiste alli adentro?\n\n—La tormenta me trajo volaaaando —dijo Pennywise, el payaso Bailarin—. Se llevo todo el circo.\néNo sientes olor a circo, George?\n\nGeorge se inclino hacia adelante. iDe pronto olia a cacahuetes! iCacahuetes tostados! iY vinagre\nblanco, del que se pone en las patatas fritas por un agujero de la tapa! Y olia a algodon de\nazucar, a bunuelos, y tambien, leve, pero poderosamente, a estiercol de animales salvajes. Olia el\naroma regocijante del aserrin. Y sin embargo...\n\nSin embargo, bajo todo eso olia a inundacion, a hojas deshechas y a oscuras sombras en bocas\nde tormenta. Era un olor humedo y putrido. El olor del sotano.\n\nPero los otros olores eran mas fuertes.\n\n—Claro que lo huelo —dijo.\n\n—- Quieres tu barquito, George? —pregunto Pennywise—. Te lo pregunto otra vez porque no\npareces desearlo mucho.\n"
imagenIT3 <- image_read("C:\\Users\\lesda\\OneDrive\\Documentos\\Concentracion IA\\R Modulo 3\\eso3_3.png")
textoIT3 <- ocr(imagenIT3)
textoIT3
## [1] "Y lo mostro en alto, sonriendo. Llevaba un traje de seda abolsado con grandes botones color\nnaranja. Una corbata brillante, de color azul electrico, se le derramaba por la pechera. En las\nmanos llevaba grandes guantes blancos, como Mickey y Donald.\n\n—Si, claro —dijo George, mirando dentro de la boca de tormenta.\n\n—Y un globo? Los tengo rojos, verdes, amarillos, azules..\n\n—Flotan?\n\n—é Que si flotan? —La sonrisa del payaso se acentuo—. Oh, si, claro que si. iFlotan! Tambien tengo\nalgodon de azucar..\n\nGeorge estiro la mano.\n\nEl payaso le sujeto el brazo.\n\nY entonces George vio como la cara del payaso cambiaba.\n\nLo que vio entonces fue tan terrible que lo peor que habia imaginado sobre la cosa del sotano\nparecia un dulce sueno. Lo que vio destruyo su cordura de un Zarpazo.\n\n—Flotan —croo la cosa de la alcantarilla con una voz que rela como entre coagulos.\n\nSujetaba el brazo de George con su puno grueso y agusanado. Tiro de el hacia esa horrible\noscuridad por donde el agua corria y rugia y aullaba llevando hacia el mar los desechos de la\ntormenta. George estiro el cuello para apartarse de esa negrura definitiva y empezo a gritar hacia\nla lluvia, a gritar como un loco hacia el gris cielo otonal que se curvaba sobre Derry aquel dia de\notono de 1957. Sus gritos eran agudos y penetrantes y a lo largo de toda la calle, la gente se\nasomo a las ventanas o se lanzo a los porches.\n\n—Flotan —gruno la cosa—, flotan, Georgie. Y cuando estes aqui abajo, conmigo, tu tambien\nflotaras.\n\nEl hombro de George se clavo contra el cemento del bordillo. Dave Gardener, que ese dia no\nhabia ido a trabajar al Shoeboat debido a la inundacion, vio solo a un nino de impermeable\namarillo, un nino que gritaba y se retorcia en el arroyo mientras el agua lodosa le corria sobre la\ncara haciendo que sus alaridos sonaran burbujeantes.\n\n—Aqul abajo todo flota —susurro esa voz podrida, riendo, y de pronto sono un desgarro y hubo\nun destello de agonia y George Denbrough ya no supo mas.\n\nDave Gardener fue el primero en llegar. Aunque llego solo cuarenta y cinco segundos despues\ndel primer grito, George Denbrough ya habia muerto. Gardener lo agarro por el impermeable, tiro\nde el hasta sacarlo a la calle... y al girar en Sus manos el cuerpo de George, tambien el empezo a\ngritar. El lado izquierdo del impermeable del nino estaba de un rojo Intenso. La sangre flulia hacia\nla alcantarilla desde el agujero donde habia estado el brazo Izquierdo. Un trozo de hueso,\nhorriblemente brillante, asomaba por la tela rota.\n\nLos ojos del nino miraban fijamente el cielo gris y mientras Dave retrocedia a tropezones hacia\nlos otros que ya corrian por la calle, empezaron a llenarse de lluvia.\n"
docIT <- read_docx() #Crea un documento de word en blanco
docIT <- docIT %>% body_add_par(textoIT1, style = "Normal")%>% body_add_par(textoIT2, style = "Normal") %>% body_add_par(textoIT3, style = "Normal") #Pega el texto en el word
#print(docIT, target = "textoITGENERAL.docx") #Guarda el word en la computadora
text <- readLines("C:\\Users\\lesda\\OneDrive\\Documentos\\Concentracion IA\\R Modulo 3\\Exploración de Datos.txt") #Traer texto de internet
corpus <- Corpus(VectorSource(text)) # Pone cada renglón en una celda de vector
# inspect(corpus)
corpus <- tm_map(corpus, content_transformer(tolower)) # Pone todo en minúsculas
## Warning in tm_map.SimpleCorpus(corpus, content_transformer(tolower)):
## transformation drops documents
#inspect(corpus)
corpus <- tm_map(corpus, removePunctuation) # Elimina puntuación
## Warning in tm_map.SimpleCorpus(corpus, removePunctuation): transformation drops
## documents
#inspect(corpus)
corpus <- tm_map(corpus, removeNumbers) # Elimina números
## Warning in tm_map.SimpleCorpus(corpus, removeNumbers): transformation drops
## documents
corpus <- tm_map(corpus, removeWords, stopwords("en")) # Elimina palabras que no hablan del tema
## Warning in tm_map.SimpleCorpus(corpus, removeWords, stopwords("en")):
## transformation drops documents
# corpus <- tm_map(corpus, removeWords, c("dream","")) # Elimina palabras puntuales
# inspect(corpus)
tdm <- TermDocumentMatrix(corpus)
m <- as.matrix(tdm) # #Cuenta la frecuencia de cada palabra en el texto completo
frecuencia <- sort(rowSums(m), decreasing = TRUE) # Cuenta la frecuencia de cada palabra en el texto completo
frecuencia_df <- data.frame(word=names(frecuencia), freq=frecuencia) # Convierte la frecuencia a data frame
ggplot(head(frecuencia_df,10), aes (x=reorder(word, -freq), y=freq)) +
geom_bar(stat = "identity", fill = "magenta") +
geom_text(aes(label = freq), vjust = -0.5) +
labs(title = "TOP 10 palabras más frecuentes", subtitle = "Discurso'I have a Dream' de M.L. King", x= "Palabra", y="Frecuencia") +
ylim(0,20)
# El procesamiento de datos antes de la nube de palabras es igual que en el Análisis de Frecuencias, desde importar el texto hasta frecuencia_df
set.seed(123)
wordcloud(words=frecuencia_df$word, freq=frecuencia_df$freq, min.freq = 1, random.order = FALSE, colors = brewer.pal(8, "RdPu"))
# Análisis de Frecuencias
#textIT <- readLines("C:\\Users\\lesda\\OneDrive\\Documentos\\Concentracion IA\\R Modulo 3\\textoITGENERALtxt.txt", encoding = "UF-8")
#corpusIT <- Corpus(VectorSource(textIT)) # Pone cada renglón en una celda de vector
#inspect(corpusIT)
#corpusIT <- tm_map(corpusIT, content_transformer(tolower)) # Pone todo en minúsculas
#inspect(corpusIT)
#corpusIT <- tm_map(corpusIT, removePunctuation) # Elimina puntuación
#inspect(corpusIT)
#corpusIT <- tm_map(corpusIT, removeNumbers) # Elimina números
#corpusIT <- tm_map(corpusIT, removeWords, stopwords("en")) # Elimina palabras que no hablan del tema
#corpusIT <- tm_map(corpusIT, removeWords, c("dream","")) # Elimina palabras puntuales
#inspect(corpusIT)
#tdmIT <- TermDocumentMatrix(corpusIT)
#mIT <- as.matrix(tdmIT) # #Cuenta la frecuencia de cada palabra en el texto completo
#frecuenciaIT <- sort(rowSums(mIT), decreasing = TRUE) # Cuenta la frecuencia de cada palabra en el texto completo
#frecuencia_dfIT <- data.frame(word=names(frecuenciaIT), freq=frecuenciaIT) # Convierte la frecuencia a data frame
#ggplot(head(frecuencia_dfIT,10), aes (x=reorder(word, -freq), y=freq)) +
# geom_bar(stat = "identity", fill = "pink") +
#geom_text(aes(label = freq), vjust = -0.5) +
#labs(title = "TOP 10 palabras más frecuentes", subtitle = "IT", x= "Palabra", y="Frecuencia") +
#ylim(0,20)
# El procesamiento de datos antes de la nube de palabras es igual que en el Análisis de Frecuencias, desde importar el texto hasta frecuencia_df
#set.seed(123)
#wordcloud(words=frecuencia_df$word, freq=frecuencia_df$freq, min.freq = 1, random.order = FALSE, colors = brewer.pal(8, "RdPu"))