Skip to content

milanochuang/nlp_web_final_project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

66 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

React 新聞素材網路應用程式

動機

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),於網路應用程式中呼叫使用。網路應用程式的建構分為以下幾個步驟:

1. 撰寫網路應用程式當中所需的功能

本網路應用程式所需的功能為爬蟲、斷詞、計算 TF-IDF 及比對相似度:爬蟲的書寫參考了 PTT 網路版爬蟲 (Lin, 2018) 之架構,於專案中,除了預先爬取的 PTT 八卦版資料庫,亦將此爬蟲程式運用於網路應用程式的及時爬取文章功能,而結巴斷詞套件用以做文章標題之斷詞,TF-IDF 的計算及餘弦相似度的比對則利用 sklearn 套件中的 TF-IDF 向量生成 (TfidfVectorizer) 及餘弦相似度計算 (cosine_similarity) 功能來進行。

2. 將 Python 程式碼包裝為 API

利用 Python 程式語言撰寫完以上功能後,由於隱私權之考量,Python 程式碼需包裝成 API 做為網路應用程式間的互動橋樑,方可在 JavaScript 的環境當中使用。本專案利用 Flask 框架將 Python 程式包裝成 API,以此在 React.js 所架構的網路應用程式中呼叫使用。

3. 建構網路應用程式

網路應用程式之建構利用 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

操作步驟

1. 開啟虛擬環境

為避免套件版本不相符,可建立虛擬環境以跑動程式。

(1) 於終端機 (Mac) 或 Anaconda Prompt (Windows) 輸入以下指令:
# 建立虛擬環境
conda create --name <自訂虛擬環境名稱> python=3

# 進入虛擬環境
activate <虛擬環境名稱>

(2) 若要離開虛擬環境,則輸入以下指令:
# 離開虛擬環境
deactivate

2. 連接 api

(1) 於 data 資料夾放入自己的資料:data.json

本網路應用程式所使用之 PTT 資料透過以下網路爬蟲取得

(2) 新增 config.py 檔案,並輸入自己的 PTT username 和 password
username: <PTT username>
password: <PTT password>
(3) 進入 api 資料夾
cd api
(4) 下載需求套件
pip install -r requirements.txt
(5) 跑動 api.py 檔案
python api.py

3. 載入 react 需求套件

yarn install

4. 跑動 react 網路應用程式

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published