2016-12-13 118 views
2

我和朋友正在努力將我們收集的一些tweets轉換爲dtm,以便能夠在R中使用機器學習來運行情感分析。該任務必須在R中執行,因爲它是在我們大學的考試中,R被要求用作工具。刪除DocumentTermMatrix中的單詞

最初我們收集了一個較小的樣本,以便測試我們的代碼是否正常工作,然後纔開始編碼較大的數據集。我們的問題是,我們似乎無法弄清楚如何從dtm中刪除自定義單詞。我們到目前爲止的代碼看起來是這樣的(我們主要使用TM封裝):

file <- read.csv("Tmix.csv", 
      row.names = NULL, sep=";", header=TRUE) #just for loading the dataset 

tweetsCorpus <- Corpus(VectorSource(file[,1])) 

tweetsDTM <- DocumentTermMatrix(tweetsCorpus, 
           control = list(verbose = TRUE, 
               asPlain = TRUE, 
               stopwords = TRUE, 
               tolower = TRUE, 
               removeNumbers = TRUE, 
               stemWords = FALSE, 
               removePunctuation = TRUE, 
               removeSeparators = TRUE, 
               removeTwitter = TRUE, 
               stem = TRUE, 
               stripWhitespace = TRUE, 
               removeWords = c("customword1", "customword2", "customword3"))) 

我們也嘗試轉換爲DTM,使用removeWords命令之前刪除的話,連同所有的「在tm包中使用removeXXX命令,然後將其轉換爲dtm,但似乎不起作用。

重要的是我們不要簡單地刪除所有單詞,即5個或更少的觀察值。我們需要所有的觀測資料,除了我們想要刪除的觀測資料,例如https-adresses和類似的資料。

有誰知道我們是怎麼做到的?

還有第二個問題:是否有更簡單的方法可以刪除以https開頭的所有單詞,而不必將所有地址單獨寫入代碼。例如,我們正在編寫"httpstcokozcejeg", "httpstcolskjnyjyn", "httpstcolwwsxuem"作爲從數據中刪除的單個自定義單詞。

注意:我們知道RemoveWords對我們的問題是一個可怕的解決方案,但我們無法弄清楚如何去做。

回答

3

您可以使用正則表達式,例如:

gsub("http[a-z]*","","httpstcolwwsxuem here") 
[1] " here" 

假設你刪除了tweetsCorpus標點符號/數字,您可以使用以下命令:

1-直接GSUB

tweetsCorpus <- gsub("http[a-z]*","",tweetsCorpus[[1]][[1]]) 

2- TM :: tm_map,content_transformer

library(tm) 

RemoveURL <- function(x){ 
     gsub("http[a-z]*","",x) 
} 

tweetsCorpus <- tm_map(tweetsCorpus, content_transformer(RemoveURL)) 
+0

**非常感謝!**只是爲了正確地理解代碼,我們只需要在你的代碼運行的第一個行權?或者第二行是幹什麼的? – Nordsted

+0

第一個是一個一般的例子。然後,兩種方法與直接gsub或tm_map和content_transformer混淆。 – OmaymaS