尝试对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 :(得分: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删除德语字母然后没有错误..