Laboratorio 2

Brayan Ivan Cruz Corona

13001595

Estadistica Aplicada a la teoria de decisiones II

Cargamos las librerias necesarias para text mining y su manejo:

library(tm)
library(dplyr)
library(tidyr)

Cargamos el libro del Quijote:

Libroquijote<-file("libros/quijote.txt","r", encoding = "UTF-8")
Libroquijote_lines<-readLines(Libroquijote)
#Convertimos a corpus
quijote_src<-VectorSource(Libroquijote_lines)
quijote_corpus<-VCorpus(quijote_src)

Creamos una funcion para limpiar adecuadamente el libro y quedarnos con los caracteres deseados para el analisis.

clean_corpus <- function(corpus){
  #espacio en blanco
  corpus <- tm_map(corpus, stripWhitespace)
  #signos de puntuacion
  corpus <- tm_map(corpus, removePunctuation)
  #todo el texto lo convierte a minusculas
  corpus <- tm_map(corpus, content_transformer(tolower))
  #se quitan los numeros
  corpus <- tm_map(corpus, removeNumbers)
  return(corpus)
}

Aplicamos la funcion clean_corpus para el libro de quijote.txt:

quijote_corpus<-clean_corpus(quijote_corpus)

Nos es de utilidad una funcion para tokenizar el texto, separando el texto en bigramas:

BigramTokenizer <- function(x){
  unlist(lapply(ngrams(words(x), 2), paste, collapse=" "), use.names = FALSE)
}

Procedemos a tokenizar las palabras:

tdm_quijote<- TermDocumentMatrix(quijote_corpus, control = list(tokenize= BigramTokenizer))
matriz_Libroquijote<-as.matrix(tdm_quijote)
#Se muestran los Bigramas
rowSums(matriz_Libroquijote) %>% as.data.frame()

Especifico por frecuencia y bigrama:

bigram_quijote<- rowSums(matriz_Libroquijote) %>% as.data.frame()
bigram_quijote<- as.data.frame(bigram_quijote)
bigram_quijote$bigrams<-rownames(bigram_quijote)
names(bigram_quijote)<-c("freq","bigram")
bigram<-as.data.frame(bigram_quijote)

Separamos las palabras:

bigram_quijote$bigram<-as.character(bigram_quijote$bigram)
bigram_quijote<-separate(bigram_quijote,bigram,into=c("word1","word2"), sep=" ")
bigram_quijote$freq <- as.integer(bigram_quijote$freq)

Para generar la matriz es necesario poder separar en columnas y filas para ver la incidencia de cierta combinacion de 2 palabras. Tomaremos 200 palabras a considerar. Las palabras son tomadas de manera aleatoria.

#definimos quienes estaran en las filas
filas_quijote<-unique(bigram_quijote$word1)
#defnimos quienes estaran en las columnas
columnas_quijote<-unique(bigram_quijote$word2)
nPalabras<- 50
set.seed(1230)
filasQ<-sample(filas_quijote)
columnasQ<-sample(columnas_quijote)
quijote_matriz<-matrix(data=0, nrow<-nPalabras, ncol<-nPalabras, dimnames = list(head(filasQ,nPalabras), head(columnasQ,nPalabras)))

Por ultimo generamos la Matriz de quijote:

#definimos una funcion for para la creacion de la matriz
for(i in 1:nrow(quijote_matriz)){
  for(j in 1:ncol(quijote_matriz)){
    val<- 
      bigram_quijote$freq[bigram_quijote$word1==row.names(quijote_matriz)[i] & bigram_quijote$word2==colnames(quijote_matriz)[j]]
    if(length(val)==0){
      quijote_matriz[i,j]<-0
    }else{
      quijote_matriz[i,j]<-val
    }
  }
}

Desplegamos la matriz resultante:

quijote_matriz
               cuello sabrá talante mío amaneciese por atrevimiento deba enderécese venida
machuca             0     0       0   0          0   0            0    0          0      0
olla                0     0       0   0          0   0            0    0          0      0
quedóse             0     0       0   0          0   0            0    0          0      0
decilla             0     0       0   0          0   0            0    0          0      0
erades              0     0       0   0          0   0            0    0          0      0
hirviendo           0     0       0   0          0   0            0    0          0      0
terible             0     0       0   0          0   0            0    0          0      0
mudas               0     0       0   0          0   0            0    0          0      0
siguen              0     0       0   0          0   0            0    0          0      0
recibiera           0     0       0   0          0   0            0    0          0      0
seglar              0     0       0   0          0   0            0    0          0      0
aqueste             0     0       0   0          0   0            0    0          0      0
muy                 0     0       0   0          0   0            0    0          0      0
hallarse            0     0       0   0          0   0            0    0          0      0
volcar              0     0       0   0          0   1            0    0          0      0
apartéme            0     0       0   0          0   0            0    0          0      0
trozos              0     0       0   0          0   0            0    0          0      0
partidas            0     0       0   0          0   0            0    0          0      0
piedra              0     0       0   0          0   0            0    0          0      0
paraba              0     0       0   0          0   0            0    0          0      0
               lamentable entrado horror callar ojo desamparado razonamientos kirieleison
machuca                 0       0      0      0   0           0             0           0
olla                    0       0      0      0   0           0             0           0
quedóse                 0       0      0      0   0           0             0           0
decilla                 0       0      0      0   0           0             0           0
erades                  0       0      0      0   0           0             0           0
hirviendo               0       0      0      0   0           0             0           0
terible                 0       0      0      0   0           0             0           0
mudas                   0       0      0      0   0           0             0           0
siguen                  0       0      0      0   0           0             0           0
recibiera               0       0      0      0   0           0             0           0
seglar                  0       0      0      0   0           0             0           0
aqueste                 0       0      0      0   0           0             0           0
muy                     0       0      0      0   0           0             0           0
hallarse                0       0      0      0   0           0             0           0
volcar                  0       0      0      0   0           0             0           0
apartéme                0       0      0      0   0           0             0           0
trozos                  0       0      0      0   0           0             0           0
partidas                0       0      0      0   0           0             0           0
piedra                  0       0      0      0   0           0             0           0
paraba                  0       0      0      0   0           0             0           0
               pertenecían contrario culpan sangre emperatriz asomaron digna furibundo
machuca                  0         0      0      0          0        0     0         0
olla                     0         0      0      0          0        0     0         0
quedóse                  0         0      0      0          0        0     0         0
decilla                  0         0      0      0          0        0     0         0
erades                   0         0      0      0          0        0     0         0
hirviendo                0         0      0      0          0        0     0         0
terible                  0         0      0      0          0        0     0         0
mudas                    0         0      0      0          0        0     0         0
siguen                   0         0      0      0          0        0     0         0
recibiera                0         0      0      0          0        0     0         0
seglar                   0         0      0      0          0        0     0         0
aqueste                  0         0      0      0          0        0     0         0
muy                      0         0      0      0          0        0     0         0
hallarse                 0         0      0      0          0        0     0         0
volcar                   0         0      0      0          0        0     0         0
apartéme                 0         0      0      0          0        0     0         0
trozos                   0         0      0      0          0        0     0         0
partidas                 0         0      0      0          0        0     0         0
piedra                   0         0      0      0          0        0     0         0
paraba                   0         0      0      0          0        0     0         0
               castilla coger conformaba entera inglaterra honestísimos riñas fasta camina
machuca               0     0          0      0          0            0     0     0      0
olla                  0     0          0      0          0            0     0     0      0
quedóse               0     0          0      0          0            0     0     0      0
decilla               0     0          0      0          0            0     0     0      0
erades                0     0          0      0          0            0     0     0      0
hirviendo             0     0          0      0          0            0     0     0      0
terible               0     0          0      0          0            0     0     0      0
mudas                 0     0          0      0          0            0     0     0      0
siguen                0     0          0      0          0            0     0     0      0
recibiera             0     0          0      0          0            0     0     0      0
seglar                0     0          0      0          0            0     0     0      0
aqueste               0     0          0      0          0            0     0     0      0
muy                   0     0          0      0          0            0     0     0      0
hallarse              0     0          0      0          0            0     0     0      0
volcar                0     0          0      0          0            0     0     0      0
apartéme              0     0          0      0          0            0     0     0      0
trozos                0     0          0      0          0            0     0     0      0
partidas              0     0          0      0          0            0     0     0      0
piedra                0     0          0      0          0            0     0     0      0
paraba                0     0          0      0          0            0     0     0      0
               fristón costezuela escondidas escribían rucio papelón silboso amo aguardase
machuca              0          0          0         0     0       0       0   0         0
olla                 0          0          0         0     0       0       0   0         0
quedóse              0          0          0         0     0       0       0   0         0
decilla              0          0          0         0     0       0       0   0         0
erades               0          0          0         0     0       0       0   0         0
hirviendo            0          0          0         0     0       0       0   0         0
terible              0          0          0         0     0       0       0   0         0
mudas                0          0          0         0     0       0       0   0         0
siguen               0          0          0         0     0       0       0   0         0
recibiera            0          0          0         0     0       0       0   0         0
seglar               0          0          0         0     0       0       0   0         0
aqueste              0          0          0         0     0       0       0   0         0
muy                  0          0          0         0     0       0       0   0         0
hallarse             0          0          0         0     0       0       0   0         0
volcar               0          0          0         0     0       0       0   0         0
apartéme             0          0          0         0     0       0       0   0         0
trozos               0          0          0         0     0       0       0   0         0
partidas             0          0          0         0     0       0       0   0         0
piedra               0          0          0         0     0       0       0   0         0
paraba               0          0          0         0     0       0       0   0         0
               noria mováis ponérsele público traducción depositasen
machuca            0      0         0       0          0           0
olla               0      0         0       0          0           0
quedóse            0      0         0       0          0           0
decilla            0      0         0       0          0           0
erades             0      0         0       0          0           0
hirviendo          0      0         0       0          0           0
terible            0      0         0       0          0           0
mudas              0      0         0       0          0           0
siguen             0      0         0       0          0           0
recibiera          0      0         0       0          0           0
seglar             0      0         0       0          0           0
aqueste            0      0         0       0          0           0
muy                0      0         0       0          0           0
hallarse           0      0         0       0          0           0
volcar             0      0         0       0          0           0
apartéme           0      0         0       0          0           0
trozos             0      0         0       0          0           0
partidas           0      0         0       0          0           0
piedra             0      0         0       0          0           0
paraba             0      0         0       0          0           0
 [ reached getOption("max.print") -- omitted 30 rows ]

Son tantas las combinaciones de palabras debido al libro de texto que es dificil apreciar, pero si se busca en la fila “volcar” y en la columna “por” se puede observar una incidencia denotada por 1.

LS0tCnRpdGxlOiAiTGFib3JhdG9yaW8gLSBUZXh0IE1pbmluZyIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKIyMjTGFib3JhdG9yaW8gMgojIyMjQnJheWFuIEl2YW4gQ3J1eiBDb3JvbmEKIyMjIzEzMDAxNTk1CiMjIyNFc3RhZGlzdGljYSBBcGxpY2FkYSBhIGxhIHRlb3JpYSBkZSBkZWNpc2lvbmVzIElJCgpDYXJnYW1vcyBsYXMgbGlicmVyaWFzIG5lY2VzYXJpYXMgcGFyYSB0ZXh0IG1pbmluZyB5IHN1IG1hbmVqbzoKCmBgYHtyfQpsaWJyYXJ5KHRtKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KHRpZHlyKQpgYGAKCkNhcmdhbW9zIGVsIGxpYnJvIGRlbCBRdWlqb3RlOgoKYGBge3J9CkxpYnJvcXVpam90ZTwtZmlsZSgibGlicm9zL3F1aWpvdGUudHh0IiwiciIsIGVuY29kaW5nID0gIlVURi04IikKTGlicm9xdWlqb3RlX2xpbmVzPC1yZWFkTGluZXMoTGlicm9xdWlqb3RlKQojQ29udmVydGltb3MgYSBjb3JwdXMKcXVpam90ZV9zcmM8LVZlY3RvclNvdXJjZShMaWJyb3F1aWpvdGVfbGluZXMpCnF1aWpvdGVfY29ycHVzPC1WQ29ycHVzKHF1aWpvdGVfc3JjKQoKYGBgCgpDcmVhbW9zIHVuYSBmdW5jaW9uIHBhcmEgbGltcGlhciBhZGVjdWFkYW1lbnRlIGVsIGxpYnJvIHkgcXVlZGFybm9zIGNvbiBsb3MgY2FyYWN0ZXJlcyBkZXNlYWRvcyBwYXJhIGVsIGFuYWxpc2lzLgoKYGBge3J9CmNsZWFuX2NvcnB1cyA8LSBmdW5jdGlvbihjb3JwdXMpewogICNlc3BhY2lvIGVuIGJsYW5jbwogIGNvcnB1cyA8LSB0bV9tYXAoY29ycHVzLCBzdHJpcFdoaXRlc3BhY2UpCiAgI3NpZ25vcyBkZSBwdW50dWFjaW9uCiAgY29ycHVzIDwtIHRtX21hcChjb3JwdXMsIHJlbW92ZVB1bmN0dWF0aW9uKQogICN0b2RvIGVsIHRleHRvIGxvIGNvbnZpZXJ0ZSBhIG1pbnVzY3VsYXMKICBjb3JwdXMgPC0gdG1fbWFwKGNvcnB1cywgY29udGVudF90cmFuc2Zvcm1lcih0b2xvd2VyKSkKICAjc2UgcXVpdGFuIGxvcyBudW1lcm9zCiAgY29ycHVzIDwtIHRtX21hcChjb3JwdXMsIHJlbW92ZU51bWJlcnMpCiAgcmV0dXJuKGNvcnB1cykKfQpgYGAKCkFwbGljYW1vcyBsYSBmdW5jaW9uICpjbGVhbl9jb3JwdXMqIHBhcmEgZWwgbGlicm8gZGUgcXVpam90ZS50eHQ6CgpgYGB7cn0KcXVpam90ZV9jb3JwdXM8LWNsZWFuX2NvcnB1cyhxdWlqb3RlX2NvcnB1cykKYGBgCgpOb3MgZXMgZGUgdXRpbGlkYWQgdW5hIGZ1bmNpb24gcGFyYSB0b2tlbml6YXIgZWwgdGV4dG8sIHNlcGFyYW5kbyBlbCB0ZXh0byBlbiBiaWdyYW1hczoKCmBgYHtyfQpCaWdyYW1Ub2tlbml6ZXIgPC0gZnVuY3Rpb24oeCl7CiAgdW5saXN0KGxhcHBseShuZ3JhbXMod29yZHMoeCksIDIpLCBwYXN0ZSwgY29sbGFwc2U9IiAiKSwgdXNlLm5hbWVzID0gRkFMU0UpCn0KYGBgCgpQcm9jZWRlbW9zIGEgdG9rZW5pemFyIGxhcyBwYWxhYnJhczoKCmBgYHtyfQp0ZG1fcXVpam90ZTwtIFRlcm1Eb2N1bWVudE1hdHJpeChxdWlqb3RlX2NvcnB1cywgY29udHJvbCA9IGxpc3QodG9rZW5pemU9IEJpZ3JhbVRva2VuaXplcikpCm1hdHJpel9MaWJyb3F1aWpvdGU8LWFzLm1hdHJpeCh0ZG1fcXVpam90ZSkKCiNTZSBtdWVzdHJhbiBsb3MgQmlncmFtYXMKcm93U3VtcyhtYXRyaXpfTGlicm9xdWlqb3RlKSAlPiUgYXMuZGF0YS5mcmFtZSgpCmBgYAoKRXNwZWNpZmljbyBwb3IgZnJlY3VlbmNpYSB5IGJpZ3JhbWE6CgpgYGB7cn0KYmlncmFtX3F1aWpvdGU8LSByb3dTdW1zKG1hdHJpel9MaWJyb3F1aWpvdGUpICU+JSBhcy5kYXRhLmZyYW1lKCkKYmlncmFtX3F1aWpvdGU8LSBhcy5kYXRhLmZyYW1lKGJpZ3JhbV9xdWlqb3RlKQpiaWdyYW1fcXVpam90ZSRiaWdyYW1zPC1yb3duYW1lcyhiaWdyYW1fcXVpam90ZSkKbmFtZXMoYmlncmFtX3F1aWpvdGUpPC1jKCJmcmVxIiwiYmlncmFtIikKYmlncmFtPC1hcy5kYXRhLmZyYW1lKGJpZ3JhbV9xdWlqb3RlKQpgYGAKClNlcGFyYW1vcyBsYXMgcGFsYWJyYXM6CgpgYGB7cn0KYmlncmFtX3F1aWpvdGUkYmlncmFtPC1hcy5jaGFyYWN0ZXIoYmlncmFtX3F1aWpvdGUkYmlncmFtKQpiaWdyYW1fcXVpam90ZTwtc2VwYXJhdGUoYmlncmFtX3F1aWpvdGUsYmlncmFtLGludG89Yygid29yZDEiLCJ3b3JkMiIpLCBzZXA9IiAiKQpiaWdyYW1fcXVpam90ZSRmcmVxIDwtIGFzLmludGVnZXIoYmlncmFtX3F1aWpvdGUkZnJlcSkKYGBgCgpQYXJhIGdlbmVyYXIgbGEgbWF0cml6IGVzIG5lY2VzYXJpbyBwb2RlciBzZXBhcmFyIGVuIGNvbHVtbmFzIHkgZmlsYXMgcGFyYSB2ZXIgbGEgaW5jaWRlbmNpYSBkZSBjaWVydGEgY29tYmluYWNpb24gZGUgMiBwYWxhYnJhcy4gVG9tYXJlbW9zIDIwMCBwYWxhYnJhcyBhIGNvbnNpZGVyYXIuIExhcyBwYWxhYnJhcyBzb24gdG9tYWRhcyBkZSBtYW5lcmEgKmFsZWF0b3JpYSouCgpgYGB7cn0KI2RlZmluaW1vcyBxdWllbmVzIGVzdGFyYW4gZW4gbGFzIGZpbGFzCmZpbGFzX3F1aWpvdGU8LXVuaXF1ZShiaWdyYW1fcXVpam90ZSR3b3JkMSkKI2RlZm5pbW9zIHF1aWVuZXMgZXN0YXJhbiBlbiBsYXMgY29sdW1uYXMKY29sdW1uYXNfcXVpam90ZTwtdW5pcXVlKGJpZ3JhbV9xdWlqb3RlJHdvcmQyKQpuUGFsYWJyYXM8LSA1MAoKc2V0LnNlZWQoMTIzMCkKZmlsYXNRPC1zYW1wbGUoZmlsYXNfcXVpam90ZSkKY29sdW1uYXNRPC1zYW1wbGUoY29sdW1uYXNfcXVpam90ZSkKCnF1aWpvdGVfbWF0cml6PC1tYXRyaXgoZGF0YT0wLCBucm93PC1uUGFsYWJyYXMsIG5jb2w8LW5QYWxhYnJhcywgZGltbmFtZXMgPSBsaXN0KGhlYWQoZmlsYXNRLG5QYWxhYnJhcyksIGhlYWQoY29sdW1uYXNRLG5QYWxhYnJhcykpKQpgYGAKClBvciB1bHRpbW8gZ2VuZXJhbW9zIGxhIE1hdHJpeiBkZSBxdWlqb3RlOgoKYGBge3J9CiNkZWZpbmltb3MgdW5hIGZ1bmNpb24gZm9yIHBhcmEgbGEgY3JlYWNpb24gZGUgbGEgbWF0cml6Cgpmb3IoaSBpbiAxOm5yb3cocXVpam90ZV9tYXRyaXopKXsKICBmb3IoaiBpbiAxOm5jb2wocXVpam90ZV9tYXRyaXopKXsKICAgIHZhbDwtIAogICAgICBiaWdyYW1fcXVpam90ZSRmcmVxW2JpZ3JhbV9xdWlqb3RlJHdvcmQxPT1yb3cubmFtZXMocXVpam90ZV9tYXRyaXopW2ldICYgYmlncmFtX3F1aWpvdGUkd29yZDI9PWNvbG5hbWVzKHF1aWpvdGVfbWF0cml6KVtqXV0KICAgIGlmKGxlbmd0aCh2YWwpPT0wKXsKICAgICAgcXVpam90ZV9tYXRyaXpbaSxqXTwtMAogICAgfWVsc2V7CiAgICAgIHF1aWpvdGVfbWF0cml6W2ksal08LXZhbAogICAgfQogIH0KfQpgYGAKCgpEZXNwbGVnYW1vcyBsYSBtYXRyaXogcmVzdWx0YW50ZToKCmBgYHtyfQpxdWlqb3RlX21hdHJpegpgYGAKCgpTb24gdGFudGFzIGxhcyBjb21iaW5hY2lvbmVzIGRlIHBhbGFicmFzIGRlYmlkbyBhbCBsaWJybyBkZSB0ZXh0byBxdWUgZXMgZGlmaWNpbCBhcHJlY2lhciwgcGVybyBzaSBzZSBidXNjYSBlbiBsYSBmaWxhICoqInZvbGNhciIqKiB5IGVuIGxhIGNvbHVtbmEgKioicG9yIioqIHNlIHB1ZWRlIG9ic2VydmFyIHVuYSBpbmNpZGVuY2lhIGRlbm90YWRhIHBvciAxLiAK