更新
我想我可能有一个解决方法来解决这个问题,只需添加一个代码:dtms = removeSparseTerms(dtm,0.1)
它将删除语料库中的稀疏字符。但我认为这只是一种解决方法,仍在等待专家的回答!
最近我正在使用tm包在R中学习文本挖掘。我有一个想法,就最大频率的ABAP程序中的单词绘制一个词云。所以我写了一个R程序来实现这个目标。
library(tm)
library(SnowballC)
library(wordcloud)
# set path
path = system.file("texts","abapcode",package = "tm")
# make corpus
code = Corpus(DirSource(path),readerControl = list(language = "en"))
# cleanse text
code = tm_map(code,stripWhitespace)
code = tm_map(code,removeWords,stopwords("en"))
code = tm_map(code,removePunctuation)
code = tm_map(code,removeNumbers)
# make DocumentTermMatrix
dtm = DocumentTermMatrix(code)
#freqency
freq = sort(colSums(as.matrix(dtm)),decreasing = T)
#wordcloud(code,scale = c(5,1),max.words = 50,random.order = F,colors = brewer.pal(8, "Dark2"),rot.per = 0.35,use.r.layout = F)
wordcloud(names(freq),freq,scale = c(5,1),max.words = 50,random.order = F,colors = brewer.pal(8, "Dark2"),rot.per = 0.35,use.r.layout = F)
但是在我的ABAP代码中,某些变体在变体名称中包含“_”和“ - ”,所以如果我执行了这个:
code = tm_map(code,removePunctuation)
如果删除“_”或“ - ”,有些单词会很奇怪。
这次单词是正确的,但是出现了一些意想不到的字符,例如我的ABAP代码commet ......
那么我们是否有一些方法可以完全删除我们不想要的标点符号并保留我们想要的标点符号?
答案 0 :(得分:5)
发布代码格式的答案,但它是content_transformer
文档中getTransformtions
的{{1}}文档的改编:
主要是在tm_map
中使用gsub
与content_transformer
减去removePunctuation
和_
(-
正则表达式类)相同。 [:punct:]
可以选择保留短划线removePunctuation
,但不能保留下划线-
。
_
在角色类中,您必须转义f <- content_transformer(function(x, pattern) gsub(pattern, "", x))
code <- tm_map(code, f, "[!\"#$%&'*+,./)(:;<=>?@\][\\^`{|}~]")
,\
和右括号"
。
答案 1 :(得分:1)
好的......所以以下作品...... 将语料库转换为数据框,删除不需要的字符,然后重新转换为语料库...
dataframe<-data.frame(text=unlist(sapply(code,
[, "content")), stringsAsFactors=F)
dataframe$text <- gsub("[][!#$%()*,.:;<=>@^_|~.{}]", "", dataframe$text)
code <- corpus(Vectorsource(dataframe$text))