iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 6
1
AI & Data

人工智慧 vs.工人智慧系列 第 6

Day 06:資料處理

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

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

File folder = new File('來源資料夾名稱');
File[] listOfFiles = folder.listFiles();

https://ithelp.ithome.com.tw/upload/images/20190906/20119726s94sOmWwlN.png

在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");

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


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


上一篇
Day 05 : 先來當個爬蟲
下一篇
Day 07:數據資料來源大部分解 (上集)
系列文
人工智慧 vs.工人智慧30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言