我有一个奇怪的问题,我似乎无法做出正面或反面。任何帮助是极大的赞赏。我在Mac Book El Capitan 10.11.3上运行RStudio版本0.99.879。
基本上我正在尝试为大量维基百科语料库制作DocumentTermMatrix。我用https://github.com/idio/json-wikipedia解析了wikipedia xml转储,然后编写了一个R脚本来将每个wiki文章解析为它自己的文本文件,其中文件的名称是wiki文章的名称,文件的内容是文章的内容。
所以,我现在有1300万个相对较小的.txt文件,我一直试图逐步查看我可以在DTM中制作多少。
当我在名为wiki-test
的文件夹中运行13,000篇文章时,效果很好:
start <- Sys.time()
w13k <- PCorpus(DirSource("json-wikipedia/wiki-test"),
dbControl = list(dbName = "wiki-test.db", dbType = "DB1"))
Sys.time() - start
#Time difference of 28.637 secs for 13k files
start <- Sys.time()
dtm13k <- DocumentTermMatrix(w13k,
control = list(bounds = list(global = c(1, length(w13k)*.5)), # so that it only consider terms that appear in less than 20% of the documents
weighting =
function(x)
weightTfIdf(x, normalize =
TRUE),
removePunctuation = TRUE,
removeNumbers = TRUE,
stopwords = TRUE , stemming=TRUE
))
Sys.time() - start
#Time difference of 1.288023 mins for 13k files
但是,当我尝试使用大约210,000个文件的较大文件夹运行它时,需要10分钟,然后创建一个似乎不起作用的语料库:
start <- Sys.time()
w210k <- PCorpus(DirSource("json-wikipedia/wiki-articles"),
dbControl = list(dbName = "wiki-test-210k.db", dbType = "DB1"))
Sys.time() - start
#Time difference 10 mins
正如您所看到的,除了wiki-articles
之外,基本上相同的代码包含更多文件。
然后当尝试运行相同的DocumentTermMatrix调用时,我得到:
Error in readSingleKey(con, map, key) :
unable to obtain value for key '-_-_-album-.txt'
In addition: Warning message:
In readKeyMap(filecon) : NAs introduced by coercion to integer range
(-_-_-album.txt
是语料库中的第一篇文章)
我很困惑,所以我试着用w210k[[1]]
查看有问题的文件并得到了同样的错误。然后我尝试查看语料库中的其他文档(我知道在以前的语料库中工作,因此它不是输入文档),如w210k[[100000]]
,我得到了同样的错误:
Error in readSingleKey(con, map, key) :
unable to obtain value for key 'John_Arthur_Roebuck.txt'
In addition: Warning messages:
1: In readKeyMap(filecon) : NAs introduced by coercion to integer range
2: In readKeyMap(filecon) : NAs introduced by coercion to integer range
3: In readKeyMap(filecon) : NAs introduced by coercion to integer range
请注意,它会为每篇文章选择不同(且正确)的ID,但由于某种原因,无法为该密钥“获取值”。我似乎无法在文档中找到任何相关内容,当我谷歌那个错误消息时,似乎没有任何结果。
知道可能导致这种情况的原因是什么?是否有某种尺寸限制?我觉得我已经看到人们制作比这更大的DTM,没有问题。如果大小是问题,任何关于如何制作这个巨大的DTM的想法?我最终会得到大约13,000,000份文件,希望有500,000个条款。
提前致谢。
答案 0 :(得分:0)
好吧,我有点想通了。如果我在PCorpus调用中使用dbType="RDS"
,而不是"DB1"
则可以使用<?php
$path = "../../bootstrap/";
require($path . 'autoload.php');
$app = require_once($path . 'app.php');
$app->make('Illuminate\Contracts\Http\Kernel')->handle(Illuminate\Http\Request::capture());
if( !$app['auth']->check() ) {
echo('Please login through [blah blah whatever].');
// or do a header("location:…") here
} else {
require_once('index.php');
}
。这很好,但现在我对于不同的dbTypes真正含义有点困惑。如果有人有答案,我有一个单独的问题:
https://stackoverflow.com/questions/35995536/filehashoption-in-r-tm-and-filehash-packages-what-are-the-different-types
感谢。