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 3 etapas:

  1. Obtener datos: El Reconocimiento óptimo 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 comúnes son el Análisis de Sentimientos, la Nube de Palabras y el Topic Modeling.

  3. Análisis predictivo: Son las únicas técnicas y modelos estadísticos para predecir resultados futuros. Los modelos más usados son el Random Forest, redes neuronales y regresiones.

Instalación de Paquetes y Librerías

#install.packages("tidyverse")
library(tidyverse) 

#install.packages("tesseract")
library(tesseract) 

#install.packages("magick")
library(magick) 

#install.packages("officer")
library(officer)

#install.packages("pdftools")
library(pdftools) 

#install.packages("purrr")
library(purrr) 

#install.packages("tm")
library(tm) 

#install.packages("RColorBrewer")
library(RColorBrewer) 

#install.packages("wordcloud")
library(wordcloud) 

#install.packages("topicmodels")
library(topicmodels) 

#install.packages("ggplot2")
library(ggplot2)

1. Obtener Datos mediante OCR

De imagen en inglés PNG a texto en WORD

imagen1 <- image_read("/Users/gabrielmedina/Downloads/M2/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 documento word en blanco
doc1 <- doc1 %>% body_add_par(texto1, style = "Normal") #Pega el texto en el word
# print(doc1, target = "texto1.docx")

De imagen en español PNG a texto en WORD

Consultar idiomas disponibles

imagen2 <- image_read("/Users/gabrielmedina/Downloads/M2/imagen2.png")
#tesseract_download("spa")
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 documento word en blanco
doc2 <- doc2 %>% body_add_par(texto2, style = "Normal") #Pega el texto en el word
#print(doc2, target = "texto2.docx")

De PDF a texto en WORD

# pdf1 = pdf_convert("/Users/gabrielmedina/Downloads/M2/pdf1.pdf", dpi = 600) %>% map(ocr)

Actividad 1: Novela “IT”

#it = pdf_convert("/Users/gabrielmedina/Downloads/M2/eso3.pdf", dpi = 600)


eso3_1 <- image_read("/Users/gabrielmedina/Downloads/M2/eso_1.png")

texto3_1 <- ocr(eso3_1, engine = tesseract("spa"))
texto3_1
## [1] "Y allí 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 semicírculo 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—iMierda! —chilló horrorizado.\n\nForzó el paso y, por un momento, pareció que iba a alcanzar al barquito. Pero uno de sus pies\nresbaló y George cayó 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—i¡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 estúpida 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\nescalofríos. Hacía pensar en..\n\n—iEh!\n\nLa exclamación le fue arrancada como con un cordel. Retrocedió.\n\nAllí adentro había unos ojos amarillos. Ese tipo de ojos que él siempre imaginaba, sin verlos\nnunca, en la oscuridad del sótano. Es un animal —pensó, incoherente—,; eso es todo: un animal; a lo\nmejor un gato que quedó atrapado...\n\nDe todos modos, estaba por echar a correr; habría 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 parpadeó y volvió a mirar. Apenas podía dar crédito a lo que veía; 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 habría creído en lo que estaba viendo; pero no tenía dieciséis años, sino\nseis.\n\nEn la boca de tormenta había un payaso. La luz distaba de ser buena, pero bastó para que\nGeorge Denbrough estuviese seguro de lo que veía. Era un payaso, como en el circo o en la tele.\nParecía 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 hacía reír a George. La cara del payaso metido en la boca de tormenta era blanca; tenía\ncómicos mechones de pelo rojo a cada lado de la calva y una gran sonrisa de payaso pintada\n"
eso3_2 <- image_read("/Users/gabrielmedina/Downloads/M2/eso_2.png")

texto3_2 <- ocr(eso3_2, engine = tesseract("spa"))
texto3_2
## [1] "alrededor de la boca. Si George hubiese vivido años después, habría 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 sonreía.\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 reír.\n\n—<Por supuesto». ¡Así me gusta! ¡Así me gusta! ¿Y un globo? ¿Qué 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 papá tiene mucha razón —replicó el payaso de la boca de tormenta sonriendo. George se\npreguntó cómo podía haber creído que sus ojos eran amarillos, si eran de un color azul brillante,\nbailarín, 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\nBailarín. Pennywise, te presento a George Denbrough. George, te presento a Pennywise. Y ahora\nya nos conocemos. Yo no soy un desconocido y tú tampoco. ¿Correcto?\n\nGeorge soltó una risita.\n\n—Correcto. —Volvió a estirar la mano.. y a retirarla—. ¿Cómo te metiste allí 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\nazúcar, a buñuelos, y también, leve, pero poderosamente, a estiércol de animales salvajes. Olía el\naroma regocijante del aserrín. 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 pútrido. 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"
eso3_3 <- image_read("/Users/gabrielmedina/Downloads/M2/eso_3.png")

texto3_3 <- ocr(eso3_3, engine = tesseract("spa"))
texto3_3
## [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=Sí, 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í. iFlotan! También tengo\nalgodón de azúcar...\n\nGeorge estiró la mano.\n\nEl payaso le sujetó 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 aquí 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\nhabía 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 retorcía en el arroyo mientras el agua lodosa le corría sobre la\ncara haciendo que sus alaridos sonaran burbujeantes.\n\n—Aquí 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 había 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 él 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 corrían por la calle, empezaron a llenarse de lluvia.\n"
documento3 <- read_docx() #Crea documento word en blanco

documento3 <- documento3 %>%
  body_add_par(texto3_1, style = "Normal") %>%
  body_add_par(texto3_2, style = "Normal") %>%
  body_add_par(texto3_3, style = "Normal")


#print(documento, target = "texto.docx")

2. Exploración de Datos

Análisis de Frecuencias

text <- readLines("http://www.sthda.com/sthda/RDoc/example-files/martin-luther-king-i-have-a-dream-speech.txt")

corpus <- Corpus(VectorSource(text)) #Pone cada renglón en una celda de vector
corpus <- tm_map(corpus, content_transformer(tolower)) #Poner en minúsculas todo el texto
## Warning in tm_map.SimpleCorpus(corpus, content_transformer(tolower)):
## transformation drops documents
corpus <- tm_map(corpus, removePunctuation) #Elimina puntuación
## Warning in tm_map.SimpleCorpus(corpus, removePunctuation): transformation drops
## documents
corpus <- tm_map(corpus, removeNumbers) #Elimina números
## Warning in tm_map.SimpleCorpus(corpus, removeNumbers): transformation drops
## documents
corpus <- tm_map(corpus, removeWords, stopwords("eng")) #Elimina stopwords (palabras que no hablan del tema)
## Warning in tm_map.SimpleCorpus(corpus, removeWords, stopwords("eng")):
## transformation drops documents
#corpus <- tm_map(corpus, removeWords, c("dream", "will")) #Elimina palabras puntuales


inspect(corpus)
## <<SimpleCorpus>>
## Metadata:  corpus specific: 1, document level (indexed): 0
## Content:  documents: 46
## 
##  [1]                                                                                                                                                                                                                                                                                                       
##  [2]   even though  face  difficulties  today  tomorrow  still   dream    dream deeply rooted   american dream                                                                                                                                                                                             
##  [3]                                                                                                                                                                                                                                                                                                       
##  [4]    dream  one day  nation will rise   live   true meaning   creed                                                                                                                                                                                                                                     
##  [5]                                                                                                                                                                                                                                                                                                       
##  [6]  hold  truths   selfevident   men  created equal                                                                                                                                                                                                                                                      
##  [7]                                                                                                                                                                                                                                                                                                       
##  [8]    dream  one day   red hills  georgia  sons  former slaves   sons  former slave owners will  able  sit  together   table  brotherhood                                                                                                                                                                
##  [9]                                                                                                                                                                                                                                                                                                       
## [10]    dream  one day even  state  mississippi  state sweltering   heat  injustice sweltering   heat  oppression will  transformed   oasis  freedom  justice                                                                                                                                              
## [11]                                                                                                                                                                                                                                                                                                       
## [12]    dream   four little children will one day live   nation   will   judged   color   skin    content   character                                                                                                                                                                                      
## [13]                                                                                                                                                                                                                                                                                                       
## [14]    dream today                                                                                                                                                                                                                                                                                        
## [15]                                                                                                                                                                                                                                                                                                       
## [16]    dream  one day   alabama   vicious racists   governor   lips dripping   words  interposition  nullification one day right   alabama little black boys  black girls will  able  join hands  little white boys  white girls  sisters  brothers                                                       
## [17]                                                                                                                                                                                                                                                                                                       
## [18]    dream today                                                                                                                                                                                                                                                                                        
## [19]                                                                                                                                                                                                                                                                                                       
## [20]    dream  one day every valley shall  exalted  every hill  mountain shall  made low  rough places will  made plain   crooked places will  made straight   glory   lord shall  revealed   flesh shall see  together                                                                                    
## [21]                                                                                                                                                                                                                                                                                                       
## [22]    hope     faith   go back   south                                                                                                                                                                                                                                                                   
## [23]                                                                                                                                                                                                                                                                                                       
## [24]   faith  will  able  hew    mountain  despair  stone  hope   faith  will  able  transform  jangling discords   nation   beautiful symphony  brotherhood   faith  will  able  work together  pray together  struggle together  go  jail together  stand   freedom together knowing   will  free one day
## [25]                                                                                                                                                                                                                                                                                                       
## [26]   will   day  will   day    god s children will  able  sing  new meaning                                                                                                                                                                                                                              
## [27]                                                                                                                                                                                                                                                                                                       
## [28]  country  tis  thee sweet land  liberty  thee  sing                                                                                                                                                                                                                                                   
## [29] land   fathers died land   pilgrim s pride                                                                                                                                                                                                                                                            
## [30]  every mountainside let freedom ring                                                                                                                                                                                                                                                                  
## [31]   america     great nation  must become true                                                                                                                                                                                                                                                          
## [32]   let freedom ring   prodigious hilltops  new hampshire                                                                                                                                                                                                                                               
## [33] let freedom ring   mighty mountains  new york                                                                                                                                                                                                                                                         
## [34] let freedom ring   heightening alleghenies  pennsylvania                                                                                                                                                                                                                                              
## [35] let freedom ring   snowcapped rockies  colorado                                                                                                                                                                                                                                                       
## [36] let freedom ring   curvaceous slopes  california                                                                                                                                                                                                                                                      
## [37]                                                                                                                                                                                                                                                                                                       
## [38]                                                                                                                                                                                                                                                                                                       
## [39] let freedom ring  stone mountain  georgia                                                                                                                                                                                                                                                             
## [40] let freedom ring  lookout mountain  tennessee                                                                                                                                                                                                                                                         
## [41] let freedom ring  every hill  molehill  mississippi                                                                                                                                                                                                                                                   
## [42]  every mountainside let freedom ring                                                                                                                                                                                                                                                                  
## [43]    happens   allow freedom ring   let  ring  every village  every hamlet  every state  every city  will  able  speed   day    god s children black men  white men jews  gentiles protestants  catholics will  able  join hands  sing   words   old negro spiritual                                    
## [44] free  last free  last                                                                                                                                                                                                                                                                                 
## [45]                                                                                                                                                                                                                                                                                                       
## [46] thank god almighty   free  last
tdm <- TermDocumentMatrix(corpus) 
m <- as.matrix(tdm)#Cuenta las veces que aparece cada palabra por renglón


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)
frecuencia_df #convierte la frecuencia en un data frame
##                        word freq
## will                   will   17
## freedom             freedom   13
## ring                   ring   12
## dream                 dream   11
## day                     day   11
## let                     let   11
## every                 every    9
## one                     one    8
## able                   able    8
## together           together    7
## nation               nation    4
## mountain           mountain    4
## shall                 shall    4
## faith                 faith    4
## free                   free    4
## today                 today    3
## men                     men    3
## state                 state    3
## children           children    3
## little               little    3
## black                 black    3
## white                 white    3
## made                   made    3
## god                     god    3
## new                     new    3
## sing                   sing    3
## land                   land    3
## last                   last    3
## even                   even    2
## live                   live    2
## meaning             meaning    2
## true                   true    2
## brotherhood     brotherhood    2
## former               former    2
## georgia             georgia    2
## sons                   sons    2
## heat                   heat    2
## mississippi     mississippi    2
## sweltering       sweltering    2
## alabama             alabama    2
## boys                   boys    2
## girls                 girls    2
## hands                 hands    2
## join                   join    2
## words                 words    2
## hill                   hill    2
## places               places    2
## hope                   hope    2
## stone                 stone    2
## thee                   thee    2
## mountainside   mountainside    2
## american           american    1
## deeply               deeply    1
## difficulties   difficulties    1
## face                   face    1
## rooted               rooted    1
## still                 still    1
## though               though    1
## tomorrow           tomorrow    1
## creed                 creed    1
## rise                   rise    1
## created             created    1
## equal                 equal    1
## hold                   hold    1
## selfevident     selfevident    1
## truths               truths    1
## hills                 hills    1
## owners               owners    1
## red                     red    1
## sit                     sit    1
## slave                 slave    1
## slaves               slaves    1
## table                 table    1
## injustice         injustice    1
## justice             justice    1
## oasis                 oasis    1
## oppression       oppression    1
## transformed     transformed    1
## character         character    1
## color                 color    1
## content             content    1
## four                   four    1
## judged               judged    1
## skin                   skin    1
## brothers           brothers    1
## dripping           dripping    1
## governor           governor    1
## interposition interposition    1
## lips                   lips    1
## nullification nullification    1
## racists             racists    1
## right                 right    1
## sisters             sisters    1
## vicious             vicious    1
## crooked             crooked    1
## exalted             exalted    1
## flesh                 flesh    1
## glory                 glory    1
## lord                   lord    1
## low                     low    1
## plain                 plain    1
## revealed           revealed    1
## rough                 rough    1
## see                     see    1
## straight           straight    1
## valley               valley    1
## back                   back    1
## south                 south    1
## beautiful         beautiful    1
## despair             despair    1
## discords           discords    1
## hew                     hew    1
## jail                   jail    1
## jangling           jangling    1
## knowing             knowing    1
## pray                   pray    1
## stand                 stand    1
## struggle           struggle    1
## symphony           symphony    1
## transform         transform    1
## work                   work    1
## country             country    1
## liberty             liberty    1
## sweet                 sweet    1
## tis                     tis    1
## died                   died    1
## fathers             fathers    1
## pilgrim             pilgrim    1
## pride                 pride    1
## america             america    1
## become               become    1
## great                 great    1
## must                   must    1
## hampshire         hampshire    1
## hilltops           hilltops    1
## prodigious       prodigious    1
## mighty               mighty    1
## mountains         mountains    1
## york                   york    1
## alleghenies     alleghenies    1
## heightening     heightening    1
## pennsylvania   pennsylvania    1
## colorado           colorado    1
## rockies             rockies    1
## snowcapped       snowcapped    1
## california       california    1
## curvaceous       curvaceous    1
## slopes               slopes    1
## lookout             lookout    1
## tennessee         tennessee    1
## molehill           molehill    1
## allow                 allow    1
## catholics         catholics    1
## city                   city    1
## gentiles           gentiles    1
## hamlet               hamlet    1
## happens             happens    1
## jews                   jews    1
## negro                 negro    1
## old                     old    1
## protestants     protestants    1
## speed                 speed    1
## spiritual         spiritual    1
## village             village    1
## almighty           almighty    1
## thank                 thank    1
ggplot(head(frecuencia_df, 10), aes(x = reorder(word, -freq), y = freq)) +
  geom_bar(stat = "identity", fill = "blue")+
  labs(x= "Palabra", y = "Frecuencia", title = "Top 10 Palabras en el discurso de Martin Luther King")+
  geom_text(aes(label = freq), vjust = -0.5) +
  ylim(0,20)

Nube de Palabras

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, "OrRd"))

Ejercicio 2. Novela “IT”

Análisis de Frecuencias

text2 <- readLines("/Users/gabrielmedina/Downloads/M2/texto1.txt")


texto_sin_acentos <- iconv(text2, to = "ASCII//TRANSLIT")

corpus <- Corpus(VectorSource(texto_sin_acentos))
corpus <- tm_map(corpus, content_transformer(tolower)) #Poner en minúsculas todo el texto
## Warning in tm_map.SimpleCorpus(corpus, content_transformer(tolower)):
## transformation drops documents
corpus <- tm_map(corpus, removePunctuation) #Elimina puntuación
## Warning in tm_map.SimpleCorpus(corpus, removePunctuation): transformation drops
## documents
corpus <- tm_map(corpus, removeNumbers) #Elimina números
## Warning in tm_map.SimpleCorpus(corpus, removeNumbers): transformation drops
## documents
corpus <- tm_map(corpus, removeWords, stopwords("spanish")) #Elimina stopwords (palabras que no hablan del tema)
## Warning in tm_map.SimpleCorpus(corpus, removeWords, stopwords("spanish")):
## transformation drops documents
#corpus <- tm_map(corpus, removeWords, c("dream", "will")) #Elimina palabras puntuales


inspect(corpus)
## <<SimpleCorpus>>
## Metadata:  corpus specific: 1, document level (indexed): 0
## Content:  documents: 3
## 
## [1]   alli  persiguiendo  barco  papel   lado izquierdo  witcham street corria deprisa   agua  ganaba   barquito  sacando ventaja oyo  rugido profundo  vio  cincuenta metros mas adelante colina abajo  agua   cuneta  precipitaba dentro   boca  tormenta  aun continuaba abierta   largo semicirculo oscuro abierto   bordillo   acera  mientras george miraba  rama desgarrada   corteza oscura  reluciente  hundio  aquellas fauces alli pendio   momento  luego  deslizo hacia  interior hacia alli  encaminaba  bote   mierda chillo horrorizado  forzo  paso    momento parecio  iba  alcanzar  barquito     ples resbalo  george cayo despatarrado despellejandose  rodilla   grito  dolor   nueva perspectiva   altura  pavimento vio   barco giraba  redondo dos veces momentaneamente atrapado   remolino   desaparecer  mierda  mas mierda volvio  chillar estrellando  puno   pavimento   tambien dolio   echo  sollozar  manera tan estupida  perder  barco   levanto  caminar hacia  boca  tormenta  alli  dejo caer  rodillas  mirar hacia  interior  agua hacia  ruido hueco  humedo  caer   oscuridad  sonido  daba escalofrios hacia pensar   eh   exclamacion   arrancada    cordel retrocedioo  alli adentro habia  ojos amarillos  tipo  ojos   siempre imaginaba  verlos nunca   oscuridad  sotano   animal penso incoherente     animal   mejor  gato  quedo atrapado    modos   echar  correr habria corrido   dos segundos   tablero mental   hecho cargo  espanto   produjeron  dos ojos amarillos  brillantes sintio  aspera superficie  pavimento bajo  dedos   fina lamina  agua fria  corria alrededor  vio  si mismo levantandose  retrocediendo   entonces   voz  voz perfectamente razonable  bastante simpatica  hablo  dentro   boca  tormenta  hola george dijo  george parpadeo  volvio  mirar apenas podia dar credito    vela    sacado   cuento    pelicula   sabe   animales hablan  bailan si   diez anos mas  habria creido     viendo   tenia dieciseis anos sino seis    boca  tormenta habia  payaso  luz distaba  ser buena  basto   george denbrough  seguro    veia   payaso    circo    tele parecia  mezcla  bozo  clarabell   hablaba haciendo sonar  bocina  howdy doody  sabados   manana bufalo bob   unico  entendia  clarabell   siempre hacia reir  george  cara  payaso metido   boca  tormenta  blanca tenia comicos mechones  pelo rojo  cada lado   calva   gran sonrisa  payaso pintada  
## [2]   alrededor   boca si george  vivido anos despues habria pensado  ronald mcdonald    bozo   clarabell   payaso tenia   mano  manojo  globos    colores  tentadora fruta madura      barquito  papel  george  quieres  barquito georgie  payaso sonrela  george tambien sonrio  podia evitarlo aquella sonrisa   tipo   devuelve  querer   supuesto   payaso  echo  reir   supuesto asi  gusta asi  gusta   globo   parece quieres  globo bueno si  supuesto alargo  mano   inmediato  retiro   voluntad  debo coger    ofrezca  desconocido  dice  papa    papa  mucha razon replico  payaso   boca  tormenta sonriendo george  pregunto  podia haber creido   ojos  amarillos si    color azul brillante bailarin   ojos   mama   bill  muchisima razon   creo    voy  presentarme george   senor bob gray tambien conocido  pennywise  payaso ballarin pennywise  presento  george denbrough george  presento  pennywise  ahora   conocemos     desconocido   tampoco correcto  george solto  risita  correcto volvio  estirar  mano   retirarla   metiste alli adentro   tormenta  trajo volaaaando dijo pennywise  payaso bailarin  llevo   circo  sientes olor  circo george  george  inclino hacia adelante  pronto olia  cacahuetes cacahuetes tostados  vinagre blanco    pone   patatas fritas   agujero   tapa  olia  algodon  azucar  bunuelos  tambien leve  poderosamente  estiercol  animales salvajes olia  aroma regocijante  aserrin   embargo   embargo bajo   olia  inundacion  hojas deshechas   oscuras sombras  bocas  tormenta   olor humedo  putrido  olor  sotano     olores  mas fuertes  claro   huelo dijo  quieres  barquito george pregunto pennywise   pregunto  vez   pareces desearlo                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
## [3]     mostro  alto sonriendo llevaba  traje  seda abolsado  grandes botones color naranja  corbata brillante  color azul electrico   derramaba   pechera   manos llevaba grandes guantes blancos  mickey  donald  si claro dijo george mirando dentro   boca  tormenta    globo   rojos verdes amarillos azules  flotan   si flotan  sonrisa  payaso  acentuo oh si claro  si flotan tambien  algodon  azucar  george estiro  mano   payaso  sujeto  brazo   entonces george vio   cara  payaso cambiaba    vio entonces  tan terrible   peor  habia imaginado   cosa  sotano parecia  dulce sueno   vio destruyo  cordura   zarpazo  flotan croo  cosa   alcantarilla   voz  reia   coagulos  sujetaba  brazo  george   puno grueso  agusanado tiro   hacia  horrible oscuridad    agua corria  rugia  aullaba llevando hacia  mar  desechos   tormenta george estiro  cuello  apartarse   negrura definitiva  empezo  gritar hacia  lluvia  gritar   loco hacia  gris cielo otonal   curvaba  derry aquel dia  otono    gritos  agudos  penetrantes    largo  toda  calle  gente  asomo   ventanas   lanzo   porches  flotan gruno  cosa flotan georgie   estes aqui abajo conmigo  tambien flotaras   hombro  george  clavo   cemento  bordillo dave gardener   dia  habia ido  trabajar  shoeboat debido   inundacion vio solo   nino  impermeable amarillo  nino  gritaba   retorcia   arroyo mientras  agua lodosa  corria   cara haciendo   alaridos sonaran burbujeantes  aqui abajo  flota susurro  voz podrida riendo   pronto sono  desgarro    destello  agonia  george denbrough   supo mas  dave gardener   primero  llegar aunque llego solo cuarenta  cinco segundos despues  primer grito george denbrough  habia muerto gardener  agarro   impermeable tiro    sacarlo   calle   girar   manos  cuerpo  george tambien  empezo  gritar  lado izquierdo  impermeable  nino    rojo intenso  sangre fluia hacia  alcantarilla   agujero  habia   brazo izquierdo  trozo  hueso horriblemente brillante asomaba   tela rota   ojos  nino miraban fijamente  cielo gris  mientras dave retrocedia  tropezones hacia     corrian   calle empezaron  llenarse  lluvia
tdm <- TermDocumentMatrix(corpus) 
m <- as.matrix(tdm)#Cuenta las veces que aparece cada palabra por renglón


frecuencia <- sort(rowSums(m), decreasing = TRUE) #Cuenta la frecuencia de cada palabra en el texto completo

frecuencia_df2 <- data.frame(word=names(frecuencia), freq=frecuencia) #convierte la frecuencia en un data frame

ggplot(head(frecuencia_df2, 10), aes(x = reorder(word, -freq), y = freq)) +
  geom_bar(stat = "identity", fill = "blue")+
  labs(x= "Palabra", y = "Frecuencia", title = "Top 10 Palabras en el Capítulo 3 de IT")+
  geom_text(aes(label = freq), vjust = -0.5) +
  ylim(0,30)

Nube de Palabras

set.seed(123)
wordcloud(words= frecuencia_df2$word, freq=frecuencia_df2$freq, min.freq = 3, random.order = FALSE, colors = brewer.pal(8, "Spectral"))

LS0tCnRpdGxlOiAiSVQgLSBUZXh0IE1pbmluZyIKYXV0aG9yOiAiR2FicmllbCBNZWRpbmEgLSBBMDEyNzU3NjMiCmRhdGU6ICIyMDI0LTAyLTIwIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIGNvZGVfZm9sZGluZzogaGlkZQogICAgdG9jOiB5ZXMKICAgIHRvY19mbG9hdDogeWVzCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMKICAgIHRoZW1lOiBmbGF0bHkKICAgIGhpZ2hsaWdodDogdGFuZ28KICBwZGZfZG9jdW1lbnQ6CiAgICB0b2M6IHllcwotLS0KCgohW10oL1VzZXJzL2dhYnJpZWxtZWRpbmEvRG93bmxvYWRzL00yL2l0LmdpZikKCgojIDxzcGFuIHN0eWxlPSAiY29sb3I6IE9yYW5nZTsiPlRlb3LDrWEgPC9zcGFuPgoKTGEgKiptaW5lcsOtYSBkZSB0ZXh0byoqIChUTSkgZXMgZWwgcHJvY2VzbyBkZSBleHRyYWVyIGluZm9ybWFjacOzbiDDunRpbCwgcGF0cm9uZXMgbyBjb25vY2ltaWVudG8gZGUgdGV4dG9zIG5vIGVzdHJ1Y3R1cmFkb3MuICAKCkNvbnN0YSBkZSAzIGV0YXBhczoKCjEuIE9idGVuZXIgZGF0b3M6IEVsIFJlY29ub2NpbWllbnRvIMOzcHRpbW8gZGUgY2FyYWN0ZXJlcyAoT0NSKSBlcyB1bmEgdGVjbm9sb2fDrWEgcXVlIHBlcm1pdGUgY29udmVydGlyIGltw6FnZW5lcyBkZSB0ZXh0byBlbiB0ZXh0byBlZGl0YWJsZS4gVGFtYmnDqW4gZXMgY29ub2NpZG8gY29tbyBleHRyYWNjacOzbiBkZSB0ZXh0byBkZSBpbcOhZ2VuZXMKCjIuIEV4cGxvcmFyIGRhdG9zOiBSZXByZXNlbnRhY2nDs24gZ3LDoWZpY2EgbyB2aXN1YWwgZGUgbG9zIGRhdG9zIHBhcmEgc3UgaW50ZXJwcmV0YWNpw7NuLiBMb3MgbcOpdG9kb3MgbcOhcyBjb23Dum5lcyBzb24gZWwgQW7DoWxpc2lzIGRlIFNlbnRpbWllbnRvcywgbGEgTnViZSBkZSBQYWxhYnJhcyB5IGVsIFRvcGljIE1vZGVsaW5nLgoKMy4gQW7DoWxpc2lzIHByZWRpY3Rpdm86IFNvbiBsYXMgw7puaWNhcyB0w6ljbmljYXMgeSBtb2RlbG9zIGVzdGFkw61zdGljb3MgcGFyYSBwcmVkZWNpciByZXN1bHRhZG9zIGZ1dHVyb3MuIExvcyBtb2RlbG9zIG3DoXMgdXNhZG9zIHNvbiBlbCBSYW5kb20gRm9yZXN0LCByZWRlcyBuZXVyb25hbGVzIHkgcmVncmVzaW9uZXMuCgoKIyA8c3BhbiBzdHlsZT0gImNvbG9yOiBPcmFuZ2U7Ij5JbnN0YWxhY2nDs24gZGUgUGFxdWV0ZXMgeSBMaWJyZXLDrWFzIDwvc3Bhbj4KCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiNpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQpsaWJyYXJ5KHRpZHl2ZXJzZSkgCgojaW5zdGFsbC5wYWNrYWdlcygidGVzc2VyYWN0IikKbGlicmFyeSh0ZXNzZXJhY3QpIAoKI2luc3RhbGwucGFja2FnZXMoIm1hZ2ljayIpCmxpYnJhcnkobWFnaWNrKSAKCiNpbnN0YWxsLnBhY2thZ2VzKCJvZmZpY2VyIikKbGlicmFyeShvZmZpY2VyKQoKI2luc3RhbGwucGFja2FnZXMoInBkZnRvb2xzIikKbGlicmFyeShwZGZ0b29scykgCgojaW5zdGFsbC5wYWNrYWdlcygicHVycnIiKQpsaWJyYXJ5KHB1cnJyKSAKCiNpbnN0YWxsLnBhY2thZ2VzKCJ0bSIpCmxpYnJhcnkodG0pIAoKI2luc3RhbGwucGFja2FnZXMoIlJDb2xvckJyZXdlciIpCmxpYnJhcnkoUkNvbG9yQnJld2VyKSAKCiNpbnN0YWxsLnBhY2thZ2VzKCJ3b3JkY2xvdWQiKQpsaWJyYXJ5KHdvcmRjbG91ZCkgCgojaW5zdGFsbC5wYWNrYWdlcygidG9waWNtb2RlbHMiKQpsaWJyYXJ5KHRvcGljbW9kZWxzKSAKCiNpbnN0YWxsLnBhY2thZ2VzKCJnZ3Bsb3QyIikKbGlicmFyeShnZ3Bsb3QyKQoKYGBgCgojIDxzcGFuIHN0eWxlPSAiY29sb3I6IE9yYW5nZTsiPjEuIE9idGVuZXIgRGF0b3MgbWVkaWFudGUgT0NSIDwvc3Bhbj4KCiMjIDxzcGFuIHN0eWxlPSAiY29sb3I6IE9yYW5nZTsiPkRlIGltYWdlbiBlbiBpbmdsw6lzIFBORyBhIHRleHRvIGVuIFdPUkQgPC9zcGFuPgoKYGBge3J9CmltYWdlbjEgPC0gaW1hZ2VfcmVhZCgiL1VzZXJzL2dhYnJpZWxtZWRpbmEvRG93bmxvYWRzL00yL2ltYWdlbjEucG5nIikKdGV4dG8xIDwtIG9jcihpbWFnZW4xKQp0ZXh0bzEKCmRvYzEgPC0gcmVhZF9kb2N4KCkgI0NyZWEgZG9jdW1lbnRvIHdvcmQgZW4gYmxhbmNvCmRvYzEgPC0gZG9jMSAlPiUgYm9keV9hZGRfcGFyKHRleHRvMSwgc3R5bGUgPSAiTm9ybWFsIikgI1BlZ2EgZWwgdGV4dG8gZW4gZWwgd29yZAojIHByaW50KGRvYzEsIHRhcmdldCA9ICJ0ZXh0bzEuZG9jeCIpCgpgYGAKCgojIyA8c3BhbiBzdHlsZT0gImNvbG9yOiBPcmFuZ2U7Ij5EZSBpbWFnZW4gZW4gZXNwYcOxb2wgUE5HIGEgdGV4dG8gZW4gV09SRCA8L3NwYW4+CgoKW0NvbnN1bHRhciBpZGlvbWFzIGRpc3BvbmlibGVzXShodHRwczovL3Rlc3NlcmFjdC1vY3IuZ2l0aHViLmlvL3Rlc3Nkb2MvRGF0YS1GaWxlcy1pbi1kaWZmZXJlbnQtdmVyc2lvbnMuaHRtbCkKCmBgYHtyfQppbWFnZW4yIDwtIGltYWdlX3JlYWQoIi9Vc2Vycy9nYWJyaWVsbWVkaW5hL0Rvd25sb2Fkcy9NMi9pbWFnZW4yLnBuZyIpCiN0ZXNzZXJhY3RfZG93bmxvYWQoInNwYSIpCnRleHRvMiA8LSBvY3IoaW1hZ2VuMiwgZW5naW5lID0gdGVzc2VyYWN0KCJzcGEiKSkKdGV4dG8yCgpkb2MyIDwtIHJlYWRfZG9jeCgpICNDcmVhIGRvY3VtZW50byB3b3JkIGVuIGJsYW5jbwpkb2MyIDwtIGRvYzIgJT4lIGJvZHlfYWRkX3Bhcih0ZXh0bzIsIHN0eWxlID0gIk5vcm1hbCIpICNQZWdhIGVsIHRleHRvIGVuIGVsIHdvcmQKI3ByaW50KGRvYzIsIHRhcmdldCA9ICJ0ZXh0bzIuZG9jeCIpCmBgYAoKIyMgPHNwYW4gc3R5bGU9ICJjb2xvcjogT3JhbmdlOyI+RGUgUERGIGEgdGV4dG8gZW4gV09SRCA8L3NwYW4+CmBgYHtyfQoKIyBwZGYxID0gcGRmX2NvbnZlcnQoIi9Vc2Vycy9nYWJyaWVsbWVkaW5hL0Rvd25sb2Fkcy9NMi9wZGYxLnBkZiIsIGRwaSA9IDYwMCkgJT4lIG1hcChvY3IpCgpgYGAKCiMjIDxzcGFuIHN0eWxlPSAiY29sb3I6IE9yYW5nZTsiPkFjdGl2aWRhZCAxOiBOb3ZlbGEgIklUIiA8L3NwYW4+CmBgYHtyfQojaXQgPSBwZGZfY29udmVydCgiL1VzZXJzL2dhYnJpZWxtZWRpbmEvRG93bmxvYWRzL00yL2VzbzMucGRmIiwgZHBpID0gNjAwKQoKCmVzbzNfMSA8LSBpbWFnZV9yZWFkKCIvVXNlcnMvZ2FicmllbG1lZGluYS9Eb3dubG9hZHMvTTIvZXNvXzEucG5nIikKCnRleHRvM18xIDwtIG9jcihlc28zXzEsIGVuZ2luZSA9IHRlc3NlcmFjdCgic3BhIikpCnRleHRvM18xCgplc28zXzIgPC0gaW1hZ2VfcmVhZCgiL1VzZXJzL2dhYnJpZWxtZWRpbmEvRG93bmxvYWRzL00yL2Vzb18yLnBuZyIpCgp0ZXh0bzNfMiA8LSBvY3IoZXNvM18yLCBlbmdpbmUgPSB0ZXNzZXJhY3QoInNwYSIpKQp0ZXh0bzNfMgoKZXNvM18zIDwtIGltYWdlX3JlYWQoIi9Vc2Vycy9nYWJyaWVsbWVkaW5hL0Rvd25sb2Fkcy9NMi9lc29fMy5wbmciKQoKdGV4dG8zXzMgPC0gb2NyKGVzbzNfMywgZW5naW5lID0gdGVzc2VyYWN0KCJzcGEiKSkKdGV4dG8zXzMKCgoKYGBgCgpgYGB7cn0KZG9jdW1lbnRvMyA8LSByZWFkX2RvY3goKSAjQ3JlYSBkb2N1bWVudG8gd29yZCBlbiBibGFuY28KCmRvY3VtZW50bzMgPC0gZG9jdW1lbnRvMyAlPiUKICBib2R5X2FkZF9wYXIodGV4dG8zXzEsIHN0eWxlID0gIk5vcm1hbCIpICU+JQogIGJvZHlfYWRkX3Bhcih0ZXh0bzNfMiwgc3R5bGUgPSAiTm9ybWFsIikgJT4lCiAgYm9keV9hZGRfcGFyKHRleHRvM18zLCBzdHlsZSA9ICJOb3JtYWwiKQoKCiNwcmludChkb2N1bWVudG8sIHRhcmdldCA9ICJ0ZXh0by5kb2N4IikKYGBgCgoKIyA8c3BhbiBzdHlsZT0gImNvbG9yOiBPcmFuZ2U7Ij4yLiBFeHBsb3JhY2nDs24gZGUgRGF0b3MgPC9zcGFuPgoKIyMgPHNwYW4gc3R5bGU9ICJjb2xvcjogT3JhbmdlOyI+IEFuw6FsaXNpcyBkZSBGcmVjdWVuY2lhcyA8L3NwYW4+CgpgYGB7cn0KdGV4dCA8LSByZWFkTGluZXMoImh0dHA6Ly93d3cuc3RoZGEuY29tL3N0aGRhL1JEb2MvZXhhbXBsZS1maWxlcy9tYXJ0aW4tbHV0aGVyLWtpbmctaS1oYXZlLWEtZHJlYW0tc3BlZWNoLnR4dCIpCgpjb3JwdXMgPC0gQ29ycHVzKFZlY3RvclNvdXJjZSh0ZXh0KSkgI1BvbmUgY2FkYSByZW5nbMOzbiBlbiB1bmEgY2VsZGEgZGUgdmVjdG9yCmNvcnB1cyA8LSB0bV9tYXAoY29ycHVzLCBjb250ZW50X3RyYW5zZm9ybWVyKHRvbG93ZXIpKSAjUG9uZXIgZW4gbWluw7pzY3VsYXMgdG9kbyBlbCB0ZXh0bwpjb3JwdXMgPC0gdG1fbWFwKGNvcnB1cywgcmVtb3ZlUHVuY3R1YXRpb24pICNFbGltaW5hIHB1bnR1YWNpw7NuCmNvcnB1cyA8LSB0bV9tYXAoY29ycHVzLCByZW1vdmVOdW1iZXJzKSAjRWxpbWluYSBuw7ptZXJvcwpjb3JwdXMgPC0gdG1fbWFwKGNvcnB1cywgcmVtb3ZlV29yZHMsIHN0b3B3b3JkcygiZW5nIikpICNFbGltaW5hIHN0b3B3b3JkcyAocGFsYWJyYXMgcXVlIG5vIGhhYmxhbiBkZWwgdGVtYSkKI2NvcnB1cyA8LSB0bV9tYXAoY29ycHVzLCByZW1vdmVXb3JkcywgYygiZHJlYW0iLCAid2lsbCIpKSAjRWxpbWluYSBwYWxhYnJhcyBwdW50dWFsZXMKCgppbnNwZWN0KGNvcnB1cykKCnRkbSA8LSBUZXJtRG9jdW1lbnRNYXRyaXgoY29ycHVzKSAKbSA8LSBhcy5tYXRyaXgodGRtKSNDdWVudGEgbGFzIHZlY2VzIHF1ZSBhcGFyZWNlIGNhZGEgcGFsYWJyYSBwb3IgcmVuZ2zDs24KCgpmcmVjdWVuY2lhIDwtIHNvcnQocm93U3VtcyhtKSwgZGVjcmVhc2luZyA9IFRSVUUpICNDdWVudGEgbGEgZnJlY3VlbmNpYSBkZSBjYWRhIHBhbGFicmEgZW4gZWwgdGV4dG8gY29tcGxldG8KCmZyZWN1ZW5jaWFfZGYgPC0gZGF0YS5mcmFtZSh3b3JkPW5hbWVzKGZyZWN1ZW5jaWEpLCBmcmVxPWZyZWN1ZW5jaWEpCmZyZWN1ZW5jaWFfZGYgI2NvbnZpZXJ0ZSBsYSBmcmVjdWVuY2lhIGVuIHVuIGRhdGEgZnJhbWUKCmdncGxvdChoZWFkKGZyZWN1ZW5jaWFfZGYsIDEwKSwgYWVzKHggPSByZW9yZGVyKHdvcmQsIC1mcmVxKSwgeSA9IGZyZXEpKSArCiAgZ2VvbV9iYXIoc3RhdCA9ICJpZGVudGl0eSIsIGZpbGwgPSAiYmx1ZSIpKwogIGxhYnMoeD0gIlBhbGFicmEiLCB5ID0gIkZyZWN1ZW5jaWEiLCB0aXRsZSA9ICJUb3AgMTAgUGFsYWJyYXMgZW4gZWwgZGlzY3Vyc28gZGUgTWFydGluIEx1dGhlciBLaW5nIikrCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IGZyZXEpLCB2anVzdCA9IC0wLjUpICsKICB5bGltKDAsMjApCgoKYGBgCgoKIyMgPHNwYW4gc3R5bGU9ICJjb2xvcjogT3JhbmdlOyI+TnViZSBkZSBQYWxhYnJhcyA8L3NwYW4+CgpFbCBwcm9jZXNhbWllbnRvIGRlIGRhdG9zIGFudGVzIGRlIGxhIG51YmUgZGUgcGFsYWJyYXMgZXMgaWd1YWwgcXVlIGVuIGVsIEFuw6FsaXNpcyBkZSBGcmVjdWVuY2lhcywgZGVzZGUgaW1wb3J0YXIgZWwgdGV4dG8gaGFzdGEgZnJlY3VlbmNpYV9kZi4uLgoKYGBge3J9CgpzZXQuc2VlZCgxMjMpCndvcmRjbG91ZCh3b3Jkcz0gZnJlY3VlbmNpYV9kZiR3b3JkLCBmcmVxPWZyZWN1ZW5jaWFfZGYkZnJlcSwgbWluLmZyZXEgPSAxLCByYW5kb20ub3JkZXIgPSBGQUxTRSwgY29sb3JzID0gYnJld2VyLnBhbCg4LCAiT3JSZCIpKQoKYGBgCgojIyA8c3BhbiBzdHlsZT0gImNvbG9yOiBPcmFuZ2U7Ij5FamVyY2ljaW8gMi4gTm92ZWxhICJJVCIgPC9zcGFuPgoKIyMjIEFuw6FsaXNpcyBkZSBGcmVjdWVuY2lhcwoKYGBge3J9CnRleHQyIDwtIHJlYWRMaW5lcygiL1VzZXJzL2dhYnJpZWxtZWRpbmEvRG93bmxvYWRzL00yL3RleHRvMS50eHQiKQoKCnRleHRvX3Npbl9hY2VudG9zIDwtIGljb252KHRleHQyLCB0byA9ICJBU0NJSS8vVFJBTlNMSVQiKQoKY29ycHVzIDwtIENvcnB1cyhWZWN0b3JTb3VyY2UodGV4dG9fc2luX2FjZW50b3MpKQpjb3JwdXMgPC0gdG1fbWFwKGNvcnB1cywgY29udGVudF90cmFuc2Zvcm1lcih0b2xvd2VyKSkgI1BvbmVyIGVuIG1pbsO6c2N1bGFzIHRvZG8gZWwgdGV4dG8KY29ycHVzIDwtIHRtX21hcChjb3JwdXMsIHJlbW92ZVB1bmN0dWF0aW9uKSAjRWxpbWluYSBwdW50dWFjacOzbgpjb3JwdXMgPC0gdG1fbWFwKGNvcnB1cywgcmVtb3ZlTnVtYmVycykgI0VsaW1pbmEgbsO6bWVyb3MKY29ycHVzIDwtIHRtX21hcChjb3JwdXMsIHJlbW92ZVdvcmRzLCBzdG9wd29yZHMoInNwYW5pc2giKSkgI0VsaW1pbmEgc3RvcHdvcmRzIChwYWxhYnJhcyBxdWUgbm8gaGFibGFuIGRlbCB0ZW1hKQojY29ycHVzIDwtIHRtX21hcChjb3JwdXMsIHJlbW92ZVdvcmRzLCBjKCJkcmVhbSIsICJ3aWxsIikpICNFbGltaW5hIHBhbGFicmFzIHB1bnR1YWxlcwoKCmluc3BlY3QoY29ycHVzKQoKdGRtIDwtIFRlcm1Eb2N1bWVudE1hdHJpeChjb3JwdXMpIAptIDwtIGFzLm1hdHJpeCh0ZG0pI0N1ZW50YSBsYXMgdmVjZXMgcXVlIGFwYXJlY2UgY2FkYSBwYWxhYnJhIHBvciByZW5nbMOzbgoKCmZyZWN1ZW5jaWEgPC0gc29ydChyb3dTdW1zKG0pLCBkZWNyZWFzaW5nID0gVFJVRSkgI0N1ZW50YSBsYSBmcmVjdWVuY2lhIGRlIGNhZGEgcGFsYWJyYSBlbiBlbCB0ZXh0byBjb21wbGV0bwoKZnJlY3VlbmNpYV9kZjIgPC0gZGF0YS5mcmFtZSh3b3JkPW5hbWVzKGZyZWN1ZW5jaWEpLCBmcmVxPWZyZWN1ZW5jaWEpICNjb252aWVydGUgbGEgZnJlY3VlbmNpYSBlbiB1biBkYXRhIGZyYW1lCgpnZ3Bsb3QoaGVhZChmcmVjdWVuY2lhX2RmMiwgMTApLCBhZXMoeCA9IHJlb3JkZXIod29yZCwgLWZyZXEpLCB5ID0gZnJlcSkpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgZmlsbCA9ICJibHVlIikrCiAgbGFicyh4PSAiUGFsYWJyYSIsIHkgPSAiRnJlY3VlbmNpYSIsIHRpdGxlID0gIlRvcCAxMCBQYWxhYnJhcyBlbiBlbCBDYXDDrXR1bG8gMyBkZSBJVCIpKwogIGdlb21fdGV4dChhZXMobGFiZWwgPSBmcmVxKSwgdmp1c3QgPSAtMC41KSArCiAgeWxpbSgwLDMwKQoKCmBgYAoKCiMjIE51YmUgZGUgUGFsYWJyYXMKCmBgYHtyIHdhcm5pbmc9RkFMU0V9CgpzZXQuc2VlZCgxMjMpCndvcmRjbG91ZCh3b3Jkcz0gZnJlY3VlbmNpYV9kZjIkd29yZCwgZnJlcT1mcmVjdWVuY2lhX2RmMiRmcmVxLCBtaW4uZnJlcSA9IDMsIHJhbmRvbS5vcmRlciA9IEZBTFNFLCBjb2xvcnMgPSBicmV3ZXIucGFsKDgsICJTcGVjdHJhbCIpKQoKYGBgCg==