[R-es] Loop sobre muchos data frames

Oscar Benitez
Fri, 10 Apr 2015 15:24:02 -0000

Hola a todos
Finalmente le encontré la vuelta a lo que buscaba hacer. Muchas gracias por
sus aportes!

El resultado final es bien simple:

#Librerias necesarias
library(tm)

#directorio de trabajo
setwd("~/Documents/DSC")

#esta opción es necesaria para trabajar los datos en el corpus
options(stringsAsFactors = FALSE)

#lee la lista de archivos a levantar
names <- list.files("./Sample",pattern="*.txt")

#lista de nombres destino para el for
bNames <-substr(names,1,5)

#carga los archivos y hace el corpus para cada uno
for(i in bNames){
  filepath <- paste("./Sample/", i,".txt",
sep="")
  assign(i,
Corpus(VectorSource(read.table(filepath,encoding="latin1"))))
}



El 10 de abril de 2015, 10:17, Javier Marcuzzi <
javier.ruben.marcuzzi en gmail.com> escribió:

> Estimado Oscar Benitez
>
> ¿Es posible realizar textminig a partir de un JSON? Porque se me ocurre
> usar la idea de Jorge Velez, pero leer los archivos separados y colocarlos
> en un JSON, ahí estarían todos en un solo archivo de texto, luego trabaja
> sobre este realizando un loop (según su idea).
>
> Javier Marcuzzi
>
> El 10 de abril de 2015, 11:02, Oscar Benitez <oscar.benitez1962 en
gmail.com>
> escribió:
>
>> Jorge
>> Gracias por el consejo. Aparentemente no lo estoy aplicando bien, pues
el
>> objeto que obtengo no contiene lo que quiero.
>> Me explico, al ejecutar
>>
>> txt <- vector('list', length = length(names)) #names el el
vector donde ya
>> tenía almacenada la lista de txt's
>> for(i in seq_along(txt)){
>>   txt[[i]] <- Corpus(VectorSource(names[i]))
>> }
>>
>> obtengo el objeto txt:
>> > class(txt)
>> [1] "list"
>>
>> si extraigo solamente el primer objeto de esa lista:
>> > txt[[1]]
>> <<VCorpus (documents: 1, metadata (corpus/indexed): 0/0)>>
>>
>> si quiero ver el contenido del primer copus
>>
>> > inspect(txt[[1]])
>> <<VCorpus (documents: 1, metadata (corpus/indexed): 0/0)>>
>>
>> [[1]]
>> <<PlainTextDocument (metadata: 7)>>
>> qB001.txt
>>
>> me informa cosas sobre el objeto, pero los datos no están allí...
debería
>> mostrarme algo así como:
>>
>> inspect(cbD02[1:1]) #inspecciono el corpus cbD120, creado a mano por la
>> sentencia cbD120<-Corpus(VectorSource(qT120))
>>
>> #......contenido del corpus......
>> I went to go see some gypsy to tell me my future, but she asked for my
>> photograph instead.
>> itz me the one who was talkin to u last time !!!
>> starts at 4pm. come get sunny munny :)
>> kind of scary to imagine what needs military wiping!!!!
>> #.....más.contenido del corpus......
>>
>>
>> si quiero aplicarle un función propia de limpieza de corpus, por
ejemplo
>> eliminar los números presentes en el corpus
>> > tm_map(txt[[1]], removeNumbers)
>> <<VCorpus (documents: 1, metadata (corpus/indexed): 0/0)>>
>>
>> no hace nada de nada...
>>
>> Saludos
>>
>> Oscar
>>
>>
>>
>>
>>
>> El 10 de abril de 2015, 1:15, Jorge I Velez <jorgeivanvelez en
gmail.com>
>> escribió:
>>
>> > Oscar,
>> >
>> > Una forma de trabajar con este tipo de archivos es utilizando
listas:
>> >
>> > # directorio del proyecto
>> > setwd('~/proyecto')
>> >
>> > # archivos de texto
>> > l <- list.files(pattern = '.txt')
>> >
>> > # procesamiento
>> > txt <- vector('list', length = length(l))
>> > for(i in seq_along(txt)){
>> > txt[[i]] <- Corpus(VectorSource(l[i]))
>> > }
>> >
>> > # para acceder a la informacion del primero archivo, solo debes
escribir
>> > txt[[1]]
>> >
>> >
>> > Espero sea de utilidad.
>> >
>> > Saludos,
>> > Jorge.-
>> >
>> >
>> > 2015-04-10 14:14 GMT+10:00 Oscar Benitez <oscar.benitez1962 en
gmail.com>:
>> >
>> >> Hola a todos!
>> >> Estoy en un proyecto de text mining y por razones de los
recursos con
>> que
>> >> cuento tuve que separar los archivos de texto de input del
proyecto en
>> >> muchos archivos pequeños.
>> >> Luego de transformar cada uno de estos archivos en un corpus
separado,
>> >> puedo aplicar limpieza sobre cada corpus, buscar n-gramas,
construir
>> cada
>> >> termDocumentMatrix y finalmente reunir todo en una sola TDM.
>> >>
>> >> Pero estoy atorado en el paso de transformar cada uno de los
archivos
>> en
>> >> corpus mediante un loop. Es decir que en lugar de hacer esto
infinitas
>> >> veces:
>> >>
>> >> #Librerias necesarias
>> >> library(tm)
>> >>
>> >> corpus_001<-Corpus(VectorSource(qBlog001))
>> >> corpus_002<-Corpus(VectorSource(qBlog002))
>> >> corpus_003<-Corpus(VectorSource(qBlog003))
>> >> .........
>> >> corpus_150<-Corpus(VectorSource(qBlog150))
>> >> ........
>> >>
>> >> quisiera poder armar un loop que haga el trabajo, como por
ejemplo
>> >>
>> >>
>> >>
>> >> #lista con los nombres que quiero para cada corpus
>> >> c_names <-
paste("corpus_",formatC(seq(length(bNames)),
>> >>                                                 width=3,
flag="0"),
>> >> sep="")
>> >>
>> >> donde bNames es la lista de los df que tengo cargados
"qBlog001"
>> >> "qBlog002"..."qBlog150"...
>> >>
>> >> algo así es lo que tengo en mente:
>> >>
>> >> for (i in bNames) {
>> >>   for (j in c_names) {
>> >>     j<- Corpus(VectorSource(i))
>> >>   }
>> >> }
>> >>
>> >> Pero no funciona, he probado con lapply, con sapply, con llply
de la
>> >> librería (plyr) y no encuentro la manera de hacerlo..
>> >> Cualquier sugerencia sera bienvenida!
>> >> Muchas gracias por adelantado!
>> >>
>> >>
>> >> --
>> >> Oscar Benitez
>> >>
>> >>         [[alternative HTML version deleted]]
>> >>
>> >> _______________________________________________
>> >> R-help-es mailing list
>> >> R-help-es en r-project.org
>> >> https://stat.ethz.ch/mailman/listinfo/r-help-es
>> >>
>> >
>> >
>>
>>
>> --
>> Oscar Benitez
>>
>>         [[alternative HTML version deleted]]
>>
>> _______________________________________________
>> R-help-es mailing list
>> R-help-es en r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-help-es