2016-08-18 80 views
0

我猜測這種技術與從任何數據框中取前N個字符相似,無論它是否是語料庫。如何取每個語料庫的前25個單詞(R)?

我嘗試:

create.greetings <- function(corpus, create_df = FALSE) { 
    for(i in length(Charlotte.corpus.raw)) { 
    Doc1<-Charlotte.corpus.raw[i] 
    Word1<-Doc1[1:25] 
    Greetings[i]<-Word1 
    } 
    return(VCorpus) 
} 

Greetings開始與N = 6語料庫。我無法弄清楚如何製作一個空的語料庫,或者是一個足夠大的字符的語料庫。我在這裏有200個文件的文集(Charlotte.corpus.raw)。與矢量(以及擴展,數據框)不同,創建空語料庫似乎不是一種簡單的方法。

問題的一部分是,R似乎沒有認識到「文檔」類。它只承認語料庫。也就是說,對於R來說,單個文檔是n = 1的語料庫。

可再現的樣品: 您將需要「以舊換新」和「dplyr」和「NLP」封裝以及更常見的R封裝

read.corpus <- function(directory, pattern = "", to.lower = TRUE) { 
corpus <- DirSource(directory = directory, pattern = pattern) %>% 
    VCorpus # Read files and create `VCorpus` object 
if(to.lower == TRUE) corpus <- # Lowercase text 
    tm_map(corpus, 
      content_transformer(tolower)) 
return(corpus) 
} 

然後運行你有幾個任意目錄功能txt文檔,那麼你有一個語料庫可以使用。然後將上面的Charlotte.corpus.raw替換成你的語料庫中的任何名稱。

+1

是您的「文集」本質上只是一個字符串的載體,用空格分隔的字,每個句子被/段落?請提供一個[可重現的示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example),特別是小但具有代表性的示例數據。 – r2evans

+0

@ r2evans我剛剛編輯的內容如何?我認爲你們使用已經存儲在電腦上的數據會更方便。 – Antecedent

+0

對不起,我不能在這個系統上安裝'tm'(package'slam'不適用於R-3.2.5/win),所以我不能用你的代碼進行測試。除非'tm_map'可以做到這一點,否則我不在。 – r2evans

回答

0

問候的每一行都將包含每個文件的第一個25個字:

greetings <- c() 
for(i in 1:length(corpus)) { 
    row <- unlist(corpus[i])[1:25] 
    greetings <- rbind(greetings, row) 
} 
+0

如果'corpus'只是一個字符向量列表,那麼更容易做'lapply(語料庫,頭部,n = 25)'? (順便說一句:從一個空向量開始,追加到它是不好的練習,當你知道所需的大小時是絕對可以避免的,雖然它可以用很小的數字工作,但是要意識到在for循環的每次迭代中,完成「greetings」的下一行副本,這會變得很昂貴。) – r2evans

+0

這篇文章被標記爲for循環,所以我想按照問題來做。但肯定是一個好點。 – AidanGawronski

+0

關於使用'for'循環的觀點很重要,謝謝。我一直在處理大量的數據,所以我開始對代碼沒有很好的規範了......我的眼睛開始抽搐:-) – r2evans

相關問題