2014-08-27 17 views
6

Tôi đang cố gắng khai thác văn bản trên dữ liệu lớn trong R với tm.Sử dụng chức năng Corpus của tm với dữ liệu lớn trong R

tôi chạy vào các vấn đề bộ nhớ thường xuyên (như can not allocation vector of size....) và sử dụng các phương pháp thành lập của xử lý sự cố các vấn đề này, chẳng hạn như

  • sử dụng 64-bit R
  • cố gắng khác nhau của hệ điều hành (Windows, Linux, Solaris , vv)
  • thiết memory.limit() để tối đa của nó
  • đảm bảo rằng có đủ RAM và tính toán có sẵn trên máy chủ (mà có)
  • mak ing sử dụng tự do của gc()
  • profiling mã cho tắc nghẽn
  • phá vỡ hoạt động lớn thành nhiều hoạt động nhỏ hơn

Tuy nhiên, khi cố gắng chạy Corpus trên một vector của một trường văn bản triệu hoặc lâu hơn, tôi gặp phải một lỗi bộ nhớ hơi khác so với bình thường và tôi không chắc chắn cách khắc phục sự cố. Lỗi này là:

> ds <- Corpus(DataframeSource(dfs)) 
Error: memory exhausted (limit reached?) 

có thể (và nên) Tôi chạy Corpus từng bước trên khối lượng hàng từ nguồn dataframe sau đó kết hợp các kết quả? Có cách nào hiệu quả hơn để thực hiện điều này không?

Kích thước dữ liệu sẽ tạo ra lỗi này phụ thuộc vào máy tính đang chạy, nhưng nếu bạn tích hợp bộ dữ liệu crude và sao chép tài liệu cho đến khi đủ lớn thì bạn có thể sao chép lỗi.

CẬP NHẬT

Tôi đã thử nghiệm với cố gắng để kết hợp corpa nhỏ hơn, ví dụ:

test1 <- dfs[1:10000,] 
test2 <- dfs[10001:20000,] 

ds.1 <- Corpus(DataframeSource(test1)) 
ds.2 <- Corpus(DataframeSource(test2)) 

và trong khi tôi đã không thành công, tôi đã khám phá tm_combine đó là supposed to solve this exact problem. Điểm duy nhất là vì lý do nào đó, bản build R 3.1.1 64 bit của tôi với phiên bản tm mới nhất không thể tìm thấy chức năng tm_combine. Có lẽ nó đã được gỡ bỏ khỏi gói vì một lý do nào đó? Tôi đang điều tra ...

> require(tm) 
> ds.12 <- tm_combine(ds.1,ds.2) 
Error: could not find function "tm_combine" 
+0

Có phải tất cả mã của bạn đều nằm trong một chức năng không? Hoặc một kịch bản? –

+0

đó là tập lệnh tại thời điểm –

+0

Tôi đoán rằng mã của bạn có thể đang tạo quá nhiều bản sao ... nhưng tôi sẽ đợi các chuyên gia. –

Trả lời

2

Tôi không biết nếu tm_combine trở nên bị phản đối hoặc lý do tại sao nó không tìm thấy trong không gian tên tm, nhưng tôi đã tìm thấy một giải pháp thông qua sử dụng Corpus trên những phần nhỏ hơn của dataframe sau đó kết hợp chúng.

This StackOverflow bài đã có một cách đơn giản để làm điều đó mà không tm_combine:

test1 <- dfs[1:100000,] 
test2 <- dfs[100001:200000,] 

ds.1 <- Corpus(DataframeSource(test1)) 
ds.2 <- Corpus(DataframeSource(test2)) 

#ds.12 <- tm_combine(ds.1,ds.2) ##Error: could not find function "tm_combine" 
ds.12 <- c(ds.1,ds.2) 

mang đến cho bạn:

ds.12

<<VCorpus (documents: 200000, metadata (corpus/indexed): 0/0)>> 

Xin lỗi không để con số này ra một mình trước khi yêu cầu. Tôi đã thử và thất bại với các cách kết hợp các đối tượng khác.

Các vấn đề liên quan