2013-08-29 39 views
9

Cố gắng thực hiện một số phân tích dữ liệu twitter. Tải về các tweets và tạo ra một corpus từ các văn bản của các tweet bằng cách sử dụng dưới đâyPhân tích dữ liệu Twitter - Lỗi trong ma trận tài liệu thuật ngữ

# Creating a Corpus 
wim_corpus = Corpus(VectorSource(wimbledon_text)) 

Trong cố gắng để tạo ra một TermDocumentMatrix như dưới đây, tôi nhận được một lỗi và cảnh báo.

tdm = TermDocumentMatrix(wim_corpus, 
         control = list(removePunctuation = TRUE, 
             stopwords = TRUE, 
             removeNumbers = TRUE, tolower = TRUE)) 

Error in simple_triplet_matrix(i = i, j = j, v = as.numeric(v), nrow = length(allTerms), : 'i, j, v' different lengths 


In addition: Warning messages: 
1: In parallel::mclapply(x, termFreq, control) : 
all scheduled cores encountered errors in user code 
2: In is.na(x) : is.na() applied to non-(list or vector) of type 'NULL' 
3: In TermDocumentMatrix.VCorpus(corpus) : invalid document identifiers 
4: In simple_triplet_matrix(i = i, j = j, v = as.numeric(v), nrow = length(allTerms), : 
NAs introduced by coercion 

Mọi người có thể chỉ ra lỗi này cho biết điều này có thể liên quan đến gói tm không?

Thư viện tm đã được nhập. Tôi đang sử dụng R Phiên bản: R 3.0.1 và RStudio: 0.97

+0

Bạn có thể tạo lại lỗi này bằng một tệp văn bản nhỏ (một số tệp bạn có thể chia sẻ) không? –

Trả lời

7

Tôi nghĩ rằng lỗi là do một số ký tự "lạ" trong các tin nhắn tweet, mà chức năng tm không thể xử lý. Tôi đã gặp lỗi tương tự khi sử dụng tweets dưới dạng nguồn dữ liệu. Có lẽ cách giải quyết sau đây sẽ giúp:

# Đọc một số tin nhắn tweet (ở đây từ một tập tin văn bản) vào một vector

rawTweets <- readLines(con = "target_7_sample.txt", ok = TRUE, warn = FALSE, encoding = "utf-8") 

# Chuyển đổi văn bản tweet một cách rõ ràng thành utf-8

convTweets <- iconv(rawTweets, to = "utf-8") 

# Chuyển đổi ở trên khiến bạn có các mục nhập vectơ "NA", nghĩa là các tweet không thể xử lý được. Tháo "NA" mục với lệnh sau đây:

tweets <- (convTweets[!is.na(convTweets)]) 

Nếu việc xóa một số tweets không phải là một vấn đề đối với giải pháp của bạn (ví dụ như xây dựng một đám mây từ) thì phương pháp này có thể làm việc, và bạn có thể tiến hành bằng cách gọi hàm Corpus của gói tm.

Kính trọng - Albert

12

Tôi gặp vấn đề tương tự và hóa ra đó là vấn đề với tính tương thích của gói. Hãy thử cài đặt

install.packages("SnowballC") 

và tải với

library(SnowballC) 

trước khi gọi DocumentTermMatrix.

Nó giải quyết được vấn đề của tôi.

+0

Bạn có thể giải thích tại sao đây là giải pháp không? –

+0

Tôi không chắc chắn về chi tiết của sự cố tương thích. Có thể có gì để làm với bản cập nhật gần đây của slam? Điều này có hiệu quả không? – Guillaume

+0

cảm ơn người đàn ông. bạn là một người tiết kiệm cuộc sống! – nutsiepully

3

Như Albert đã đề xuất, việc chuyển đổi mã hóa văn bản thành "utf-8" đã giải quyết được sự cố cho tôi. Nhưng thay vì loại bỏ toàn bộ tweet với các nhân vật có vấn đề, bạn có thể sử dụng phụ tùy chọn trong iconv để chỉ loại bỏ các nhân vật "xấu" trong một tweet và giữ phần còn lại:

tweets <- iconv(rawTweets, to = "utf-8", sub="") 

này không sản xuất NA nữa và không cần thêm bước lọc nào nữa.

0

Tôi nghĩ rằng sự cố này xảy ra do một số ký tự lạ xuất hiện trong văn bản.Đây là giải pháp của tôi:

wim_corpus = tm_map(wim_corpus, str_replace_all,"[^[:alnum:]]", " ") 


tdm = TermDocumentMatrix(wim_corpus, 
         control = list(removePunctuation = TRUE, 
             stopwords = TRUE, 
             removeNumbers = TRUE, tolower = TRUE)) 
0

có một số chữ cái tiếng Nga và một số phông chữ đặc biệt gây ra lỗi. Tôi không thể xóa chúng trong R .. thậm chí bằng cách chuyển đổi nó thành utf-8. (Tôi là một người dùng R mới) vì vậy tôi đã sử dụng excel để xóa các chữ cái tiếng Đức và sau đó không có lỗi sau.

7

Tôi đã tìm ra cách giải quyết vấn đề này trong một bài viết về TM.

Một ví dụ trong đó các lỗi sau đây:

getwd() 
require(tm) 

# Importing files 
files <- DirSource(directory = "texts/",encoding ="latin1") 

# loading files and creating a Corpus 
corpus <- VCorpus(x=files) 

# Summary 

summary(corpus) 
corpus <- tm_map(corpus,removePunctuation) 
corpus <- tm_map(corpus,stripWhitespace) 
corpus <- tm_map(corpus,removePunctuation) 
matrix_terms <- DocumentTermMatrix(corpus) 
Warning messages: 
In TermDocumentMatrix.VCorpus(x, control) : invalid document identifiers 

Lỗi này xảy ra bởi vì bạn cần một đối tượng của lớp Vector Nguồn để làm hạn Document Matrix của bạn, nhưng trước biến đổi biến đổi văn bản của bạn của văn bản trong nhân vật, do đó, thay đổi một lớp mà không được chấp nhận bởi chức năng.

Tuy nhiên, nếu bạn thêm một lệnh nữa trước khi sử dụng hàm TermDocumentMatrix bạn có thể tiếp tục.

Dưới sau mã với lệnh mới:

getwd() 
require(tm) 

files <- DirSource(directory = "texts/",encoding ="latin1") 

# loading files and creating a Corpus 
corpus <- VCorpus(x=files) 

# Summary 
summary(corpus) 
corpus <- tm_map(corpus,removePunctuation) 
corpus <- tm_map(corpus,stripWhitespace) 
corpus <- tm_map(corpus,removePunctuation) 

# COMMAND TO CHANGE THE CLASS AND AVOID THIS ERROR 
corpus <- Corpus(VectorSource(corpus)) 
matriz_terms <- DocumentTermMatrix(corpus) 

Vì vậy, bạn sẽ không có nhiều vấn đề hơn với điều này.