2013-08-29 49 views
9

試圖對Twitter數據進行一些分析。下載的鳴叫和使用下面的Twitter數據分析 - 術語文檔矩陣中的錯誤

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

在嘗試下面創建一個TermDocumentMatrix,我得到一個錯誤和警告建立語料庫從微博的文字。

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 

任何人都可以指出這個錯誤是什麼意思?這可能與tm包有關嗎?

tm庫已導入。 我正在使用R版本:R 3.0.1和RStudio:0.97

+0

你能用一個小文本文件(你可以共享的文件)重現這個錯誤嗎? –

回答

7

我認爲錯誤是由於tm函數無法處理的推文消息中的一些「奇特」字符。我使用推文作爲語料庫來源時遇到了同樣的錯誤。 也許以下解決方法幫助:

#閱讀一些鳴叫消息(這裏從文本文件)爲載體

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

#明確轉換的推文成UTF-8

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

#上面的轉換會留下矢量條目「NA」,即那些無法處理的推文。用下面的命令刪除「NA」條目:

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

如果有些鳴叫的缺失是不是你的解決方案的問題(例如建立一個詞雲),那麼這種方法可能工作,並且可以通過繼續調用tm包的語料庫功能。

問候 - 阿爾伯特

12

我有同樣的問題,事實證明它是包的兼容性的問題。嘗試調用DocumentTermMatrix之前安裝

install.packages("SnowballC") 

和負載

library(SnowballC) 

它解決了我的問題。

+0

你能否詳細說明爲什麼這是一個解決方案? –

+0

我不確定兼容性問題的細節。可能與最近更新的大滿貫有什麼關係?這不行嗎? – Guillaume

+0

謝謝你。你是一個拯救生命的人! – nutsiepully

3

正如阿爾貝建議,將文本編碼轉換爲「utf-8」解決了我的問題。但是,而不是刪除有問題的字符,整個鳴叫,你可以使用選項的iconv,只除去在鳴叫「壞」字,並保持休息:

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

這不會產生港定居了並且不需要進一步的過濾步驟。

0

我認爲這個問題是由於文本中出現一些奇怪的字符而發生的。這是我的解決方案:

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

有一些德語元音變音字母和一些特殊的字體導致錯誤。 我無法刪除它們在R ..甚至通過將其轉換爲utf-8。 (我是一個新的R用戶) 所以我用excel刪除德文字母,然後沒有錯誤後..

7

我已經找到一種方法來解決這個問題在關於TM的文章。

在下面的錯誤如下的例子:

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 

,因爲你需要的類矢量源做你的期限文檔矩陣的一個對象,則會出現此錯誤,但以前的轉換轉換你的字符文本的語料庫,因此,改變一個不被該函數接受的類。

但是,如果在使用函數TermDocumentMatrix之前添加一個命令,則可以繼續。

下面遵循與新的命令代碼:

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) 

因此,你會不會有更多的問題與此有關。

相關問題