2013-10-08 24 views
6

Ben böyle yapabiliyorum:RTextTools paketine özel bir stopwords listesi sunmak mümkün mü? tm paketi ile

c0 <- Corpus(VectorSource(text)) 
c0 <- tm_map(c0, removeWords, c(stopwords("english"),mystopwords)) 

mystopwords Ben kaldırmak istediğiniz ek engellenecek kelime bir vektör olmak.

Ancak RTextTools paketini kullanarak bunu yapmak için eşdeğer bir yol bulamıyorum. Örneğin:

dtm <- create_matrix(text,language="english", 
      removePunctuation=T, 
      stripWhitespace=T, 
      toLower=T, 
      removeStopwords=T, #no clear way to specify a custom list here! 
      stemWords=T) 

Bunu yapmak mümkün mü? RTextTools arayüzünü gerçekten çok seviyorum ve tm'a geri dönmek zorunda olduğum için üzücü olurdum.

cevap

3

sorununuza (veya olası daha) çözümleri üç vardır:

Birincisi, sadece kelimeleri kaldırmak için tm paketini kullanın. Her iki paket de aynı nesnelerle uğraşır, bu nedenle tm'u yalnızca sözcükleri kaldırmak için ve RTextTools paketinden kullanabilirsiniz. create_matrix işlevine baktığınızda bile tm işlevlerini kullanır.

İkinci olarak, create_matrix işlevini değiştirin. Örneğin own_stopwords=NULL gibi bir girdi parametresi eklemek ve aşağıdaki satırları ekleyin:

# existing line 
corpus <- Corpus(VectorSource(trainingColumn), 
        readerControl = list(language = language)) 
# after that add this new line 
if(!is.null(own_stopwords)) corpus <- tm_map(corpus, removeWords, 
              words=as.character(own_stopwords)) 

Üçüncüsü, kendi işlevini, böyle bir şey yazmak: eğer çalışırsa

# excluder function 
remove_my_stopwords<-function(own_stw, dtm){ 
    ind<-sapply(own_stw, function(x, words){ 
    if(any(x==words)) return(which(x==words)) else return(NA) 
    }, words=colnames(dtm)) 
    return(dtm[ ,-c(na.omit(ind))]) 
} 

hadi bir göz:

# let´s test it 
data(NYTimes) 
data <- NYTimes[sample(1:3100, size=10,replace=FALSE),] 
matrix <- create_matrix(cbind(data["Title"], data["Subject"])) 

head(colnames(matrix), 5) 
# [1] "109"   "200th"  "abc"   "amid"  "anniversary" 


# let´s consider some "own" stopwords as words above 
ostw <- head(colnames(matrix), 5) 

matrix2<-remove_my_stopwords(own_stw=ostw, dtm=matrix) 

# check if they are still there 
sapply(ostw, function(x, words) any(x==words), words=colnames(matrix2)) 
#109  200th   abc  amid anniversary 
#FALSE  FALSE  FALSE  FALSE  FALSE 

HTH

+0

Teşekkürler! Bu mükemmel çalışıyor. RTextTools paketinin bazı işlevlerini kaybettiği (veya kolay bir uygulamayı kaybettiği) göz önüne alındığında, bunların tümünü kullanmanızı önerir misiniz? (Tm paketi ile yapışarak) – user2175594

+1

Sanırım matrisinizden beri değişiyor ve kelime vektörünü durdurun. Genelde çözüm üç yapardım, ancak matris ve stop word vektörü çok büyükse hafıza problemleri yaşayabilirsiniz. 2 numaralı çözümden daha fazlasını yapacağım, satırları ekleyelim, ör. "create_matrix2", ancak bir dosyada ve kaynak. Dahası, 'create_matrix2' işlevini eski işlevle aynı şekilde ancak yeni özellik ile kullanabilirsiniz. – holzben

0

aynı listede durdurma kelimeler ekleyebilirsiniz. Örneğin:

c0 <- tm_map(c0, removeWords, c(stopwords("english"),"mystopwords"))