2017-08-08 95 views
0

問題: 我有一個循環,從網頁下載的句子 - 併爲每個迭代它們添加到越來越多的字符向量。追加txt文件 - 然後閱讀txt文件到語料庫與TM封裝

概念,輸出看起來是這樣的:

myVec 

[1] "bla"                                                   
[2] "blablabla"                       
[3] "blabla"                                                         
[4] " blablablablabla" 

等...

每個數字代表的是我已經下載了一句。對於每次循環,循環都會向該向量附加更多句子。

但不是讓結果進入矢量 - 我想將它保存到不斷增長的txt文件中。原因是我需要下載的數據量很大。所以我需要讓循環運行一段時間(1000次迭代),然後休息一下 - 然後在第二天再次運行它。

我想要txt文件有一些結構 - 以便它仍然可以很容易地按句子拆分。這是因爲我後來想創建一個DTM,每個句子作爲一個單獨的文檔。

所以我需要什麼

1:一種方式來寫,可以在整個環新句子被附加的文件。

2:使用tm包讀取該文件的方法,以便稍後可以根據我已下載的句子創建DTM。

我已經試過:

我已經得到了我想要的是使用write.table()函數最接近的一次。

write.table(MyVec, file = "output.txt",row.names=FALSE, col.names = FALSE, append= TRUE) 

這似乎給我哪裏有句通過引號分隔文本: 「喇嘛」 「blablabla」 「布拉布拉」 等等

但我不知道如何利用當用tm將它讀入語料庫時 - 爲了稍後基於句子創建DTM。也許有更好的方法?

我也曾嘗試write()函數:

write(MyVec, file="output.txt",append=TRUE) 

這給了我成長的txt文件,但它似乎並沒有分離出的句子。我不知道如何將它讀入語料庫並根據句子創建DTM。

我認爲writeLines() - 但它似乎沒有追加選項 - 無論如何:我不想打破文本的行。我只想分開句子。

+0

爲'write.table'設置'quote = FALSE',你將擺脫引號。 – Val

回答

0

這樣做的一種方法是將您的句子列表存儲(或加載)爲數據框,並使用tm()將其解析爲向量源。

library(tm) 

Sentences <- c("First Sentence BLA", "Second Sentence BLA BLA", "Nth Sentence [...] Bla^n") 
SentencesDF <- as.data.frame(Sentences) 
Corpus <- VectorSource(SentencesDF) 

在前面的例子中,你也沒必要寫的「句子」載體爲TXT或CVS獲得語料庫。如果你仍然需要這樣做,只需運行:

write.csv(SentencesDF, file = "NameofFile.csv") 
+0

感謝您的回答尼古拉斯!我確實需要保存它。原因是從網頁獲取所有句子需要很長時間。所以我需要能夠中斷這個過程,並在第二天拿起它(我已經更新了這個帖子來澄清這一點)。 write.csv()不允許我這樣做;因爲它不需要追加參數。我一直在嘗試write.table()和write()。但是我的問題是,我找不到一種方法來保存結果,這樣可以很容易地重新創建我不得不從頭開始的同一個向量。一句話是分裂的。 –

+0

好的,所以我想到了兩個選擇。我最喜歡的是每天存儲DF(即Sentences_2017-08-07; Sentences_2017_08_08; ...),並且當您完成捕獲所有源時,將所有原子DF添加到一個。 (即do.call(rbind,lapply(ls(pattern =「Sentences_」),get))。 –

+0

第二個是在每個捕獲的句子末尾添加一個唯一的字符或字符串,所以稍後,您將能夠在讀回到R時將該唯一字符標記爲分隔符來解析每個句子。 –