2014-08-27 8 views
6

Ich versuche Text-Mining auf große Daten in R mit tm zu tun.Verwenden Sie die Corpus-Funktion von tm mit großen Daten in R

ich in den Speicher Probleme laufen häufig (wie can not allocation vector of size....) und verwenden Sie die etablierten Methoden der diese Probleme beheben, wie

  • 64-Bit-R mit
  • verschiedenen OS versucht (Windows, Linux, Solaris etc)
  • memory.limit() auf seine maximale
  • dafür sorgen, dass ausreichend Einstellung RAM und Rechen auf dem Server verfügbar ist (der es)
  • mak ing großzügigen Einsatz von gc()
  • den Code für Engpässe Profilierungs
  • großen Operationen in mehrere kleinere Operationen

jedoch oben brechen, wenn sie versuchen, Corpus auf einem Vektor von einer Million oder so Textfelder zu laufen, ich begegne ein etwas anderer Speicherfehler als üblich und ich bin mir nicht sicher, wie ich das Problem lösen soll. Der Fehler ist:

> ds <- Corpus(DataframeSource(dfs)) 
Error: memory exhausted (limit reached?) 

kann (und sollte) ich Corpus auf Blöcke von Reihen schrittweise ausgeführt werden von dieser Quelle Datenrahmen dann die Ergebnisse kombinieren? Gibt es eine effizientere Möglichkeit, dies auszuführen?

Die Größe der Daten, die diesen Fehler verursachen, hängt von dem Computer ab, auf dem sie ausgeführt wird. Wenn Sie jedoch den integrierten Datensatz crude verwenden und die Dokumente replizieren, bis sie groß genug sind, können Sie den Fehler replizieren.

UPDATE

Ich habe mit dem Versuch, kleinen corpa zu kombinieren experimentiert, das heißt

test1 <- dfs[1:10000,] 
test2 <- dfs[10001:20000,] 

ds.1 <- Corpus(DataframeSource(test1)) 
ds.2 <- Corpus(DataframeSource(test2)) 

und während ich nicht erfolgreich war, habe ich tm_combine zu entdecken, die supposed to solve this exact problem ist. Der einzige Haken ist, dass mein 64-Bit-Build von R 3.1.1 mit der neuesten Version von tm aus irgendeinem Grund die Funktion tm_combine nicht finden kann. Vielleicht wurde es aus irgendeinem Grund aus dem Paket entfernt? Ich untersuche ...

> require(tm) 
> ds.12 <- tm_combine(ds.1,ds.2) 
Error: could not find function "tm_combine" 
+0

Ist Ihr gesamter Code in einer einzigen Funktion? Oder ein Skript? –

+0

es ist ein Skript im Moment –

+0

Ich vermute, dass Ihr Code möglicherweise zu viele Kopien macht ... aber ich warte auf die Experten. –

Antwort

2

Ich weiß nicht, ob tm_combine veraltet wurde oder warum es nicht im tm Namensraum gefunden, aber ich eine Lösung durch den Einsatz von Corpus auf kleinere Stücke der Datenrahmen gefunden haben dann die Kombination von Sie.

This Stackoverflow Post hatte eine einfache Möglichkeit, dies zu tun, ohne tm_combine:

test1 <- dfs[1:100000,] 
test2 <- dfs[100001:200000,] 

ds.1 <- Corpus(DataframeSource(test1)) 
ds.2 <- Corpus(DataframeSource(test2)) 

#ds.12 <- tm_combine(ds.1,ds.2) ##Error: could not find function "tm_combine" 
ds.12 <- c(ds.1,ds.2) 

, die Sie gibt:

ds.12

<<VCorpus (documents: 200000, metadata (corpus/indexed): 0/0)>> 

leider nicht auf meinem eigenen, um herauszufinden, bevor er fragt. Ich habe versucht und versagt mit anderen Möglichkeiten der Kombination von Objekten.

Verwandte Themen