Twitter数据分析 - 术语文档矩阵中的错误

时间:2013-08-29 07:18:22

标签: r

尝试对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

6 个答案:

答案 0 :(得分:11)

我遇到了同样的问题,但事实证明它与包兼容性有关。尝试安装

install.packages("SnowballC")

并加载

library(SnowballC)

在调用DocumentTermMatrix之前。

它解决了我的问题。

答案 1 :(得分: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包的语料库功能来继续。

问候 - 阿尔伯特

答案 2 :(得分:6)

我在一篇关于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

发生此错误是因为您需要类Vector Source的对象来执行Term Document Matrix,但之前的转换会转换您的文本语料库,因此,更改函数不接受的类。

但是,如果在使用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)

因此,您不会遇到更多问题。

答案 3 :(得分:3)

正如艾伯特建议的那样,将文本编码转换为&#34; utf-8&#34;为我解决了这个问题。但是,您可以使用iconv中的 sub 选项来删除&#34; bad&#34;而不是删除有问题字符的整条推文。推文中的字符并保留其余部分:

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

这不再产生NAs,不需要进一步的过滤步骤。

答案 4 :(得分: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))

答案 5 :(得分:0)

有一些德语变音字母和一些导致错误的特殊字体。 我无法在R中删除它们,即使将它转换为utf-8也是如此。 (我是新的R用户) 所以我用excel删除德语字母然后没有错误..