【问题标题】:Creating TermDocumentMatrix: issue with number of documents创建 TermDocumentMatrix:文档数量问题
【发布时间】:2015-07-15 08:38:19
【问题描述】:

我正在尝试使用大约 3+ 百万行文本的文本文件创建术语文档矩阵。我创建了一个随机文本样本,结果大约有 300,000 行。

不幸的是,当使用以下代码时,我最终得到了 300,000 个文档。我只想要一份包含每个二元组频率的文档:

library(RWeka)
library(tm)

corpus <- readLines("myfile")
numberLinesCorpus <- 3000000
corpus_sample <- text_corpus[sample(1:numberLinesCorpus, numberLinesCorpus*.1, replace = FALSE)]
myCorpus <- Corpus(VectorSource(corpus_sample))
BigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 1, max = 2))
tdm <- TermDocumentMatrix(myCorpus, control = list(tokenize = BigramTokenizer))

该示例包含大约 300,000 行。但是 tdm 中的文档数也是 300,000。

任何帮助将不胜感激。

【问题讨论】:

    标签: r statistics nlp tm term-document-matrix


    【解决方案1】:

    您需要在 corpus_sample 向量上使用 paste 函数。

    Paste,为collapse 设置了一个值,获取一个包含许多文本元素的向量,并将其转换为一个包含一个文本元素的向量,其中元素由您指定的字符串分隔。

    text <- c('a', 'b', 'c')
    text <- paste(text, collapse = " ")
    text
    # [1] "a b c"
    

    【讨论】:

    • 现在我收到以下错误消息: ls(envir = envir, all.names = private) 中的错误:无效的 'envir' 参数 总结期间错误:无法打开连接
    • 嗯,ls 出错了?这似乎很奇怪。您究竟在哪里收到错误消息?如果您可以用一些数据重写问题以使其可重现,那么帮助解决这个问题会更容易。 stackoverflow.com/questions/5963269/…
    • 我能够在没有标记器 = Bigram 的情况下创建 DocumentTermMatrix。
    【解决方案2】:

    您也可以使用quanteda 包来替代tm。在您创建 corpus_sample 之后,这将在以下步骤中执行您想要的操作:

    require(quanteda)
    myDfm <- dfm(corpus_sample, ngrams = 2)
    bigramTotals <- colSums(myDfm)
    

    我也怀疑它会更快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-31
      • 2022-01-22
      • 2014-06-21
      • 2018-03-30
      • 2015-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多