Skip to content

JamCourage/Tone-of-Sustainability-Report

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

86 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Tone of Sustainability Report

Written by JamCourage

主題類別
Text Mining, Data Preprocess, Large Language Model, FinBERT, ESG reports, Sentiment Classification

分析工具
Python(selenium, pandas, pdfplumber, regex, FinBERT, nltk)

主要目標
計算台灣上市櫃公司英文永續報告書的揭露語調分數(Tone),並搭配ESG主題分類
其中,語調分數(Tone) 介於-1~1,有三種情緒,分別為中立正向負向 。 愈接近0為愈中立,愈接近1為愈正向,愈接近-1則為愈負向。

兩大步驟

  1. Part 1:蒐集台灣上市櫃公司的英文永續報告書--使用python爬蟲
    (1) 將有揭露英文永續報告書的公司股票代碼存入list中
    (2) 設定並初始化Chrome
    (3) 使用for迴圈,迭代每一公司,依序從公開資訊觀測站,下載其英文永續報告書
    【程式碼】
    程式碼可參考web_crawler_for_ESGreports.py,以下載110年永續報告書為例

  2. Part 2:分別計算各永續報告書的語調分數(Tone)--使用FinBERT情緒分類模型 & FinBERT主題分類模型
    (1) 整理公司股票代碼:將代碼都存在list中
    (2) 安裝FinBERT兩大模型、nltk tokenizer
    (3) 逐一擷取PDF文字(使用pdfplumber)
    (4) 文字前處理:使用regex套件,保留英文字母大小寫、正常標點符號,其他以空白取代
    (5) nltk斷句
    (6) FinBERT:同時檢查不得超過512張量,超過者斷成兩句
    -(6-1) FinBERT情緒分類模型:將文本分類為中立正向負向
    -(6-2) FinBERT主題分類模型:將文本分類為環境(E)社會(S)治理(G)非ESG
    (7) 紀錄結果:使用pandas套件,將結果存成dataframe格式。
    【程式碼】
    程式碼可參考:
    (a) 迭代各公司,計算各公司永續報告書語調分數 Open In Colab
    (b) 記錄一家公司每一句的語調與分類 Open In Colab

    【輸出結果】
    107年至110年之各公司永續報告書語調分數(Tone)結果,可參考Tone_breakdown.xlsx

    共有12種分類結果(情緒分類3種 x 主題分類4種),欄位說明如下:
    company_id:公司股票代碼
    E_neutral:環境面中立情緒(句數)
    E_positive:環境面正向情緒(句數)
    E_negative:環境面負向情緒(句數)
    S_neutral:社會面中立情緒(句數)
    S_positive:社會面正向情緒(句數)
    S_negative:社會面負向情緒(句數)
    G_neutral:治理面中立情緒(句數)
    G_positive:治理面正向情緒(句數)
    G_negative:治理面負向情緒(句數)
    non_neutral:非ESG中立情緒(句數)
    non_positive:非ESG正向情緒(句數)
    non_negative:非ESG負向情緒(句數)