2011-10-28 36 views
14

Tôi đang sử dụng gói R tm và tôi muốn thực hiện một số thao tác khai thác văn bản. Đây là một tài liệu và được coi là một túi từ.Tệp văn bản R và khai thác văn bản ... cách tải dữ liệu

Tôi không hiểu các tài liệu hướng dẫn về cách tải một tập tin văn bản và để tạo ra các đối tượng cần thiết để bắt đầu sử dụng các tính năng như ....

stemDocument(x, language = map_IETF(Language(x))) 

Vì vậy, giả định rằng đây là doc của tôi "này là một thử nghiệm cho tải R "

Làm cách nào để tải dữ liệu để xử lý văn bản và tạo đối tượng x?

Trả lời

6

Bạn không thể sử dụng chức năng readPlain từ cùng một thư viện? Hoặc bạn chỉ có thể sử dụng chức năng scan phổ biến hơn.

mydoc.txt <-scan("./mydoc.txt", what = "character") 
5

Tôi thực sự thấy điều này khá khó khăn để bắt đầu, vì vậy đây là giải thích toàn diện hơn.

Trước tiên, bạn cần thiết lập nguồn cho tài liệu văn bản của mình. Tôi thấy rằng cách dễ nhất (đặc biệt là nếu bạn có kế hoạch bổ sung thêm tài liệu, là để tạo ra một nguồn thư mục đó sẽ đọc tất cả các tập tin của bạn trong.

source <- DirSource("yourdirectoryname/") #input path for documents 
YourCorpus <- Corpus(source, readerControl=list(reader=readPlain)) #load in documents 

Sau đó, bạn có thể áp dụng các chức năng StemDocument để Corpus của bạn. HTH ..

20

Giống như @richiemorrisroe tôi thấy điều này kém tài liệu đây là cách tôi nhận được văn bản của tôi trong để sử dụng với các gói tm và làm cho ma trận hạn tài liệu:

library(tm) #load text mining library 
setwd('F:/My Documents/My texts') #sets R's working directory to near where my files are 
a <-Corpus(DirSource("/My Documents/My texts"), readerControl = list(language="lat")) #specifies the exact folder where my text file(s) is for analysis with tm. 
summary(a) #check what went in 
a <- tm_map(a, removeNumbers) 
a <- tm_map(a, removePunctuation) 
a <- tm_map(a , stripWhitespace) 
a <- tm_map(a, tolower) 
a <- tm_map(a, removeWords, stopwords("english")) # this stopword file is at C:\Users\[username]\Documents\R\win-library\2.13\tm\stopwords 
a <- tm_map(a, stemDocument, language = "english") 
adtm <-DocumentTermMatrix(a) 
adtm <- removeSparseTerms(adtm, 0.75) 

trong trường hợp này, bạn không cần phải chỉ định tên tệp chính xác, miễn là tên tệp duy nhất trong t thư mục được đề cập trong dòng 3, nó sẽ được các hàm tm sử dụng. Tôi làm theo cách này bởi vì tôi không có bất kỳ thành công nào trong việc chỉ định tên tệp trong dòng 3.

Nếu bất kỳ ai có thể đề xuất cách đưa văn bản vào gói lda, tôi sẽ biết ơn nhất. Tôi không thể làm được điều đó.

+1

Tôi vừa phát hiện ra rằng hàm stemDocument dường như không hoạt động chút nào trừ khi ngôn ngữ được chỉ định, vì vậy tôi đã chỉnh sửa mã ở trên để bao gồm. – Ben

2

Tôi tin rằng những gì bạn muốn làm là đọc từng tệp riêng lẻ và sau đó xử lý các hàng khác nhau trong tệp văn bản dưới dạng các quan sát khác nhau.

Xem nếu điều này mang đến cho bạn những gì bạn muốn:

text <- read.delim("this is a test for R load.txt", sep = "/t") 
text_corpus <- Corpus(VectorSource(text), readerControl = list(language = "en")) 

này được giả định rằng các tập tin "này là một thử nghiệm cho R load.txt" chỉ có một cột trong đó có các dữ liệu văn bản.

Ở đây, "text_corpus" là đối tượng bạn đang tìm kiếm.

Hy vọng điều này sẽ hữu ích.

0

Đây là giải pháp của tôi cho tệp văn bản có dòng trên mỗi quan sát. họa tiết mới nhất trên tm (tháng 2 năm 2017) cho biết thêm chi tiết.

text <- read.delim(textFileName, header=F, sep = "\n",stringsAsFactors = F) 
colnames(text) <- c("MyCol") 
docs <- text$MyCol 
a <- VCorpus(VectorSource(docs)) 
Các vấn đề liên quan