2012-01-27 6 views
5

principianti in R e text mining. Utilizzo del pacchetto TM attualmente.R text mining: combinazione di paragrafi uno dopo l'altro senza errori di mixaggio

Sto cercando di aggiungere i testi di due documenti diversi in un insieme di corpora. quando uso una dichiarazione come

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

o la dichiarazione pasta

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

ho un risultato di testi combinati per ogni linea.

Per esempio: se

> corpus.doc[[1]] 

He visits very often 
and 
sometimes more 

> corpus.doc[[2]]) 

She also 
stays 

quello che ottengo con queste affermazioni è qualcosa come

He visits very often She also 
and stays 
sometimes more 

Come posso impedire che invece ottiene

He visits very often 
and 
sometimes more 
She also 
stays 

O c'è un modo semplice per combinare i documenti nel pacchetto R tm? Grazie in anticipo!


Ulteriori informazioni


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

Capisco che diventa un corpus con due documenti, quindi i testi di ciascuno di questi documenti non sono ancora combinati. Mi piacerebbe che che

a[[1]] 

mi dà il testo combinato di corpus.doc [[1]] e corpus.doc [[2]].

str(corpus.doc) 

mostra qualcosa di simile

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" 

e mantiene in corso ...

+0

Perché non utilizzare un editor di testo per copiare e incollare il testo di un documento nell'altro? Se il tuo esempio i due documenti sono "PlainTextDocument" e "TextDocument", quindi non dovrebbe esserci alcun problema a modificarli in un editor di testo. Quindi usa quel nuovo doc come input per il pacchetto tm. Non una soluzione R pura, ma veloce se hai solo un piccolo numero di documenti. – Ben

+0

Sì ... lo so :) È solo che ci sono più di 7000 di questi file (sono file vocali), e voglio combinare i testi in base al fatto che siano dello stesso oratore. – appletree

risposta

2

L'aiuto pkg: tm dice che c'è una funzione c.Corpus la cui impostazione di default per 'ricorsivo 'è FALSE ma se impostato su TRUE può comportare una fusione "intelligente". Se si pensa che copus.doc è un elenco di oggetti corpus di classe, si potrebbe provare:

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

... ma non è chiaro che avete veramente "corpus" oggetti-Class.

str(corpus.doc) # see above 

Quindi il primo elemento di quella lista molto lunga è non un oggetto Corpus-classificato, ma piuttosto un PlaintextDocument.

+0

Questo crea un altro corpus con due documenti di testo. Quello che vorrei è un singolo documento nel corpus. – appletree

+0

Spiacente, non posso rispondere in modo significativo perché non ho abbastanza reputazione, immagino. Ho modificato la mia domanda originale per rispondere alle tue domande. – appletree

+0

Voglio dire, non posso usare la sezione del codice nei commenti, sono un principiante su questo forum con funzionalità limitate. – appletree

1

Oltre al mio commento, che ne dici se si combinano i documenti di testo normale in R prima di creare il corpus?Per esempio, se 1.txt, 2.txt e 3.txt sono file di testo, è possibile leggerli in R in questo modo

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

e poi li possibile combinare, in modo simile al tuo esempio di cui sopra

abc <- c(a, b, c) 

che verrà impilare i documenti in ordine e conservare il formato riga per riga in un singolo oggetto dati, come richiesto. Tuttavia, se si allora fate questo in un corpus con

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

allora si otterrà un corpus con il maggior numero di documenti come linee, che non suona come quello che si vuole. Invece quello che devi fare è combinare gli oggetti di testo come questo

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

in modo che la risultante abc.paste oggetto è una singola linea. Poi, quando si effettua un corpus utilizzando

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

il risultato sarà A corpus with 1 text document che si può quindi analizzare con le funzioni nel pacchetto tm.

Dovrebbe essere semplice estenderlo a una funzione per concatenare in modo efficiente i 7000 documenti di testo semplice e quindi creare un corpus dall'oggetto dati risultante. Ti avvicini di più a ciò che vuoi fare?

Problemi correlati