2013-08-17 25 views
17

Tôi đang sử dụng R 3.0.1 trên Hệ điều hành: x86_64-apple-darwin10.8.0 (64-bit)tm_map có song song :: lỗi mclapply trong R 3.0.1 trên Mac

Tôi cố gắng để sử dụng tm_map từ thư viện tm. Nhưng khi tôi thực thi mã này

library(tm) 
data('crude') 
tm_map(crude, stemDocument) 

tôi nhận được lỗi này:

Warning message: 
In parallel::mclapply(x, FUN, ...) : 
    all scheduled cores encountered errors in user code 

Có ai biết một giải pháp cho việc này?

Trả lời

29

Tôi nghi ngờ bạn chưa cài đặt gói SnowballC, có vẻ như được yêu cầu. tm_map được cho là chạy stemDocument trên tất cả các tài liệu sử dụng mclapply. Hãy thử đơn giản chạy stemDocument chức năng trên một tài liệu, vì vậy bạn có thể trích xuất các lỗi:

stemDocument(crude[[1]]) 

Đối với tôi, tôi đã nhận ra lỗi:

Error in loadNamespace(name) : there is no package called ‘SnowballC’ 

Vì vậy, tôi chỉ cần đi trước và cài đặt SnowballC và nó làm việc . Rõ ràng, SnowballC phải là một phụ thuộc.

17

Tôi chỉ gặp phải điều này. Nó đã cho tôi một chút đào nhưng tôi phát hiện ra những gì đang xảy ra.

  1. Tôi đã có một dòng mã 'rdevel < - tm_map (rdevel, asPlainTextDocument)'

  2. Chạy này tạo ra các lỗi

 

    In parallel::mclapply(x, FUN, ...) : 
     all scheduled cores encountered errors in user code 

  1. Nó chỉ ra rằng 'tm_map' gọi một số mã trong 'song song' để tìm ra số lõi bạn có. Để xem những gì nó nghĩ, gõ
 

    > getOption("mc.cores", 2L) 
    [1] 2 
    > 

  1. Aha khoảnh khắc! Yêu cầu cuộc gọi 'tm_map' chỉ sử dụng một lõi!
 

    > rdevel <- tm_map(rdevel, asPlainTextDocument, mc.cores=1) 
    Error in match.fun(FUN) : object 'asPlainTextDocument' not found 
    > rdevel <- tm_map(rdevel, asPlainTextDocument, mc.cores=4) 
    Warning message: 
    In parallel::mclapply(x, FUN, ...) : 
     all scheduled cores encountered errors in user code 
    > 

... Vì vậy, với nhiều hơn một lõi, chứ không phải là cung cấp cho bạn các thông báo lỗi, 'song song' chỉ cho bạn biết có một lỗi trong mỗi lõi. Không hữu ích, song song! Tôi quên dấu chấm - tên hàm được cho là 'as.PlainTextDocument'!

Vì vậy - nếu bạn gặp lỗi này, hãy thêm 'mc.cores = 1' vào cuộc gọi 'tm_map' và chạy lại.

3

Tôi đã gặp phải sự cố tương tự nhưng cuối cùng đã khắc phục được sự cố. Tôi đoán là nếu tôi đặt tên cho kho là "longName" hoặc "companyNewsCorpus", tôi sẽ gặp vấn đề nhưng nếu tôi sử dụng giá trị gốc dưới dạng "a", nó hoạt động tốt. Thật kỳ lạ.

Dưới đây đang cung cấp cho báo lỗi tương tự nêu trong chủ đề này

companyNewsCorpus <-Corpus(DirSource("SourceDirectory"), 
          readerControl = list(language="english")) 
companyNewsCorpus <- tm_map(companyNewsCorpus, 
          removeWords, stopwords("english")) 

Nhưng nếu tôi chuyển đổi này ở bên dưới, nó hoạt động mà không vấn đề.

a <-Corpus(DirSource("SourceDirectory"), 
      readerControl = list(language="english")) 
a <- tm_map(a, removeWords, stopwords("english")) 
+0

cảm ơn bạn nó thực sự hữu ích – Jijo

11

Tôi tìm thấy một câu trả lời cho điều này đó là thành công đối với tôi trong này question: Charles Copley, trong answer của mình, chỉ ra ông nghĩ rằng gói tm mới đòi hỏi lazy = TRUE phải được xác định một cách rõ ràng.

Vì vậy, mã của bạn sẽ trông như thế này

library(tm) 
data('crude') 
tm_map(crude, stemDocument, lazy = TRUE) 

Tôi cũng đã cố gắng mà không SnowballC để xem nếu nó là sự kết hợp của hai câu trả lời. Nó dường như không ảnh hưởng đến kết quả theo một trong hai cách.

1

Tôi cũng gặp sự cố tương tự này khi sử dụng chức năng xóa bỏ của thư viện tm. Một số câu trả lời khác như đặt số lõi thành 1 đã hoạt động để xóa bộ từ dừng tiếng Anh, tuy nhiên tôi cũng muốn xóa danh sách tùy chỉnh gồm tên và họ của tôi, và các danh sách này lên tới 100.000 mỗi từ dài.

Không có đề xuất nào khác có thể giúp vấn đề này và hóa ra là thông qua một số thử nghiệm và sai lầm, việc xóa AdWords dường như có giới hạn 1000 từ trong vectơ. Vì vậy, để tôi viết chức năng này mà giải quyết vấn đề này cho tôi:

# Let x be a corpus 
# Let y be a vector containing words to remove 
removeManyWords <- function (x, y) { 

     n <- ceiling(length(y)/1000) 
     s <- 1 
     e <- 1000 

     for (i in 1:n) { 

      x <- tm_map(x, content_transformer(removeWords), y[s:e]) 
      s <- s + 1000 
      e <- e + 1000 

     } 

     x 

} 

Chức năng này về cơ bản đếm có bao nhiêu từ trong vector của chữ tôi muốn loại bỏ, và sau đó chia nó bằng 1000 và vòng lên đến gần nhất toàn bộ số, n. Sau đó chúng tôi lặp qua vectơ của các từ để loại bỏ n lần. Với phương pháp này, tôi không cần phải sử dụng lazy = TRUE hoặc thay đổi số lượng lõi để sử dụng như có thể được nhìn thấy từ cuộc gọi removeWords thực tế trong hàm. Hi vọng điêu nay co ich!

0

Tôi đã làm việc trên dữ liệu Twitter và nhận được các lỗi tương tự trong câu hỏi ban đầu trong khi tôi đã cố gắng để chuyển đổi toàn bộ văn bản để giảm với tm_map() chức năng

Warning message: In parallel::mclapply(x, FUN, ...) : 
all scheduled cores encountered errors in user code 

Cài đặt và gói tải SnowballC giải quyết vấn đề hoàn toàn. Hi vọng điêu nay co ich.

3

Tôi chạy vào cùng một vấn đề trong tm sử dụng bộ xử lý Intel i7 lõi ​​tứ chạy trên Mac OS X 10.10.5, và đã nhận được cảnh báo sau đây:

In mclapply(content(x), FUN, ...) scheduled core 1 encountered error in user code, all values of the job will be affected

tôi đã tạo ra một corpus sau khi tải dữ liệu Twitter.

Giải pháp của Charles Copley cũng làm việc cho tôi. Tôi đã sử dụng: tm_map(*filename*, stemDocument, lazy = TRUE) sau khi tạo kho văn bản và sau đó tm hoạt động chính xác.