r - 如何为 R 中的主题建模(topicmodels、lda、tm)准备数据?

标签 r lda topic-modeling

<分区>

我有一个语料库(622 个文档),其中包含冗长的 txt 文件(每个文件约 20.000-30.000 个单词),我正试图在 R 中进行探索。我已经使用 tm 包进行了一些基本的文本挖掘,并且想现在深入研究主题建模。然而,作为一个新手,我已经在为一些数据准备的基础知识而苦苦挣扎。此处提供了我当前正在使用的文件示例:http://s000.tinyupload.com/?file_id=46554569218218543610

  1. 我假设将这些冗长的文档输入主题建模工具是毫无意义的。所以我想将它们分成段落(或者可能是 300-500 个单词的集合,因为我的数据中有很多多余的段落中断和 OCR 错误)。您会在 VCorpus 中执行此操作还是我应该实际划分源文件(例如使用 shell 脚本)?有什么建议或经验吗?

  2. 文本来自经过 OCR 处理的杂志文章,因此如果我将文档拆分开来,我想我应该为这些段落添加一个元数据标签,告诉我它最初来自哪一期(基本上只是原始文件名),对吗?有没有办法轻松做到这一点?

  3. 一般来说,谁能推荐一本关于 R 主题建模的实用入门书?实际上,像三年级学生一样带我动手的教程会很棒。我正在使用“topicmodels”和“lda”的文档,但对于新手来说学习曲线相当陡峭。 编辑: 明确一点,我已经阅读了很多关于主题建模的流行介绍(例如 Scott WeingartMALLET tutorials for Historians )。我在想 R 中特定于进程的东西。

希望这些问题不是完全多余的。感谢您花时间阅读!

最佳答案

你的问题中没有代码,所以它不太适合这个网站。也就是说,这里有一些可能有用的评论。如果您提供代码,您将获得更具体和有用的答案。

  1. 是的。将文本分成 block 是常见且可取的。确切的尺寸取决于品味。它通常在 R 中完成,我在制作语料库之前已经完成了。您也可以只对名词进行子集化,就像@holzben 建议的那样。下面是一些将语料库切割成 block 的代码:

    corpus_chunk <- function(x, corpus, n) {
    # convert corpus to list of character vectors
    message("converting corpus to list of vectors...")
    listofwords <- vector("list", length(corpus))
    for(i in 1:length(corpus))
      {
      listofwords[[i]] <- corpus[[i]]
      }
    message("done")
    # divide each vector into chunks of n words
    # from http://stackoverflow.com/q/16232467/1036500
    f <- function(x) 
    {
    y <- unlist(strsplit(x, " "))
    ly <- length(y)
    split(y, gl(ly%/%n+1, n, ly))
    }
    message("splitting documents into chunks...")
    listofnwords1 <- sapply(listofwords, f)
    listofnwords2 <- unlist(listofnwords1, recursive = FALSE)
    message("done")
    # append IDs to list items so we can get bibliographic data for each chunk
    lengths <- sapply(1:length(listofwords), function(i) length(listofnwords1[[i]]))
    names(listofnwords2) <- unlist(lapply(1:length(lengths), function(i)  rep(x$bibliodata$x[i], lengths[i])))
    names(listofnwords2) <- paste0(names(listofnwords2), "_", unlist(lapply(lengths,     function(x) seq(1:x))))
    return(listofnwords2)
    }   
    
  2. 是的,您可能会从一些代码开始,然后返回一个更具体的问题。这就是您充分利用本网站的方式。

  3. 有关文本挖掘和主题建模的基本介绍,请参阅 Matthew Jockers 的书 Text Analysis with R for Students of Literature

如果您已经对 MALLET 有点熟悉,请尝试 rmallet用于主题建模。网络上有很多使用它的代码片段,here's one of mine .

关于r - 如何为 R 中的主题建模(topicmodels、lda、tm)准备数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19659887/

相关文章:

python-3.x - 负值 : Evaluate Gensim LDA with Topic Coherence

mysql - 如何在不删除换行符的情况下在 Sweave 中使用 SQL 查询格式化 R 源代码?

python - LDA2Vec Python 实现示例?

python - 如何在gensim中打印出LDA主题中单词的完整分布?

apache-spark - Spark MLLib LDA结果解读

scikit-learn - LDA 主题模型性能 - scikit-learn 的主题一致性实现

r - 如何在 R read.csv 中为轴标签添加多个下标?

r - 以 'sweep'的方式将单列矩阵与R中的表组合

r - 导入数据框时过滤多个 csv 文件

regex - R 正则表达式错误 :java. lang.NoSuchMethodException 中的 Mallet:给定参数没有合适的方法