2014-10-08 54 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)