8

试图对推特数据进行一些分析。下载了推文并使用以下内容从推文的文本中创建了一个语料库

# 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

4

6 回答 6

11

我遇到了同样的问题,结果证明这是包兼容性的问题。尝试安装

install.packages("SnowballC")

并加载

library(SnowballC)

在调用 DocumentTermMatrix 之前。

它解决了我的问题。

于 2013-10-15T14:07:21.293 回答
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 包的语料库函数来继续。

问候——阿尔伯特

于 2013-10-04T14:26:33.973 回答
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)

因此,您不会有更多的问题。

于 2014-10-09T19:43:11.033 回答
3

正如 Albert 所建议的,将文本编码转换为“utf-8”为我解决了这个问题。但是,您可以使用 iconv 中的sub选项仅删除推文中的“坏”字符并保留其余字符,而不是删除带有问题字符的整个推文:

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

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

于 2013-11-27T19:03:42.900 回答
0

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

于 2014-07-15T04:55:03.590 回答
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))
于 2014-05-08T05:00:26.713 回答