Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4112888
  • 博文数量: 626
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 11080
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-23 13:08
文章分类

全部博文(626)

文章存档

2015年(72)

2014年(48)

2013年(506)

分类: IT业界

2013-10-11 09:28:32

用R读取PDF并进行数据挖掘,例子如下:


[javascript] view plaincopyprint?
  1. # here is a pdf for mining  
  2. url <- "http://www.noisyroom.net/blog/RomneySpeech072912.pdf"  
  3. dest <- tempfile(fileext = ".pdf")  
  4. download.file(url, dest, mode = "wb")  
  5.  
  6. # set path to pdftotxt.exe and convert pdf to text  
  7. exe <- "C:\\Program Files\\xpdfbin-win-3.03\\bin32\\pdftotext.exe"  
  8. system(paste("\"", exe, "\" \"", dest, "\"", sep = ""), wait = F)  
  9.  
  10. # get txt-file name and open it  
  11. filetxt <- sub(".pdf"".txt", dest)  
  12. shell.exec(filetxt); shell.exec(filetxt) # strangely the first try always throws an error..  
  13.  
  14. # do something with it, i.e. a simple word cloud  
  15. library(tm)  
  16. library(wordcloud)  
  17. library(Rstem)  
  18.   
  19. txt <- readLines(filetxt) # don't mind warning..  
  20.   
  21. txt <- tolower(txt)  
  22. txt <- removeWords(txt, c("\\f", stopwords()))  
  23.   
  24. corpus <- Corpus(VectorSource(txt))  
  25. corpus <- tm_map(corpus, removePunctuation)  
  26. tdm <- TermDocumentMatrix(corpus)  
  27. m <- as.matrix(tdm)  
  28. d <- data.frame(freq = sort(rowSums(m), decreasing = TRUE))  
  29.  
  30. # Stem words  
  31. d$stem <- wordStem(row.names(d), language = "english")  
  32.  
  33. # and put words to column, otherwise they would be lost when aggregating  
  34. d$word <- row.names(d)  
  35.  
  36. # remove web address (very long string):  
  37. d <- d[nchar(row.names(d)) < 20, ]  
  38.  
  39. # aggregate freqeuncy by word stem and  
  40. # keep first words..  
  41. agg_freq <- aggregate(freq ~ stem, data = d, sum)  
  42. agg_word <- aggregate(word ~ stem, data = d, function(x) x[1])  
  43.   
  44. d <- cbind(freq = agg_freq[, 2], agg_word)  
  45.  
  46. # sort by frequency  
  47. d <- d[order(d$freq, decreasing = T), ]  
  48.  
  49. # print wordcloud:  
  50. wordcloud(d$word, d$freq)  
  51.  
  52. # remove files  
  53. file.remove(dir(tempdir(), full.name=T)) # remove files  

阅读(2607) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~