R quanteda库,语料库创建错误

时间:2018-01-05 16:20:29

标签: r corpus quanteda

我有一个奇怪的错误,只有在我的同事RStudio运行代码时才会发生。代码正在处理文本语料库,这就是我所做的:

ap.corpus <- corpus(raw.data$text) 
 ap.corpus
#Corpus consisting of 214,226 documents and 0 docvars.
ap.corpus <- Corpus(VectorSource(ap.corpus))
    ap.corpus <- tm_map(ap.corpus,tolower)
ap.corpus<-corpus(ap.corpus)

最后一步是在我到达模型之前重新格式化。我顺利运行此代码没有任何问题。 另一方面,我的同事尝试在完全相同的数据上运行完全相同的代码,并在ap.corpus&lt; -corpus之后得到以下错误(ap.corpus: nrow(docvars)== length(x)不为TRUE

我们试图重新启动R studio,尝试在较小的语料库(仅500个文档)上运行,仍然是同样的错误。 希望其他人遇到类似的错误。这个似乎不是代码问题,因为我从来没有遇到过在我的RStudio中运行这个或类似代码的错误。 注意:我的同事也在R中运行代码,避免使用RStudio。同样的问题。

1 个答案:

答案 0 :(得分:0)

如果没有可重复的示例,这是不可能验证的,但我在这里创建了一个,因为这可能是一个错误。然而,根据我尝试重现报告的错误,我不认为它是。

这种问题最好在quanteda GitHub问题网站上提出,而不是SO问题。但很高兴在这里解决,因为我还会告诉你一种避免使用 tm 的方法(即使你的例子没有指明,很明显你正在使用它的一些功能)。

library("quanteda")
## quanteda version 0.99.22
## Using 7 of 8 threads for parallel computing

ap.corpus <- corpus(LETTERS[1:10])
ap.corpus
## Corpus consisting of 10 documents and 0 docvars.
texts(ap.corpus)
## text1  text2  text3  text4  text5  text6  text7  text8  text9 text10 
##   "A"    "B"    "C"    "D"    "E"    "F"    "G"    "H"    "I"    "J" 

ap.corpus <- tm::Corpus(tm::VectorSource(ap.corpus))
## <<SimpleCorpus>>
## Metadata:  corpus specific: 1, document level (indexed): 0
## Content:  documents: 10
ap.corpus <- tm::tm_map(ap.corpus, tolower)

corpus(ap.corpus)
## Corpus consisting of 10 documents and 0 docvars.
corpus(ap.corpus) %>% texts()
## text1  text2  text3  text4  text5  text6  text7  text8  text9 text10 
##   "a"    "b"    "c"    "d"    "e"    "f"    "g"    "h"    "i"    "j" 

所以看起来一切正常。

但是,没有必要使用 tm 。您可以在 quanteda

中完成以下操作
ap.corpus2 <- corpus(LETTERS[1:10])
texts(ap.corpus2) <- char_tolower(texts(ap.corpus2))
texts(ap.corpus2)
## text1  text2  text3  text4  text5  text6  text7  text8  text9 text10 
##   "a"    "b"    "c"    "d"    "e"    "f"    "g"    "h"    "i"    "j" 

但是我们不鼓励您直接修改语料库,因为如果您希望将这些用于其他目的,那么这是一种破坏性的更改,意味着您无法恢复您的文本的套装版本。

使用以下工作流程会更好:

corpus(c("A B C", "C D E")) %>%
    tokens() %>%
    tokens_tolower()

## tokens from 2 documents.
## text1 :
## [1] "a" "b" "c"
## 
## text2 :
## [1] "c" "d" "e"