文字分析平台使用說明

文字分析平台是對文字資料進行簡易分析的工具。
透過平台,使用者可以自己上傳CSV資料集,也可以透過平台直接對PTT各討論板或是蘋果新聞進行爬蟲。平台利用管院提供的平行運算資源,讓使用者快速地對文章做斷詞斷句及其他標注處理。透過平台處理完後的資料,可以根據使用者的需求實現資料視覺化,也可以將資料下載成CSV檔輸出,以便後續在RStudio上執行更進一步的分析。

本頁的教學目的是要讓使用者了解,利用文字分析平台分析文字資料時,使用的順序為何以及哪些地方要注意。欲使用本平台請先至首頁上方服務平台->帳號申請,核准後將予以一組帳號,即可使用文字分析平台

影片教學


平台使用步驟

首先,輸入申請到的帳號密碼登入平台。


進入主頁後,點選『新增文件集』。


建立文件集後可在其中加入資料,您可以上傳自己的CSV資料檔,也可以使用平台附設的PTT討論版爬蟲或是蘋果新聞的爬蟲,本範例以PTT爬蟲為例。


輸入想要抓取資料的區域,選擇開始與結束日期並輸入關鍵字,可輸入多個關鍵字,請以換行分開每個關鍵字。


爬蟲完成後,點選查看爬蟲結果,資料預覽可初步瀏覽所抓取資料的結構與內容,資料分布可觀察資料的時間分佈,接著點選右上角『文字處理』進行下一步動作。(輸出Meta Data可下載文章的推文數、連結、發文者帳號等資料)


進入後可開始調整文字處理參數,語言目前只支援中文


點選Sample Process可進入抽樣處理頁面。


在Sample Process調整好參數後,點選左側全部處理,點選執行,便可進行所有資料的處理,完成後點選左側資料探索,即可依據需求輸出各種的CSV檔案。


點選預覽可檢視資料,根據不同格式,可以有不同的圖形試作。
最後點選檔案下載,即可得到處理好的文字資料CSV檔案。


資料後續分析範例

以下範例是透過R語言執行

  1. 首先,載入需要的library
    library('data.table')
    library('text2vec')
    library('later')
    
  2. 接下來,讀取檔案(文章詞彙格式),將資料處理成文章對應所有出現詞彙的格式
    data <- fread("Ma_artWord.csv",encoding = "UTF-8")
    column <- names(data)[1:ncol(data)]
    
    temp <- data[1]$artTitle
    mystr = "" # Set default String
    text = c()
    id = c()
    id <- append(id, temp) # Set start title_id
    str_vec = c() # word segmentation in one document
    tokens = list() # word segmentation for each documents
    for(i in 1:nrow(data)){
      # the same document
      if(data[i]$artTitle == temp){
        mystr <- paste0(mystr, data[i,5], " ")
        str_vec <- c(str_vec, unname(unlist(data[i,5])))
      }else{
        id <- append(id, data[i]$artTitle)
        text <- append(text, mystr)
        mystr = ""
        tokens[[temp]] <- str_vec
        temp <- data[i]$artTitle
        str_vec = c()
      }
    }
    text <- append(text, mystr) 
    tokens[[temp]] = str_vec # append the last document
    post <- data.frame(id, text)
    
    doc.list <- tokens
    
  3. 將刪除出現次數過少的詞彙並製作詞彙與對應編號陣列
    term.table <- table(unlist(doc.list))
    term.table <- sort(term.table, decreasing = TRUE) # sorted by term frequency
    
    del <- term.table < 5| nchar(names(term.table)) < 2 # term frequency < 5 or len(term) <2
    term.table <- term.table[!del]
    vocab <- names(term.table)
    
  4. 文字轉換為編號
    get.terms <- function(x) {
      index <- match(x, vocab)
      index <- index[!is.na(index)]
      rbind(as.integer(index - 1), as.integer(rep(1, length(index))))
    }
    documents <- lapply(doc.list, get.terms)
    
  5. 設定LDA參數
    K <- 25 # Topics
    G <- 5000 # iteration times
    alpha <- 0.10   
    eta <- 0.02
    
  6. LDA學習
    # LDA
    library(lda)
    set.seed(357)
    fit <- lda.collapsed.gibbs.sampler(documents = documents, K = K, vocab = vocab, num.iterations = G, alpha = alpha, eta = eta, initial = NULL, burnin = 0, compute.log.likelihood = TRUE)
    
    theta <- t(apply(fit$document_sums + alpha, 2, function(x) x/sum(x)))  # DocTopic distribution matrix
    phi <- t(apply(t(fit$topics) + eta, 2, function(x) x/sum(x)))  # Topic-Word distribution matrix
    term.frequency <- as.integer(term.table)   # Term-Frequency
    doc.length <- sapply(documents, function(x) sum(x[2, ])) # length of each Doc
    
  7. 結果視覺化,此套件以網頁瀏覽器呈現,可使用Safari及Firefox開啟,當程式結束,可在該產生資料夾中開啟index.html,即可呈現結果。
    # LDAvis
    library(LDAvis)
    json <- createJSON(phi = phi, theta = theta,
                       doc.length = doc.length, vocab = vocab,
                       term.frequency = term.frequency)
    serVis(json, out.dir = './vis_25_topic', open.browser = FALSE)
    
    點擊圖片可以查看互動式結果