缺少R tm文档名称

时间:2016-06-30 07:20:20

标签: r tm

使用R {tm}包,我按照惯例创建一个语料库:

mycorpus <- Corpus(DirSource(folder,pattern="txt"))

请注意我没有使用编码变量。 summary (mycorpus)显示列出的文档名称。但是在一系列tm_map变换之后:

(content_transformer(tolower),content_transformer(removeWords), stopwords("SMART"),stripWhitespace)mycorpus<- tm_map(mycorpus, PlainTextDocument)mydtm <- DocumentTermMatrix(mycorpus, control = list(...))

结尾

我在inspect(mydtm[1:10, intersect(colnames(dtm), 'toyota')])收到错误,无法获取我的变量: Terms Docs toyota character(0) 0 character(0) 0 character(0) 0 character(0) 0 character(0) 1 character(0) 0 character(0) 0 character(0) 0 character(0) 1 character(0) 0

文件名(doc ids)已消失。知道什么可能导致这个错误?更重要的是,我如何恢复文件名?非常感谢。

2 个答案:

答案 0 :(得分:0)

以下代码适用于单个文件。您可能会使用类似list.files的内容来读取目录中的所有文件 首先,我将清理功能包装在自定义功能中。请注意,如果该功能不是来自content_transformer,则必须使用tm

clean.corpus<-function(corpus){
  corpus <- tm_map(corpus, removePunctuation)
  corpus <- tm_map(corpus, stripWhitespace)
  corpus <- tm_map(corpus, removeNumbers)
  corpus <- tm_map(corpus, content_transformer(tolower))
  corpus <- tm_map(corpus, removeWords, custom.stopwords)
  return(corpus)
}

然后将英语单词与自定义单词连接起来。这是作为上面自定义函数的最后一部分传递的。

custom.stopwords <- c(stopwords('english'), 'lol', 'smh')

doc<-read.csv('coffee.csv', header=TRUE)

CSV是一个数据框,在文本文档中包含一列推文,另一列包含每条推文的ID。我的工作室中包含此文件的文件是here。 csv文件现在在内存中,因此下一步是在制作语料库时以表格形式读取它并使用特定的映射。此处的内容位于名为text的列中,唯一ID位于列名“id”中。

custom.reader <- readTabular(mapping=list(content="text", id="id"))
corpus <- VCorpus(DataframeSource(doc),  readerControl=list(reader=custom.reader))
corpus<-clean.corpus(corpus)

语料库创建使用readerControl,然后一旦完成,您就可以应用预处理步骤。如果没有阅读器控件,程序包会将0字符指定为名称。

可以在此处访问文档1的语料库内容

corpus[[1]][1]

您可以使用此代码

查看第一个文档的语料库元数据
corpus[[1]][2]

所以我认为无论来源如何,您都需要在语料库构建中使用readTabularreaderControl

答案 1 :(得分:0)

我遇到了同样的问题,我意识到这是由于 tolower tolower ,与 removeNumbers removePunctuation removeWords stemDocument stripWhitespace不同不是 tm 包中定义的转换。要获取可以直接应用于语料库的tm包中定义的转换列表,请键入:

getTransformations()
[1] “removeNumbers” “removePunctuation” “removeWords” “stemDocument” “stripWhitespace”

因此,为了使用 tolower ,首先必须对 tolower 进行转换,才能正确处理语料库对象。

docs <- tm_map(docs,content_transformer(tolower))

上面的代码行应该阻止文件重命名为字符(0)

同样的技巧可以应用于任何R函数以使用语料库。例如,对于gsub,以下语法适用:

docs <- tm_map(docs, content_transformer(gsub), pattern = “internt”, replacement = “internet”)