这是我的第一篇文章,希望我遵守这些规则。我在这个语料库中有一份文件和一份独特的2克清单。语料库中有大约80,000多个独特的2-gram和大约4,000 +个文档。我希望找到每个独特的2克在语料库中使用的次数,目的是去除过于频繁或过于频繁使用的2克。我写了一些我觉得非常漂亮的代码,不幸的是它看起来很慢。
for(i in 1:length(unique2)) {
count2[i]=length(which(sapply(grams2, f, x = unique2[i])))
}
unique2是我的唯一2-gram矢量,gram2是长度列表(语料库)列表,其中每个子列表都是语料库中特定文档中包含的所有2-gram。 f是函数f = function(x,y){
any(x %in% y)
}
现在需要2个多小时才能找到语料库中每个唯一单词的使用次数。我想更快地做到这一点。我看到两种方式; 1)想一个更好的方法来找到哪些单词使用freq / infreq而不是计数或2)想一个更好的方法来计算每个单词的频率。因为2)似乎更有可能我希望有人能看到一个noobish步骤,我在我的代码中采用效率低下的方法。
根据规则,我在perl How to count words in a corpus document和python How to count words in a corpus document中找到了我的问题的答案,但在R中没有,这是我在进行此分析的语言。< / p>
希望尽快收到你的来信,并感谢你们。
尼克
编辑: 我还在R R Text Mining: Counting the number of times a specific word appears in a corpus?中找到了一些解决方案。一个解决方案似乎依赖于table()而另一个解决方案依赖于apply()+%in%,这是我的代码所依赖的。有没有人对table()解决方案是否比apply()+%in%solution更快有直觉?我的机器目前正在运行我的3克问题代码,因此我无法在不提前停止的情况下对其进行基准测试。
第二次编辑: 这里有一些代码可以创建类似于我正在使用的语料库。
letters = c("a", "b","c", "d","e","f","g","h","i","j","k", "l","m","n")
corpus = vector(300, mode="list")
for(j in 1:length(corpus)) {
len.sent = runif(1,3, 30)
sentence = rep(0,len.sent)
for(i in 1:len.sent) {
len.word = runif(1,2,7)
samp = sample(letters, len.word, replace = TRUE)
sentence[i]=paste(samp, collapse = '')
}
corpus[[j]]=sentence
}