我有一个奇怪的错误,只有在我的同事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。同样的问题。
答案 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"