Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。












想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。

6年前关闭。



Improve this question




我正在尝试在R中探索冗长的txt文件(每个文件大约20.000-30.000字)的语料库(622个文档)。我已经使用tm包进行了一些基本的文本挖掘,并希望深入研究主题现在建模。但是,由于对此很陌生,我已经在数据准备的一些基础方面苦苦挣扎。我当前正在使用的文件的示例可在此处找到:http://s000.tinyupload.com/?file_id=46554569218218543610
  • 我假设仅将这些冗长的文档输入主题建模工具是没有意义的。因此,我想将它们分解为多个段落(或者,考虑到我的数据中有很多多余的段落中断和OCR错误,可以将其分解为300到500个单词的集合)。您是在VCorpus中执行此操作,还是应该实际划分源文件(例如使用Shell脚本)?有什么建议或经验吗?
  • 文字来自OCR的杂志文章,因此,如果我拆分文档,我想我应该在这些段落中添加一个元数据标签,以告诉我它是来自哪个问题的(基本上只是原始文件名),正确?有没有一种方法可以轻松做到这一点?
  • 一般来说,任何人都可以推荐R主题建模的良好动手入门吗?实际上,像我的三年级学生一样动手学习的教程会很棒。我正在使用“topicmodels”和“lda”的文档,但是对于新手来说,学习曲线相当陡峭。
    编辑:请注意,我已经阅读了很多关于主题建模的热门介绍(例如Scott Weingart
    MALLET tutorials for Historians)。我在想
    R.
  • 中特定于进程的内容

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

    最佳答案

    您的问题中没有代码,因此它实际上不适合该网站。就是说,这里有一些可能有用的评论。如果提供代码,您将获得更具体和有用的答案。

  • 是的。将文本分成大块是常见且可取的。确切的尺寸取决于口味。它通常是在R中完成的,我在制作主体之前就已经完成了。您也可以只对名词进行子集化,例如@holzben建议。这里有一些将语料库切成块的代码:
    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)
    }
    
  • 是的,您可以先编写一些代码,然后再提出更具体的问题。这样您才能充分利用本网站的资源。
  • 有关文本挖掘和主题建模的基本介绍,请参见Matthew Jockers的书Text Analysis with R for Students of Literature

  • 如果您已经对MALLET有所了解,请尝试使用 rmallet 进行主题建模。网络上有很多使用此代码段的here's one of mine

    07-24 09:52
    查看更多