2017-08-08 91 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时将该唯一字符标记为分隔符来解析每个句子。 –