【问题标题】:R - Text Mining - Importing a Corpus and keeping the file names in document term matrixR - 文本挖掘 - 导入语料库并将文件名保留在文档术语矩阵中
【发布时间】:2014-10-08 13:19:44
【问题描述】:

直到最近(1 个月前),下面显示的代码允许我将存储在本地文件夹中的一系列 .txt 文档导入 R,创建语料库,对其进行预处理,最后将其转换为文档术语矩阵。我遇到的问题是没有导入文档名称,而是将每个文档列为“字符(0)”。

我的目标之一是对语料库进行主题建模,因此我可以将文档名称与模型生成的主题相关联,这一点很重要。

有人对发生的变化有什么建议吗?或者我该如何解决这个问题?

library("tm")
library("SnowballC")

setwd("C:/Users/Documents/Dataset/")
corpus <-Corpus(DirSource("blog"))


#pre_processing
myStopwords <- c(stopwords("english"))
your_corpus <- tm_map(corpus, tolower)
your_corpus <- tm_map(your_corpus, removeNumbers)
your_corpus <- tm_map(your_corpus, removeWords, myStopwords) 
your_corpus <- tm_map(your_corpus, stripWhitespace)
your_corpus <- tm_map(your_corpus, removePunctuation)
your_corpus <- tm_map(your_corpus, stemDocument)
your_corpus <- tm_map(your_corpus, PlainTextDocument)

#creating a doucment term matrix
myDtm <- DocumentTermMatrix(your_corpus, control=list(wordLengths=c(3,Inf)))

dim(myDtm)
inspect(myDtm)

【问题讨论】:

  • 我以前遇到过这个问题,但不记得问题/解决方法了。如果在每次操作后检查 your_corpus,您可以看到 id 何时被删除。然后您可以搜索该操作。另外,检查这个答案stackoverflow.com/questions/24501514/…

标签: r import text-mining corpus


【解决方案1】:

这是一个用于识别/纠正文件名丢失的调试会话。下一行被修改,明文行被注释掉,因为这些行删除了文件信息。此外,如果您检查 ds$reader,您可以看到基线阅读器创建了一个纯文本文档。

library("tm")
library("SnowballC")

# corpus <-Corpus(DirSource("blog"))

sf<-system.file("texts", "txt", package = "tm")
ds <-DirSource(sf)
your_corpus <-Corpus(ds)

# Check status with the following line
meta(your_corpus[[1]])

#pre_processing
myStopwords <- c(stopwords("english"))
# your_corpus <- tm_map(your_corpus, tolower)
your_corpus <- tm_map(your_corpus, content_transformer(tolower))
meta(your_corpus[[1]])
your_corpus <- tm_map(your_corpus, removeNumbers)
meta(your_corpus[[1]])
your_corpus <- tm_map(your_corpus, removeWords, myStopwords) 
meta(your_corpus[[1]])
your_corpus <- tm_map(your_corpus, stripWhitespace)
meta(your_corpus[[1]])
your_corpus <- tm_map(your_corpus, removePunctuation)
meta(your_corpus[[1]])
your_corpus <- tm_map(your_corpus, stemDocument)
meta(your_corpus[[1]])
#your_corpus <- tm_map(your_corpus, PlainTextDocument)
#meta(your_corpus[[1]])

#creating a doucment term matrix
myDtm <- DocumentTermMatrix(your_corpus, control=list(wordLengths=c(3,Inf)))

dim(myDtm)
inspect(myDtm)

【讨论】:

  • @user3969377:如果我注释掉 PlainText Document 行,我会得到一个Error: inherits(doc, "TextDocument") is not TRUE。只是为了摆脱这一点,我引入了纯文本文档转换。但文件名仍然丢失。
  • 您可以访问作物中的单词“id”字段,并在循环中将其替换为您的文件名。可以从这里访问 id。像这样轻松替换名称:Your_corpos[[2]]$meta$id
【解决方案2】:

这是一种使用qdap 的方法,我创建了一个函数来读取文件目录并将它们转换为data.frame:

library(qdap)
sf <- system.file("texts", "txt", package = "tm")

read_in <- function(sf) {
    list2df(setNames(lapply(file.path(sf, dir(sf)), function(x) {
        clean(unbag(readLines(x)))}), dir(sf)), "text", "source")[, 2:1]
}

mydtm <- with(read_in(sf), as.dtm(text, source, stem=TRUE, 
    stopwords=tm::stopwords("english")))
mydtm <- Filter(mydtm, min=3)
inspect(mydtm)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-31
    • 2021-07-27
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    相关资源
    最近更新 更多