使用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)已消失。知道什么可能导致这个错误?更重要的是,我如何恢复文件名?非常感谢。
答案 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]
所以我认为无论来源如何,您都需要在语料库构建中使用readTabular
和readerControl
。
答案 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”)