2014-11-09 25 views
6

Son birkaç gündür kafamı kırıyordum. Tüm SO arşivlerini araştırdım ve önerilen çözümleri denedim, ancak bunu işe yaramayacak gibi görünmüyor. 2000 06, 1995 -99 vb. Gibi klasörlerde txt belgeleri kümeleri var ve belge terim matrisi oluşturma ve belge matrisi terimi gibi bazı temel metin madenciliği işlemlerini çalıştırmak ve bazı işlemlerin sözcüklerin ortak konumlarını yapmak istiyorum. Scriptim daha küçük bir corpus üzerinde çalışıyor, ancak daha büyük bir corpus ile denediğimde, bu beni başarısız oluyor. Böyle bir klasör operasyonu için kodu yapıştırdım. Büyük Metin Corpus kırılıyor 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() 

ben tm_map içinde mc.cores = 1 argüman kullanmak

, operasyon süresiz devam eder. Ancak, tm_map içinde tembel = TRUE argümanını kullanırsam görünüşte iyi gider, ancak sonraki işlemler bu hatayı verir.

Error in UseMethod("meta", x) : 
    no applicable method for 'meta' applied to an object of class "try-error" 
In addition: Warning messages: 
1: In mclapply(x$content[i], function(d) tm_reduce(d, x$lazy$maps)) : 
    all scheduled cores encountered errors in user code 
2: In mclapply(unname(content(x)), termFreq, control) : 
    all scheduled cores encountered errors in user code 

Her yere bir çözüm arıyordum, ancak sürekli olarak başarısız oldum. Herhangi bir yardım büyük takdir edilecektir!

En İyi! k

cevap

13

Çalışan bir çözüm buldum.

Arkaplan/Hata Adımlar

ben işe yaramadı birkaç şey denedik: birine

  • , herkese, bazı tm_map için "content_transformer" ekleme (totower) ekleme
  • " lazy = T "tm_map
  • Bazı paralel bilgi işlem paketlerini denedim

2 dosyam için çalışmıyor olsa da, her zaman üçüncü bir komut dosyası için çalışıyor. Ama her üç betiğin de kodu sadece yüklediğim .rda dosyasının boyutu aynı. Veri yapısı da her üç için aynıdır.

  • Veri kümesi 1: Boyut - 493.3KB = hata
  • Veri kümesi 2: Boyut - 630.6KB = hata
  • Veri kümesi 3: Boyut - 300.2KB = eserleri!

Sadece garip.

Benim sessionInfo() çıkışı:

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 

Çözüm

Sadece veri yüklendikten sonra bu satırı eklendi ve her şey artık çalışıyor

:

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

burada ipucu Bulunan: http://davetang.org/muse/2013/04/06/using-the-r_twitter-package/ (Yazar, 26 Kasım 2014’teki hata nedeniyle kodunu güncelledi.)

+1

Teşekkürler, çok yardımcı oldu! – xbsd

+0

Çok teşekkürler! SO hesabımın şifresini kaybettim, şimdi bunu şimdi gördüm :) – Kartik