La mĂneria de texto (TM) es el proceso de extraer 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. 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 metodos mĂĄs comunes son el AnĂĄlisis de Sentimientos, la Nube de Palabras y el Topic Modeling. 3. AnĂĄlisis predictivo: Son las tecnicas y modelos estadĂsticos para predecir resultados futuros. Los modelos mĂĄs usados son Random Forest, Redes Neuronales y Regressiones.
#Data Wrangling
library(tidyverse)
#OCR
#install.packages("tesseract")
library(tesseract)
#PNG
#install.packages("magick")
library(magick)
#Office (word)
#install.packages("officer")
library(officer)
#PDF
#install.packages("pdftools")
library(pdftools)
#Para la funciĂłn map para aplicar la funciĂłn a cada elemento de un vector
#install.packages("purrr")
library(purrr)
#Text Mining
#install.packages("tm")
library(tm)
#Colores
#install.packages("RColorBrewer")
library(RColorBrewer)
#Nube de Palabras
#install.packages("wordcloud")
library(wordcloud)
#Modelos de temas
#install.packages("topicmodels")
library(topicmodels)
#Graficas con mas diseño
#install.packages("ggplot2")
library(ggplot2)
imagen1 <- image_read("/Users/valeriacantulobo/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") #Pego el texto en el word
print(doc1, target = "texto1.docx") #Guarda el word en la computadora
imagen2 <- image_read("/Users/valeriacantulobo/Downloads/imagen2.PNG")
tesseract_download("spa")
## [1] "/Users/valeriacantulobo/Library/Application Support/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") #Pego el texto en el word
print(doc2, target = "texto2.docx") #Guarda el word en la computadora
pdf1 <- pdf_convert("/Users/valeriacantulobo/Downloads/pdf1.pdf", dpi=600) %>% map(ocr)
## Converting page 1 to pdf1_1.png... done!
## Converting page 2 to pdf1_2.png... done!
## Converting page 3 to pdf1_3.png... done!
## Converting page 4 to pdf1_4.png... done!
## Converting page 5 to pdf1_5.png... done!
## Converting page 6 to pdf1_6.png... done!
## Converting page 7 to pdf1_7.png... done!
## Converting page 8 to pdf1_8.png... done!
pdf2 <- pdf_convert("/Users/valeriacantulobo/Downloads/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!
imagen3 = image_read("/Users/valeriacantulobo/eso3_1.png")
tesseract_download("spa")
## [1] "/Users/valeriacantulobo/Library/Application Support/tesseract5/tessdata/spa.traineddata"
texto3 <- ocr(imagen3, engine = tesseract("spa"))
texto3
## [1] "Y alli estaba, persiguiendo su barco de papel por el lado izquierdo de Witcham Street. CorrĂa\ndeprisa, pero el agua le ganaba y el barquito estaba sacando ventaja. OyĂł un rugido profundo y\nvio cĂłmo cincuenta metros mĂĄs adelante, colina abajo, el agua de la cuneta se precipitaba\ndentro de una boca de tormenta que aĂșn 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 hundiĂł en aquellas fauces. AllĂ pendiĂł por un momento y luego se deslizĂł\nhacia el interior. Hacia allĂ se encaminaba su bote.\n\nâ ÂĄMierda! âchillĂł horrorizado.\n\nForzĂł el paso y, por un momento, pareciĂł que iba a alcanzar al barquito. Pero uno de sus ples\nresbalĂł y George cayo despatarrado despellejĂĄndose 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,\nmomentĂĄneamente atrapado en otro remolino, antes de desaparecer.\n\nâ|ÂĄMierda y mĂĄs mierda! âvolviĂł a chillar, estrellando el puño contra el pavimento.\n\nEso tambiĂ©n doliĂł, y se echĂł a sollozar. ÂĄQuĂ© manera tan estupida de perder el barco!\n\nSe levantĂł para caminar hacia la boca de tormenta y allĂ se dejĂł caer de rodillas, para mirar hacia\nel interior. El agua hacĂa un ruido hueco y hĂșmedo al caer en la oscuridad. Ese sonido le daba\nescalofrios. HacĂa pensar en..\n\nâ|ÂĄEh!\n\nLa exclamaciĂłn le fue arrancada como con un cordel. RetrocedioĂł.\n\nAllĂ adentro habĂa unos ojos amarillos. Ese tipo de ojos que el siempre imaginaba, sin verlos\nnunca, en la oscuridad del sĂłtano. Es un animal âpenso, incoherenteâ,; eso es todo: un animal; a lo\nmejor un gato que quedĂł 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. SintiĂł la ĂĄspera superficie del pavimento bajo los dedos y la fina lĂĄmina de agua frĂa\nque corrĂa alrededor. Se vio a sĂ mismo levantĂĄndose y retrocediendo. Y fue entonces cuando\nuna voz, una voz perfectamente razonable y bastante simpĂĄtica, le hablĂł desde dentro de la\nboca de tormenta:\n\nâHola, George âdijo.\n\nGeorge parpadeo y volviĂł a mirar. Apenas podĂa dar crĂ©dito a lo que vela; era como algo sacado\nde un cuento o de una pelĂcula donde uno sabe que los animales hablan y bailan. Si hubiera\ntenido diez años mĂĄs, no habria creido en lo que estaba viendo; pero no tenia diecisĂ©is años, sino\nseis.\n\nEn la boca de tormenta habia un payaso. La luz distaba de ser buena, pero bastĂł 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 sĂĄbados por la mañana. BĂșfalo Bob era el Ășnico que entendĂa a Clarabell, y eso\nsiempre hacia reir a George. La cara del payaso metido en la boca de tormenta era blanca; tenia\ncĂłmicos mechones de pelo rojo a cada lado de la calva y una gran sonrisa de payaso pintada\n"
doc3 <- read_docx()
doc3 <- doc3%>% body_add_par(texto3, style = "Normal")
imagen4 = image_read("/Users/valeriacantulobo/eso3_2.png")
texto4 <- ocr(imagen4, engine = tesseract("spa"))
texto4
## [1] "alrededor de la boca. Si George hubiese vivido años despuĂ©s, habria pensado en Ronald\nMcDonald antes que en Bozo o en Clarabell.\n\nEl payaso tenĂa 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 sonrela.\n\nGeorge tambiĂ©n sonriĂł. No podĂa evitarlo; aquella sonrisa era del tipo que uno devuelve sin\nquerer.\n\nâPor supuesto.\n\nEl payaso se echĂł a reir.\n\nâ«Por supuesto». ÂĄAsĂ me gusta! ÂĄAsĂ me gusta! ÂżY un globo? ÂżQue te parece? ÂżQuieres un globoâ\nâBueno.. sĂ, por supuesto. âAlargĂł la mano, pero de inmediato la retirĂł contra su voluntadâ. No\ndebo coger nada que me ofrezca un desconocido. Lo dice mi papĂĄ.\n\nâY tu papa tiene mucha razĂłn âreplicĂł el payaso de la boca de tormenta sonriendo. George se\npreguntĂł cĂłmo podia haber creido que sus ojos eran amarillos, si eran de un color azul brillante,\nbailarin, como los ojos de su mamĂĄ y de Bill â. MuchĂsima razĂłn, ya lo creo. Por lo tanto, voy a\npresentarme. George, soy el señor Bob Gray, tambiĂ©n conocido como Pennywise, el payaso\nBallarin. 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 soltĂł una risita.\n\nâCorrecto. âVolviĂł a estirar la mano.. y a retirarlaâ. ÂżCĂłmo te metiste alli adentro?\n\nâLa tormenta me trajo volaaaando âdijo Pennywise, el payaso Bailarinâ. Se llevĂł todo el circo.\nÂżNo sientes olor a circo, George?\n\nGeorge se inclinĂł hacia adelante. ÂĄDe pronto olĂa a cacahuetes! ÂĄCacahuetes tostados! ÂĄY vinagre\nblanco, del que se pone en las patatas fritas por un agujero de la tapa! Y olĂa a algodĂłn de\nazucar, a buñuelos, y tambiĂ©n, leve, pero poderosamente, a estiercol de animales salvajes. Olia el\naroma regocijante del aserrin. Y sin embargo..\n\nSin embargo, bajo todo eso olĂa a inundaciĂłn, a hojas deshechas y a oscuras sombras en bocas\nde tormenta. Era un olor hĂșmedo y putrido. El olor del sĂłtano.\n\nPero los otros olores eran mĂĄs fuertes.\n\nâClaro que lo huelo âdijo.\n\nâÂżQuieres tu barquito, George? âpreguntĂł Pennywiseâ. Te lo pregunto otra vez porque no\npareces desearlo mucho.\n"
doc3 <- doc3%>% body_add_par(texto4, style = "Normal")
imagen5 = image_read("/Users/valeriacantulobo/eso3_3.png")
texto5 <- ocr(imagen5, engine = tesseract("spa"))
texto5
## [1] "Y lo mostrĂł en alto, sonriendo. Llevaba un traje de seda abolsado con grandes botones color\nnaranja. Una corbata brillante, de color azul elĂ©ctrico, 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 acentuĂłâ. Oh, sĂ, claro que sĂ. ÂĄFlotan! TambiĂ©n tengo\nalgodĂłn de azucar.\n\nGeorge estirĂł la mano.\n\nEl payaso le sujeto el brazo.\n\nY entonces George vio cĂłmo la cara del payaso cambiaba.\n\nLo que vio entonces fue tan terrible que lo peor que habĂa imaginado sobre la cosa del sĂłtano\nparecĂa un dulce sueño. Lo que vio destruyĂł su cordura de un zarpazo.\n\nâFlotan âcroĂł la cosa de la alcantarilla con una voz que reĂa como entre coĂĄgulos.\n\nSujetaba el brazo de George con su puño grueso y agusanado. TirĂł de Ă©l hacia esa horrible\noscuridad por donde el agua corrĂa y rugĂa y aullaba llevando hacia el mar los desechos de la\ntormenta. George estirĂł el cuello para apartarse de esa negrura definitiva y empezĂł a gritar hacia\nla lluvia, a gritar como un loco hacia el gris cielo otoñal que se curvaba sobre Derry aquel dĂa de\notoño de 1957. Sus gritos eran agudos y penetrantes y a lo largo de toda la calle, la gente se\nasomĂł a las ventanas o se lanzĂł a los porches.\n\nâFlotan âgruñó la cosaâ, flotan, Georgie. Y cuando estĂ©s aqui abajo, conmigo, tĂș tambiĂ©n\nflotarĂĄs.\n\nEl hombro de George se clavĂł contra el cemento del bordillo. Dave Gardener, que ese dĂa no\nhabia ido a trabajar al Shoeboat debido a la inundaciĂłn, vio sĂłlo a un niño de impermeable\namarillo, un niño que gritaba y se retorcia en el arroyo mientras el agua lodosa le corrĂa sobre la\ncara haciendo que sus alaridos sonaran burbujeantes.\n\nâAqui abajo todo flota âsusurrĂł esa voz podrida, riendo, y de pronto sonĂł un desgarro y hubo\nun destello de agonĂa y George Denbrough ya no supo mĂĄs.\n\nDave Gardener fue el primero en llegar. Aunque llegĂł sĂłlo cuarenta y cinco segundos despuĂ©s\ndel primer grito, George Denbrough ya habia muerto. Gardener lo agarrĂł por el impermeable, tirĂł\nde Ă©l hasta sacarlo a la calle.. y al girar en sus manos el cuerpo de George, tambiĂ©n el empezĂł a\ngritar. El lado izquierdo del impermeable del niño estaba de un rojo intenso. La sangre fluĂa hacia\nla alcantarilla desde el agujero donde habĂa estado el brazo izquierdo. Un trozo de hueso,\nhorriblemente brillante, asomaba por la tela rota.\n\nLos ojos del niño miraban fijamente el cielo gris y mientras Dave retrocedĂa a tropezones hacia\nlos otros que ya corrian por la calle, empezaron a llenarse de lluvia.\n"
doc3 <- doc3%>% body_add_par(texto5, style = "Normal")
print(doc3, target = "doc3.docx")
# Cargar las librerĂas necesarias
library(tm)
library(wordcloud)
library(RColorBrewer)
library(officer)
# Leer el documento .docx
doc <- read_docx("/Users/valeriacantulobo/Desktop/doc3.docx")
# Extraer el texto del documento
texto <- docx_summary(doc)
texto_completo <- paste(texto$text, collapse=" ")
# Crear un corpus del texto
corpus <- Corpus(VectorSource(texto_completo))
# Preprocesar el texto
corpus <- tm_map(corpus, content_transformer(tolower)) # Convertir a minĂșsculas
corpus <- tm_map(corpus, removePunctuation) # Quitar puntuaciĂłn
corpus <- tm_map(corpus, removeNumbers) # Quitar nĂșmeros
corpus <- tm_map(corpus, removeWords, stopwords("spanish")) # Quitar stopwords en español
corpus <- tm_map(corpus, stripWhitespace) # Quitar espacios en blanco adicionales
# Crear una tabla de frecuencias de las palabras
dtm <- TermDocumentMatrix(corpus)
matriz <- as.matrix(dtm)
frecuencia <- sort(rowSums(matriz), decreasing=TRUE)
frecuencia_df <- data.frame(word = names(frecuencia), freq = frecuencia)
ggplot(head(frecuencia_df, 10), aes(x = reorder(word, -freq), y = freq, fill = freq)) +
geom_col() + # Dibuja las barras permitiendo gradiente de color
geom_text(aes(label = freq), vjust = -0.3) + # Añade nĂșmeros encima de las barras
scale_fill_gradient(low = "lightblue", high = "blue", limits = c(0, 30)) + # Gradiente de azul con escala de 0 a 20
labs(title = "TOP 10 Palabras MĂĄs Frecuentes",
subtitle = "IT: 3 CapĂtulos",
x = "Palabra",
y = "Frecuencia") +
theme_minimal()
# Generar la nube de palabras
set.seed(123)
wordcloud(words = frecuencia_df$word, freq = frecuencia_df$freq, min.freq = 2,
random.order=FALSE, rot.per=0.35, colors=brewer.pal(8, "Dark2"), scale=c(4,0.5))