2016年2月15日 星期一

[R語言] 中文文字探勘 - 以txt文字檔為例 - 文字雲


圖例: 某優質男孩團體討論版
經過分析,大家聊天的重點多為「工作」及「體育」項目。顯示社會新鮮人特有的童貞。


網路上有一些關於R語言的中文探勘方法,但有些文獻過於簡化,因此,巧克將過年期間摸索來的方法,在此向大家分享。

使用的套件為 Rwordseg及TM套件。
使用的版本為 32位元R 及32位元Java。→這點很重要,用64位元rjava無法順利執行。

記得先安裝rjava,才有辦法安裝Rwordseg。
安裝後記得要修改一些環境參數。(下周再來寫QQ)


程式碼如下:(還請大家參考)
install.packages("rJava")
install.packages("Rwordseg", repos="http://R-Forge.R-project.org")
install.packages("tm")
install.packages("tmcn", repos="http://R-Forge.R-project.org", type="source")
install.packages("wordcloud")
install.packages("XML")
install.packages("RCurl")
Sys.setenv(JAVA_HOME="C:\\Program Files (x86)\\Java\\jre1.8.0_71\\bin\\client\\")

library(rJava)
install.packages("Rwordseg", repos = "http://R-Forge.R-project.org")
library(Rwordseg)
library(tm) # 啟用Corpus使用
library(tmcn)  
library(rjson)
library(tm)
segmentCN("今天一直下雨")  # 測試


d.corpus <- Corpus(DirSource(directory ="C:/Users/vaio/Desktop/Wordlog/"), list(language = NA)) # 讀取文字檔(ANSI),指定到資料夾層級) 
d.corpus <- tm_map(d.corpus, removePunctuation) # 移除標點符號
d.corpus <- tm_map(d.corpus, removeNumbers) # 移除數字
d.corpus <- tm_map(d.corpus, function(word) {
  gsub("[A-Za-z0-9]", "", word)
})  # 移除大小寫英文

inspect(d.corpus)


d.corpus <- tm_map(d.corpus, segmentCN, nature = TRUE) # 進行中文斷詞

d.corpus <- tm_map(d.corpus, function(sentence) {
  noun <- lapply(sentence, function(w) {
    w[names(w) == "n"]
  })
  unlist(noun)
}) # 選取名詞


myStopWords <- c(stopwordsCN(), "貼圖", "圖片")
d.corpus <- tm_map(d.corpus, removeWords, myStopWords)


inspect(d.corpus)
d.corpus <- tm_map(d.corpus, PlainTextDocument)
d.corpus <- Corpus(VectorSource(d.corpus)) # 轉向量矩陣

inspect(d.corpus)

tdm <- TermDocumentMatrix(d.corpus, control = list(wordLengths = c(2, Inf)))
inspect(tdm)


library(wordcloud)
m1 <- as.matrix(tdm)
v <- sort(rowSums(m1), decreasing = TRUE)
d <- data.frame(word = names(v), freq = v)
wordcloud(d$word, d$freq, min.freq = 50, random.order = F, ordered.colors = F, 
          colors = rainbow(length(row.names(m1))))

沒有留言:

張貼留言