3

我有一个冗长的 txt 文件(每个文件大约 20.000-30.000 个字)的语料库(622 个文档),我正在尝试在 R 中探索。我已经使用 tm 包进行了一些基本的文本挖掘,并想深入研究主题现在建模。但是,由于对此非常陌生,我已经在为数据准备的一些基础知识而苦苦挣扎。此处提供了我当前正在使用的文件示例:http: //s000.tinyupload.com/? file_id=46554569218218543610

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

  2. 文本来自 OCR 的杂志文章,所以如果我将文档拆分,我想我应该在这些段落中添加一个元数据标签,告诉我它最初来自哪个问题(基本上只是原始文件名),正确? 有没有办法轻松做到这一点?

  3. 一般来说,任何人都可以推荐一个很好的 R 主题建模的实践介绍吗?实际上,一个像三年级学生一样手把手教我的教程会很棒。我正在使用“topicmodels”和“lda”的文档,但是对于新手来说学习曲线相当陡峭。 编辑:为了清楚起见,我已经阅读了很多关于主题建模的流行介绍(例如Scott Weingart历史学家的 MALLET 教程)。我在想一些特定于 R 中的过程的东西。

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

4

2 回答 2

3

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

  1. 是的。将文本分成块是常见且可取的。确切的尺寸是一个品味问题。它通常在 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)
    }   
    
  2. 是的,您可能会从一些代码开始,然后再提出一个更具体的问题。这样您就可以充分利用本网站。

  3. 有关文本挖掘和主题建模的基本介绍,请参阅 Matthew Jockers为文学学生使用 R 的文本分析一书

如果您已经对 MALLET 有点熟悉,那么请尝试rmallet进行主题建模。网上有很多代码片段使用这个,这是我的一个

于 2013-10-29T18:23:24.270 回答
3

我最近有一个类似的项目,通常,至少完成了其中的一些步骤:

  • removeWords(your corpus, stopwords("english"))去除停用词:您可以通过tm 包中的 轻松做到这一点。此外,您可以构建自己的停用词列表并通过相同的功能将其删除。
  • 通常你也会删除数字和标点符号(参见 tm 包)。
  • 也很常见的是词干提取(参见Wikipedia以获得解释)和删除稀疏术语,这有助于减少术语文档矩阵的维度,而信息损失很少(在 tm 和 RWeka 包中)。
  • 有些人还喜欢只使用名词/专有名词或名词短语。请参阅此处了解概述以及您可以在Kevin 的单词列表页面上找到的一些单词列表和词性词典。
  • 关于分段:这应该可以通过NgramTokenizerRweka 包看到tm 包常见问题解答
  • 一篇关于一般预处理的好文章可以在 这里找到,或者更科学的在这里
  • 关于元数据管理,请参见tm package vignette
  • R + 主题模型的另一个示例可以在Ponweiser 2012中找到

我了解到文本挖掘有点不同。在一种情况下改善结果的事情在另一种情况下不起作用。需要大量测试哪些参数和哪些预处理步骤可以改善您的结果......所以玩得开心!

于 2013-10-29T17:54:17.033 回答