2014-11-09 12 views
6

Ich habe mir in den letzten Tagen diesen Kopf gebrochen. Ich habe alle SO-Archive durchsucht und die vorgeschlagenen Lösungen ausprobiert, aber ich kann es einfach nicht funktionieren lassen. Ich habe Gruppen von txt-Dokumenten in Ordnern wie 2000 06, 1995 -99 usw., und möchte einige grundlegende Text-Mining-Operationen wie das Erstellen von Dokumenten-Term-Matrix und Term-Dokument-Matrix und einige Operationen basierend Co-Standorte von Wörtern ausführen. Mein Skript arbeitet an einem kleineren Korpus, aber wenn ich es mit dem größeren Korpus versuche, versagt es mir. Ich habe den Code für eine solche Ordneroperation eingefügt.Big Text Corpus bricht tm_map

library(tm) # Framework for text mining. 
library(SnowballC) # Provides wordStem() for stemming. 
library(RColorBrewer) # Generate palette of colours for plots. 
library(ggplot2) # Plot word frequencies. 
library(magrittr) 
library(Rgraphviz) 
library(directlabels) 

setwd("/ConvertedText") 
txt <- file.path("2000 -06") 

docs<-VCorpus(DirSource(txt, encoding = "UTF-8"),readerControl = list(language = "UTF-8")) 
docs <- tm_map(docs, content_transformer(tolower), mc.cores=1) 
docs <- tm_map(docs, removeNumbers, mc.cores=1) 
docs <- tm_map(docs, removePunctuation, mc.cores=1) 
docs <- tm_map(docs, stripWhitespace, mc.cores=1) 
docs <- tm_map(docs, removeWords, stopwords("SMART"), mc.cores=1) 
docs <- tm_map(docs, removeWords, stopwords("en"), mc.cores=1) 
#corpus creation complete 

setwd("/ConvertedText/output") 
dtm<-DocumentTermMatrix(docs) 
tdm<-TermDocumentMatrix(docs) 
m<-as.matrix(dtm) 
write.csv(m, file="dtm.csv") 
dtms<-removeSparseTerms(dtm, 0.2) 
m1<-as.matrix(dtms) 
write.csv(m1, file="dtms.csv") 
# matrix creation/storage complete 

freq <- sort(colSums(as.matrix(dtm)), decreasing=TRUE) 
wf <- data.frame(word=names(freq), freq=freq) 
freq[1:50] 
#adjust freq score in next line 
p <- ggplot(subset(wf, freq>100), aes(word, freq))+ geom_bar(stat="identity")+ theme(axis.text.x=element_text(angle=45, hjust=1)) 
ggsave("frequency2000-06.png", height=12,width=17, dpi=72) 
# frequency graph generated 


x<-as.matrix(findFreqTerms(dtm, lowfreq=1000)) 
write.csv(x, file="freqterms00-06.csv") 
png("correlation2000-06.png", width=12, height=12, units="in", res=900) 
graph.par(list(edges=list(col="lightblue", lty="solid", lwd=0.3))) 
graph.par(list(nodes=list(col="darkgreen", lty="dotted", lwd=2, fontsize=50))) 
plot(dtm, terms=findFreqTerms(dtm, lowfreq=1000)[1:50],corThreshold=0.7) 
dev.off() 

Wenn ich das Argument mc.cores = 1 in tm_map verwende, wird der Vorgang unendlich fortgesetzt. Wenn ich jedoch in tm_map das Argument lazy = TRUE verwende, scheint es gut zu gehen, aber nachfolgende Operationen geben diesen Fehler an.

Ich habe überall nach einer Lösung gesucht, aber konsequent gescheitert. Jede Hilfe würde sehr geschätzt werden!

Am besten! k

Antwort

13

Ich fand eine Lösung, die funktioniert.

Hintergrund/Debugging Steps

ich einige Dinge ausprobiert, die nicht funktionierten:

  • "content_transformer" Hinzufügen von allen, bis zu einem gewissen tm_map, zu einem (totower)
  • Hinzufügen " faul = T "zu tm_map
  • Versuchte einige parallele Datenverarbeitungspakete

Während es für 2 meiner Skripte nicht funktioniert, funktioniert es jedes Mal für ein drittes Skript. Aber der Code aller drei Skripte ist der gleiche, nur die Größe der .RDA-Datei, die ich lade, ist anders. Die Datenstruktur ist auch für alle drei identisch.

  • Datensatz 1: Size - 493.3KB = Fehler
  • Datensatz 2: Size - 630.6KB = Fehler
  • Datensatz 3: Größe - 300.2KB = funktioniert!

Nur komisch.

Mein sessionInfo() Ausgang:

R version 3.1.2 (2014-10-31) 
Platform: x86_64-apple-darwin13.4.0 (64-bit) 

locale: 
[1] de_DE.UTF-8/de_DE.UTF-8/de_DE.UTF-8/C/de_DE.UTF-8/de_DE.UTF-8 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] snowfall_1.84-6 snow_0.3-13  Snowball_0.0-11 RWekajars_3.7.11-1 rJava_0.9-6    RWeka_0.4-23  
[7] slam_0.1-32  SnowballC_0.5.1 tm_0.6    NLP_0.1-5   twitteR_1.1.8  devtools_1.6  

loaded via a namespace (and not attached): 
[1] bit_1.1-12  bit64_0.9-4 grid_3.1.2  httr_0.5  parallel_3.1.2 RCurl_1.95-4.3 rjson_0.2.14 stringr_0.6.2 
[9] tools_3.1.2 

Lösung

ich diese Linie nur hinzugefügt, nachdem die Daten geladen und alles funktioniert jetzt:

MyCorpus <- tm_map(MyCorpus, 
        content_transformer(function(x) iconv(x, to='UTF-8-MAC', sub='byte')), 
        mc.cores=1) 

den Hinweis hier gefunden: http://davetang.org/muse/2013/04/06/using-the-r_twitter-package/ (Der Autor hat seinen Code aufgrund des Fehlers am 26. November 2014 aktualisiert.)

+1

Danke, viel geholfen! – xbsd

+0

Vielen Dank! Ich habe das Passwort für meinen SO-Account verloren, also habe ich das jetzt gesehen :) – Kartik