R {tm}包:大型PCorpus导致“readSingleKey中的错误......”

时间:2016-03-07 21:16:57

标签: r tm

我有一个奇怪的问题,我似乎无法做出正面或反面。任何帮助是极大的赞赏。我在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个条款。

提前致谢。

1 个答案:

答案 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

感谢。