2014-10-08 25 views
2

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

我的目标之一是在语料库上进行主题建模,因此将文档名称与模型生成的主题联系起来非常重要。

有没有人有什么建议,以什么改变?或者我可以如何解决这个问题?

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) 
+0

我以前有这个问题,但不记得了问题/ 解析度。如果您在每次操作后检查your_corpus,则可以看到该ID何时被丢弃。然后,您可以搜索该操作。此外,检查这个答案http://stackoverflow.com/questions/24501514/keep-document-id-with-r-corpus – user3969377 2014-10-08 14:25:47

回答

2

这里是一个调试会话来识别/纠正文件名的丢失。由于这些行删除了文件信息,所以tolower行被修改,并且明文行被注释掉了。另外,如果您检查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) 
+0

非常好,现在这个作品。感谢您的帮助:) – user3587152 2014-10-08 17:21:22

+0

@ user3969377:如果我将PlainText Document注释掉,则会得到一个'Error:inherits(doc,“TextDocument”)不是TRUE'。它只是摆脱这一点,我介绍了PlainText文档转换。文件名仍然丢失。 – Pradeep 2016-06-30 10:08:53

+0

您可以访问庄稼中的单词'id'字段,并用您的文件名称替换为一个循环。该ID可从这里访问。像这样轻松替换名字:Your_corpos [[2]] $ meta $ id < - “2ndfileName”。把这是一个循环,你很好去。 – Espanta 2016-09-10 07:02:19

0

下面是使用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)