2012-01-27 14 views
5

principiante en R y minería de texto. Usando el paquete tm actualmente.Extracción de texto R - Combinación de párrafos uno después de otro sin oraciones que mezclan

Estoy tratando de agregar los textos de dos documentos diferentes en un corpus juntos. cuando uso una declaración como

c(corpus.doc[[1]],corpus.doc[[2]]) 

o la declaración de pasta

paste(corpus.doc[[1]],corpus.doc[[2]]) 

obtengo un resultado de los textos combinados para cada línea.

Por ejemplo: si

> corpus.doc[[1]] 

He visits very often 
and 
sometimes more 

> corpus.doc[[2]]) 

She also 
stays 

Lo que obtengo con estas declaraciones es algo así como

He visits very often She also 
and stays 
sometimes more 

¿Cómo puedo evitar eso y lugar, o descarga

He visits very often 
and 
sometimes more 
She also 
stays 

O hay una manera fácil de combinar documentos en el paquete R tm? ¡Gracias de antemano!


Otros detalles


Cuando uso
un < - c (corpus.doc [[1]], corpus.doc [[2]], recursive = TRUE)

Me sale que a se convierte en un corpus con dos documentos, por lo que los textos de cada uno de estos documentos aún no están combinados. Me gustaría que esa

a[[1]] 

me da el texto combinado de corpus.doc [[1]] y corpus.doc [[2]].

str(corpus.doc) 

que ver algo así

List of 4270 
$ CREC-2011-01-05-pt1-PgE1-2.htm :Classes  'PlainTextDocument', 'TextDocument', 
     'character' atomic [1:74] html head titlecongression record volume issue 
head ... 
.. ..- attr(*, "Author")= chr(0) 
.. ..- attr(*, "DateTimeStamp")= POSIXlt[1:1], format: "2009-01-17 15:45:25" 
.. ..- attr(*, "Description")= chr(0) 
. . ..- attr(, "Heading")= chr(0) .. ..- attr(, "ID")= chr "CREC-2011-01-05-pt1-PgE1- 2.htm" 

Y sigue pasando ...

+0

¿Por qué no utilizar un editor de texto para copiar y pegar el texto de un documento en el otro? Si su ejemplo, los dos documentos son "PlainTextDocument" y "TextDocument", por lo que no debería ser un problema editarlos en un editor de texto. Luego use ese nuevo documento como la entrada para el paquete tm. No es una solución R pura, pero es rápida si solo tiene una pequeña cantidad de documentos. – Ben

+0

Sí ... lo sé :) Es solo que hay más de 7000 de estos archivos (son archivos de voz), y quiero combinar los textos en función de si son del mismo hablante. – appletree

Respuesta

2

La ayuda en paquete: tm dice que hay una función c.Corpus cuya configuración predeterminada para 'recursiva 'es FALSO, pero si se establece en VERDADERO, puede resultar en una fusión' inteligente '. Si cree que copus.doc es una lista de objetos de la clase corpus, puede intentar:

c(corpus.doc[[1]], corpus.doc[[2]], recursive=TRUE) 

..., pero no está claro que realmente tiene "Corpus" objetos -Clase.

str(corpus.doc) # see above 

Así que el primer elemento en esa lista es muy larga no un objeto clasificado-Corpus, sino más bien un PlaintextDocument.

+0

Esto crea otro corpus con dos documentos de texto. Lo que me gustaría es un solo documento en el corpus. – appletree

+0

Lo siento, no puedo responder de manera significativa porque no tengo suficiente reputación, supongo. Edité mi pregunta original para responder sus preguntas. – appletree

+0

Quiero decir, no puedo usar la sección de código en los comentarios, soy un principiante en esta placa con funcionalidad limitada. – appletree

1

Además de mi comentario, ¿qué tal si combinas tus documentos de texto plano en R antes de crear el corpus?Por ejemplo, si 1.txt, 2.txt y 3.txt son archivos de texto sin formato, puede leerlos en R al igual que

a <- readLines(file("C:/Users/X/Desktop/1.txt")) 
b <- readLines(file("C:/Users/X/Desktop/2.txt")) 
c <- readLines(file("C:/Users/X/Desktop/3.txt")) 

y entonces se podría combinar, de forma similar a la del ejemplo

abc <- c(a, b, c) 

que la voluntad apila los documentos en orden y conserva el formato línea por línea en un solo objeto de datos, según lo solicites. Sin embargo, si a continuación, hacer esto en un corpus con

abc.corpus <- Corpus(VectorSource(abc)) # not what you want 

entonces obtendrá un corpus con tantos documentos como líneas, que no suena como lo que quiere. En cambio, lo que tiene que hacer es combinar los objetos de texto como éste

abc.paste <- paste(a,b,c, collapse=' ') # this is what you want 

para que el abc.paste objeto resultante es una sola línea. A continuación, cuando se hace un corpus utilizando

abc.corpus <- Corpus(VectorSource(abc.paste)) 

el resultado será A corpus with 1 text document que luego se puede analizar con funciones en el paquete tm.

Debería ser sencillo ampliar esto en una función para concatenar eficazmente sus documentos de texto plano de más de 7000 y luego hacer un corpus del objeto de datos resultante. ¿Eso te acerca más a lo que quieres hacer?

Cuestiones relacionadas