[第 11 屆 iT 邦幫忙鐵人賽] Day 06:資料處理

Chao-Hsuan Ke
小小實驗室
Published in
4 min readAug 12, 2019

從這裡開始,開始需要執行程式。在之後的範例裡面,我們會把所有的 code 都先放在TaggingMain_Sample.java裡。

文章列表

為了之後讀取檔案更方便,我們先把所有下載回來的JSON檔裡面的article_id 先存成一個list,產生一個 articlelist.txt

File folder = new File('來源資料夾名稱');File[] listOfFiles = folder.listFiles();
圖1. articlelist.txt 範例

在articlelist.txt中,A部分是檔案名稱,B部分是PTT 文章ID,C部分是作者ID。這三個部分會是之後讀入其他檔案的依據,你也可把當他做是要讀取文章的 Index。

在ReadAllArticlesList()方法中,讀取存放來源JSON檔的資料夾以及裡面的 content。裡面有幾個檢查的 methods,例如檢查 JSON格式以及檔案格式是否合法?分別是 isJSONValid()、ExtensionCheck()以及getFileExtension()。

讀取內文

先來針對要已經下載回來的JSON檔進行處理。在示範檔 TaggingMain_Sample.java 的ReadAllArticles()已經先抓取全部的檔案存成 Vector (filenameVec與articleIdVec,檔名以及文章ID),之後再用 for 迴圈再一一針對每個檔案進行資料的處理。

File file = new File('來源資料夾名稱' + articlelist.txt);BufferedReader bfr = new BufferedReader(new InputStreamReader(new FileInputStream(file)));

在前一篇有提到,我們要抓這些資料回來:

  1. article_id : PTT給該篇文章的單一代號
  2. article_title:該篇文章標題
  3. author:該篇文章作者名
  4. board:版名
  5. content:內文
  6. date:發表時間
  7. ip:作者發表文章的IP
  8. message_count:推文數量

在GetContentByArticleId()這個方法中,丟入剛才分別儲存為兩個Vector的變數filenameVec與articleIdVec,在for迴圈內取出各自index內的值再丟入GetContentByArticleId()中,如此會去各JSON檔中取出該文章ID的內文。

FileReader fr = new FileReader('來源資料夾名稱' + filenameVec.get(i));BufferedReader bfr = new BufferedReader(fr);

由於每個JSON檔中都是用 articles 當作key製作為陣列,所以先取出陣列內的list:

JSONArray jsonarray = new JSONArray(obj.get(“articles”).toString());

之後在各自取出對應的資料,例如作者名稱:

author = articleobj.getString("author");

如此即可取出全部的變數。

免責聲明:本文章提到的股市指數與說明皆為他人撰寫文章內容,包括:選股條件,買入條件,賣出條件和風險控制參數,只適用於文章內的解釋與說明,此提示及建議內容僅供參考之用,並不構成投資研究、認購、招攬或邀約任何人士投資任何投資產品或交易策略,亦不應視為投資建議。

Previous

Next

--

--

Chao-Hsuan Ke
小小實驗室

永遠熱愛自己的工作,總是找一堆事把自己的時間塞滿。喜歡接觸不同領域,像是 歷史、文化、金融和公共政策 等議題,期許著自己會什麼就分享什麼。