PTT 的八卦板一直是過去記者在採集新聞題材的時候很常使用的資源,八卦板上的文章往往代表著當下討論度最高且最熱門的議題,其熱門程度更可由其推文數以及推噓數可見一斑。在撰寫新聞稿的過程中,往往會需要先找出感興趣的文章之後,再找到其他相關的文章或是回應(RE:),並廣納網友意見,選出可能提高點擊率或是討論熱門程度的文章或是推文。用過去手動的方式一頁一頁地找文章過於耗時且費力,本網路應用程式旨在加速記者收集新聞題材的過程,藉由計算語意的方式自動找出相關語意的文章,並提供多種檔案格式的下載。
隨著科技的進步、資訊的快速交流,網路成為新聞素材的重要來源之一,楊意菁 (2015) 即在研究中整合各國的新聞媒體現狀,並指出「網路對於新聞記者而言,已成為『不可或缺的工具』」;針對新聞報導使用網路的目的,張凱蒂 (2005) 統整為以下三者:發稿、尋找背景資料和閱讀本地新聞。另外,新聞媒體的意義除了呈現社會事件,亦在民意的傳達上扮演重要角色,因此,許多記者便會運用網路論壇的傳播和交流便利性,以「網友說」的書寫方式在新聞報導當中反映民意觀點 (楊意菁,2013)。
綜合以上研究,本網路應用程式的設計發想,便是整合新聞撰稿的資訊瀏覽、事件探索及民意蒐集為主要目的。我們將網路應用程式劃分為「使用說明」、「最新文章」、「新聞素材」和「聯絡我們」四個分頁:「使用說明」簡介本網路應用程式的使用方法;而「聯絡我們」提供本網路應用程式作者的聯絡管道。「最新文章」和「新聞素材」則主要針對新聞媒體撰稿所設計,在「最新文章」分頁中,可即時查看臺灣最大網路論壇 PTT 八卦版 中的最新發表文章;「新聞素材」分頁則在選定標題和數量後,可比對找出相似的文章,亦可在下載的檔案中瀏覽網友於文章中的留言。
本網路應用程式建立的 PTT 文章比對資料庫,收錄自 2022/12/8 至 2022/12/21 於 PTT 八卦版上所發布的文章,共計 19731 篇;而網路應用程式中即時爬取的文章,則為使用當下之 PTT 八卦版最新發文。
本網路應用程式利用 React.js 框架所架構,而其中應用到的爬蟲、斷詞、TF-IDF 和餘弦相似度計算功能,則為 Python 程式撰寫後,以 Flask 包裝成 API (Application Programming Interface),於網路應用程式中呼叫使用。網路應用程式的建構分為以下幾個步驟:
本網路應用程式所需的功能為爬蟲、斷詞、計算 TF-IDF 及比對相似度:爬蟲的書寫參考了 PTT 網路版爬蟲 (Lin, 2018) 之架構,於專案中,除了預先爬取的 PTT 八卦版資料庫,亦將此爬蟲程式運用於網路應用程式的及時爬取文章功能,而結巴斷詞套件用以做文章標題之斷詞,TF-IDF 的計算及餘弦相似度的比對則利用 sklearn
套件中的 TF-IDF 向量生成 (TfidfVectorizer
) 及餘弦相似度計算 (cosine_similarity
) 功能來進行。
利用 Python 程式語言撰寫完以上功能後,由於隱私權之考量,Python 程式碼需包裝成 API 做為網路應用程式間的互動橋樑,方可在 JavaScript 的環境當中使用。本專案利用 Flask 框架將 Python 程式包裝成 API,以此在 React.js 所架構的網路應用程式中呼叫使用。
網路應用程式之建構利用 React.js 框架來進行,於「最新文章」和「新聞素材」分頁中呼叫 API 以爬取 PTT 八卦版中最新發布的文章標題、作者、內容及留言;而在「新聞素材」頁面中,更利用斷詞、TF-IDF 的計算以及餘弦相似度之匹配,於資料庫中篩選出與選定標題相近的主題文章。
為記者的需求量身定做,並作爲記者的文章搜尋工具,找出適合的相關主題文章做為新聞素材。
├── api # 連接 PTT api
| ├── data
| | └── data.json # PTT 資料
| ├── api.py # 跑動以連接 api
| ├── config.py # 填入自己的 PTT username 及 password
| └── requirements.txt # 需求套件
|
├── public
| ├── index.html
| └── styles.css # 網路應用程式的頁面設計
|
└──src
├── components # 網路應用程式中所使用的元件
| ├── Dashboard.js # 參數儀錶板部件
| ├── DownloadButton.js # 下載按鈕部件
| ├── DropMenu.js # 下拉選單部件
| ├── Progress.js # 資料加載部件
| ├── ProgressLinear.js # 資料加載部件 (線型)
| ├── SelectMenu.js # 下拉篇數選單部件
| ├── SimilarityBar.js # 相似度拉動元件
| └── Table.js # 資料呈現表格
|
├── containers # 網路應用程式頁面
| ├── Contact.js # 聯絡我們頁面
| ├── Documentation.js # 使用說明頁面
| ├── Latest.js # 最新文章頁面
| ├── Materials.js # 新聞素材頁面
| └── PageHeader.js # 頁面切換選單
|
├── App.css
├── App.js
├── App.test.js
├── index.css
├── index.js
├── reportWebVitals.js
├── setupProxy.js # 連接本地伺服器的 api 資料 (依照 api 路徑更改 proxyMiddleware 的第一個參數,本 api 設定為 '/api')
└── setupTests.js
為避免套件版本不相符,可建立虛擬環境以跑動程式。
# 建立虛擬環境
conda create --name <自訂虛擬環境名稱> python=3
# 進入虛擬環境
activate <虛擬環境名稱>
# 離開虛擬環境
deactivate
本網路應用程式所使用之 PTT 資料透過以下網路爬蟲取得
username: <PTT username>
password: <PTT password>
cd api
pip install -r requirements.txt
python api.py
yarn install
yarn start
張凱蒂 (2005)。《新聞人員之網際網路使用研究——以報紙、電視、廣播電台新聞記者為例》。政治大學新聞研究所碩士論文。
楊意菁 (2013)。網路意見的新聞再現與公眾想像:「網友說」新聞的內容與論述分析。中華傳播學刊,(24),119-164。
楊意菁 (2015)。新科技脈絡下的新聞與公眾意見: 新聞記者的認知觀點。資訊社會研究,28,105-141。
Lin, J. W. (2018). ptt-web-crawler (PTT 網路版爬蟲). https://github.com/jwlin/ptt-web-crawler