2016-08-18 36 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

相关问题