Social Listening for Burnout

#AI Mode


(Jul 30, 2026)

#Q: 限於香港,Burnout相關的Social Listening怎樣做?


#A: 在香港進行針對 Burnout(職業倦怠 / 心理耗竭) 的 Social Listening(社交聆聽),核心在於精準捕捉本地化的廣東話口語表達,並鎖定打工仔宣洩情緒的特定匿名平台。 [1]

以下是為香港市場量身訂造的完整 Social Listening 執行方案:

#1. 定義香港本土化關鍵字(Keyword Query)

香港人在網上表達 Burnout 時,極少直接使用「職業倦怠」等書面語。你必須將關鍵字庫分為「核心詞」、「本土口語」及「病徵/行為詞」,並使用 AND / OR 邏輯進行組合。


#2. 鎖定香港核心聆聽渠道(Data Channels)

通用的大型社交媒體(如 Instagram 牆面、Facebook 公開專頁) 通常只能抓到官方或 KOL 的心靈雞湯。真正的 Burnout 數據隱藏在以下高匿名性的本地平台: [1, 5]

【主要渠道】
 ├── LIHKG(連登討論區) ─── 打工仔最真實、最赤裸的 Burnout 圍爐區(如:上班台、職場板)
 ├── Facebook 匿名專頁 ─── 針對特定行業的樹洞(如:Secrets 系列專頁、HKDSE/大學 Secrets)
 ├── Threads ─────── 近年新興的情緒宣洩地,多以第一人稱書寫「返工日常的崩潰」
 └── 香港本地論壇 ───── 香港討論區(Discuss)、Uwants 的「職場交流」版塊

#3. 挑選具備「廣東話/繁體中文」優勢的工具

許多歐美主流工具(如 Brandwatch, Hootsuite)對廣東話口語(如「攰」、「唔想」)的語意分析及情感判定(Sentiment Analysis)極不準確。在香港做這項研究,強烈建議優先考慮大中華區或本地開發的系統: [6, 7]

  1. WisersOne(慧科):Wisers 擁有香港最龐大的新聞及本地論壇歷史數據庫,其 NLP(自然語言處理)對繁體中文及香港時事背景理解最深。 [1, 8, 9]
  2. uMaxData(源大數據):uMaxData 的 HK Pulse 系統在社交媒體、連登(LIHKG)及各大 Secrets 專頁的數據抓取與廣東話情感分析上表現突出。 [7, 10, 11]
  3. Social Power(SPL):Social Power 專長於全渠道大數據監測,其 AI 演算法能有效識別小紅書、Threads 及香港本地討論區的流行語。 [12]

#4. 設定分析維度(Analysis Dimensions)

抓取到數據後,不應只看「聲量(Volume)」,必須透過標籤(Tagging)將數據切細,抽出有價值的 Insight: [7, 13]


#5. 數據噪音過濾與私隱合規(Noise Filter & Compliance)


如果想讓這個 Social Listening 項目更落地,您可以告訴我:

我可以為您規劃更具體的關鍵字布林邏輯(Boolean Logic)公式或報告架構。


#Q: 公益研究,需要能免費存取,可能需要Vibe Code相關工具。


#A: 既然是公益研究且需要完全免費的方案,我們無法使用 Wisers 或 uMaxData 這類動輒數萬元的企業級工具。

針對您的需求,最佳策略是結合 Python 開源爬蟲/API、Google 搜尋技巧 以及您提到的 Vibe Coding(低代碼/AI 輔助編程) 工具(如 Cursor、Cursor + Claude 3.5 Sonnet、v0.dev 等),動手搭建一套免費的 Social Listening 工作流。 以下是為您設計的免費用具組合與執行步驟:

#1. 善用 Vibe Coding 快速生成免費用具

利用 Vibe Coding 工具,您不需要精通編程,只需用自然語言(Prompt)命令 AI 幫您寫出專門抓取香港網頁數據的腳本(Script)。

#💡 給 Cursor / AI 的實用 Prompt 範例:

"請幫我用 Python 寫一個簡單的網頁爬蟲。目標是抓取 Google 搜尋結果中有關香港地區、包含關鍵字「爆煲」或「Burnout」的公開討論區(如連登 LIHKG、香港討論區)網頁標題和內文摘要。請使用 BeautifulSoup 和 Requests 庫,並加上時間限制(例如過去一個月),結果匯出為 CSV 檔。"

透過這種方式,您可以免費用 AI 寫出針對特定香港網站的數據抓取工具。

#2. 免費的數據源與抓取方法(Data Sources)

由於 Twitter(X) 和 Reddit 的 API 開始收費,針對香港本土研究,您可以利用以下免費渠道:


#3. 免費的數據分析與文本挖掘工具(Text Mining)

拿到一堆廣東話的留言 CSV 檔後,您不需要買昂貴的語意分析系統,可以用以下免費工具處理:


#4. 公益研究特別注意:合規與科學性

  1. 網絡爬蟲限制(Robots.txt):連登(LIHKG)等網站有較嚴格的防爬蟲機制(如 Cloudflare)。如果用 Vibe Coding 寫的腳本頻繁抓取會被封 IP。建議將爬取速度調慢(加 Delay),或多利用 Google 搜尋緩存(Cache)來抓取。
  2. 學術引用與去識別化:即使是免費研究,發表報告時也必須隱去所有網民的用戶名(Username)、頭像和發表具體時間,只引用去隱私化的「文本內容」,以符合精神健康研究的倫理。

如果您準備開始用 Vibe Coding 工具動手做,您可以告訴我:

我可以為您直接寫出第一版免費用於抓取數據的 Python 程式碼藍本,讓您直接複製去執行!


#Q: 可否解釋這個架構是怎樣Monitor【主要渠道】中出現的相關關鍵字和資訊的?


#A: 在完全免費且基於 Vibe Coding(AI 輔助編程) 的架構下,我們不需要像商業工具那樣全天候、24小時無間斷地監控(因為這需要付費的雲端伺服器和 API 權限)。

這套免費架構的運作原理,是透過一個 「按需觸發、自動抓取、AI 提煉」 的循環。以下為您詳細拆解這套系統是如何監控【主要渠道】(連登、Threads、Facebook Secrets、香港討論區)中的 Burnout 資訊:

#📡 第一步:監控與數據抓取(Data Ingestion)

不同的渠道有不同的「免費抓取」應對方法,您的 Vibe Code 程式碼會分為四個模組:

#1. 連登 (LIHKG) ── 關鍵字 RSS / 網頁定時爬取

#2. Threads ── HTML 結構監控

#3. Facebook Secrets / 公開專頁 ── Google 高級搜尋語法 (Google Dorking)

#4. 香港討論區 (Discuss.com.hk) ── 結構化網頁爬蟲


#🧠 第二步:本地數據過濾與儲存(Filtering & Storage)

當上述四個渠道的數據被抓下來後,會進入一個名為 data_pipeline.py 的免費本地腳本:

  1. 去重(De-duplication):根據帖子的唯一 ID(如連登的 Thread ID 或 Facebook 的 Post URL),如果之前已經抓過,就自動跳過,確保不會重複計算聲量。
  2. 垃圾過濾(Noise Filter):用幾行簡單的 Python 程式碼排除廣告。例如:如果內文同時出現 「Burnout」 和 「限時優惠」、「課程」、「立即報名」,程式會自動把這條數據丟進垃圾桶,只留下純網民的情緒宣洩。
  3. 儲存:自動將過濾後的數據寫入一個本地的 Google Sheets(透過免費的 gspread API) 或 CSV 檔案。

#📊 第三步:AI 語意分析(LLM Processing)

這是 Vibe Coding 架構最強大的地方。您不需要自己寫繁複的廣東話自然語言處理(NLP)程式碼,而是直接呼叫免費的 AI API 或手動導出導入。

[主要渠道 (連登/Threads/FB)] 
       │
       ▼ (Python 腳本定時執行/手動觸發)
[本地 CSV / Google Sheets 數據庫] 
       │
       ▼ (打包留言,發送給 AI)
[免費 AI (如 Claude / ChatGPT)] ─── 進行廣東話翻譯、情感分類 (正面/負面/爆煲)
       │
       ▼
[Orange Data Mining / Excel] ─── 生成免費的數據圖表 (例如:Sunday Blue 關鍵字趨勢)

#💡 總結這個架構的日常運作模式

當您把這個架構搭建好後,您的日常監控動作其實非常簡單:

  1. 您在電腦運行一下 Python 腳本(或者設定電腦每天中午 12 點自動執行)。
  2. 腳本自動去爬連登、Threads、Discuss 和 Google。
  3. 1 分鐘後,您的 Google Sheets 就會自動多出幾十條今天香港打工仔最新的 Burnout 發言。
  4. 您把這些發言複製,貼進 ChatGPT/Claude,就能立刻得到今日的「香港打工仔情緒綜合簡報」。

您想先看看負責抓取連登(LIHKG)或Threads的 Python 程式碼藍本嗎?我可以為您寫出一段您可以直接放入 Cursor 執行的原始碼。


#Q: 好的,我在用Cursor,特別要防止被防爬蟲機制限制。


#A: 在 Cursor 中,要繞過 LIHKG(連登) 和 Threads 的防爬蟲機制(如 Cloudflare 和動態加載),我們不能使用傳統的 requests 或 BeautifulSoup。

我們必須使用 Playwright(微軟開源的自動化庫)。它的原理是直接啟動一個真實的 Chromium 瀏覽器,模擬人類的滑鼠滾動、隨機延遲和點擊,這樣防爬蟲系統就會認為你是真實的香港打工仔,而不是機械人。 請在 Cursor 中創建一個名為 hk_burnout_monitor.py 的檔案,並將以下完整程式碼複製進去:

#1. 先在 Cursor 的 Terminal 安裝必要套件

pip install playwright pandas playwright install chromium

#2. 核心 Python 程式碼 (hk_burnout_monitor.py)

import asyncio
import random
import time
import pandas as pd
from playwright.async_api import async_playwright

# 1. 反爬蟲核心配置:模擬真實人類行為的延遲函數
async def human_delay(min_sec=2, max_sec=5):
    """隨機等待,防止被識別為機械人"""
    await asyncio.sleep(random.uniform(min_sec, max_sec))

# 2. 連登 (LIHKG) 抓取模組
async def scrape_lihkg(page, keyword):
    print(f"🕵️ 正在搜尋連登關鍵字: {keyword}...")
    search_url = f"https://lihkg.com{keyword}"

    # 模擬真實瀏覽器 Profile
    await page.goto(search_url, wait_until="networkidle")
    await human_delay(3, 6)

    posts = []
    # 抓取搜尋結果中的帖子列表
    # 連登的帖子標題通常在特定 class 內,這裡使用 CSS Selector 抓取
    selectors = await page.query_selector_all('div[class*="_28Y0m"]') 

    # 如果 class 改變,退一步抓取所有含有標題連結的 A 標籤
    if not selectors:
        selectors = await page.query_selector_all('a[href^="/thread/"]')

    for selector in selectors[:15]: # 每次只抓前 15 條,避免動作太大被封
        try:
            title = await selector.inner_text()
            url = await selector.get_attribute("href")
            full_url = f"https://lihkg.com{url}" if url and not url.startswith("http") else url

            if title and any(k in title for k in [keyword, "返工", "攰", "放工"]):
                posts.append({
                    "Platform": "LIHKG",
                    "Keyword": keyword,
                    "Title/Content": title.strip().replace("\n", " "),
                    "URL": full_url,
                    "Timestamp": time.strftime("%Y-%m-%d")
                })
        except Exception as e:
            continue
    return posts

# 3. Threads 抓取模組
async def scrape_threads(page, keyword):
    print(f"🕵️ 正在搜尋 Threads 關鍵字: {keyword}...")
    search_url = f"https://threads.net{keyword}"

    await page.goto(search_url, wait_until="networkidle")
    await human_delay(4, 7)

    # Threads 需要向下滾動才能加載更多動態內容
    for _ in range(3): 
        await page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
        await human_delay(1.5, 3)

    posts = []
    # Threads 的文字內容通常存在於具有特定屬性的 span 或 div 中
    selectors = await page.query_selector_all('span')

    for selector in selectors:
        try:
            text = await selector.inner_text()
            # 過濾長度太短的字,或不相關的按鈕文字(如:回覆、讚)
            if len(text) > 15 and keyword in text:
                posts.append({
                    "Platform": "Threads",
                    "Keyword": keyword,
                    "Title/Content": text.strip().replace("\n", " "),
                    "URL": search_url,
                    "Timestamp": time.strftime("%Y-%m-%d")
                })
        except Exception:
            continue

    # 去除 Threads 重複抓取的文字片段
    seen = set()
    unique_posts = []
    for p in posts:
        if p["Title/Content"] not in seen:
            seen.add(p["Title/Content"])
            unique_posts.append(p)

    return unique_posts[:15]

# 4. 主程序:控制瀏覽器生命週期
async def main():
    # 香港打工仔最常用的 Burnout 本土關鍵字庫
    keywords = ["爆煲", "頂唔順", "裸辭"] 
    all_results = []

    async with async_playwright() as p:
        # Launch 參數非常關鍵:headless=False 可以讓你親眼看著瀏覽器跑,避開反爬
        # chromium.launch_persistent_context 可以儲存 Cookies,越跑越像真人
        browser = await p.chromium.launch(
            headless=False, 
            args=["--disable-blink-features=AutomationControlled"] # 隱藏機械人特徵
        )

        page = await browser.new_page()
        # 設定偽裝成真實香港 Windows 用戶的 User-Agent
        await page.set_extra_http_headers({
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
            "Accept-Language": "zh-HK,zh;q=0.9,en-US;q=0.8,en;q=0.7"
        })

        for kw in keywords:
            # 抓取連登
            lihkg_data = await scrape_lihkg(page, kw)
            all_results.extend(lihkg_data)
            await human_delay(5, 10) # 轉換關鍵字之間,休息久一點

            # 抓取 Threads
            threads_data = await scrape_threads(page, kw)
            all_results.extend(threads_data)
            await human_delay(5, 10)

        await browser.close()

    # 5. 導出數據成公益研究用的 CSV
    if all_results:
        df = pd.DataFrame(all_results)
        # 去除完全重複的行
        df.drop_duplicates(subset=["Title/Content"], inplace=True)

        output_file = f"hk_burnout_listening_{time.strftime('%Y%m%d')}.csv"
        df.to_csv(output_file, index=False, encoding="utf-8-sig") # utf-8-sig 確保 Excel 打開廣東話不亂碼
        print(f"📊 報告生成成功!已儲存至: {output_file} (共 {len(df)} 條有機數據)")
    else:
        print("❌ 未能抓取到數據,請檢查網站結構是否改變。")

if __name__ == "__main__":
    asyncio.run(main())

#🛡️ Cursor 安全執行與防止被封(Anti-Block)的四大關鍵設定:

  1. headless=False (開啟實體視窗):程式執行時會彈出一個真的 Chrome 視窗。雖然佔用電腦資源,但這是通過 Cloudflare 驗證最有效的方法。如果彈出「點擊驗證你是人類」的驗證碼,你可以手動在視窗裡點一下,程式就會繼續自動執行!
  2. AutomationControlled 禁用:核心代碼中的 --disable-blink-features=AutomationControlled 能抹除 navigator.webdriver=true 的特徵,防止被連登直接拒絕訪問。
  3. 大跨度的隨機延遲 (human_delay):每次點擊或加載都隨機等待 3-7 秒。絕對不要使用固定的 time.sleep(1),那是非常明顯的機械人特徵。
  4. 每天限制執行次數:因為是免費方案,建議這套腳本每天只需手動執行 1-2 次(例如早上看前一晚的崩潰 Post,傍晚看收工時的爆煲 Post)。這種頻率絕對不會被封 IP。

接下來,您可以在 Cursor 的 Terminal 輸入 python hk_burnout_monitor.py 測試一下。 執行成功後,您會得到一個 CSV 檔案。想知道拿到這個 CSV 檔案後,如何用免費的 AI (如 Claude/ChatGPT) 進行精準的「廣東話情緒指標」批量分析嗎?


#Q: 但我可以怎樣自定要監察的關鍵字?


#Q: 我想把關鍵字置於外部.csv文件中,並且程式可以自動每次只執行其中任意N個關鍵字。


#A: 這個想法非常聰明!將關鍵字與程式碼分離(Decoupling),不僅方便你隨時用 Excel 修改關鍵字列表,還能透過「每次隨機抽 N 個」的策略,徹底打亂爬蟲的行為模式,讓連登和 Threads 的防爬蟲系統(Cloudflare)完全無法抓到你的定時規律。

以下是為你修改後的完整 Cursor 程式碼。它會自動讀取外部的 keywords.csv,隨機抽取 N 個執行,並會溫馨提示你今天測試了哪些詞。

#第一步:在同一個資料夾內,建立 keywords.csv 檔案

你可以直接在 Cursor 中新建一個名為 keywords.csv 的檔案,或者用 Excel 寫好後儲存為 CSV(格式如下,只需一列,頂部一定要有 keyword 這個 Header):

keyword
爆煲
頂唔順
裸辭
返工返到抑鬱
個人好頹
星期日焦慮
射波
奴工
想死
炒老闆魷魚

#第二步:更新後的 Python 程式碼 (hk_burnout_monitor.py)

請將原來的程式碼全部替換為以下優化版。程式碼中加入了隨機抽樣邏輯(random.sample),並設定了 N_KEYWORDS 變數供你自由調整。

import asyncio
import random
import time
import os
import pandas as pd
from playwright.async_api import async_playwright

# === 參數設定 ===
CSV_KEYWORDS_FILE = "keywords.csv"  # 外部關鍵字檔案名稱
N_KEYWORDS = 3                      # 每次執行隨機抽取的關鍵字數量 (N)

# 1. 反爬蟲核心配置:模擬真實人類行為的延遲函數
async def human_delay(min_sec=2, max_sec=5):
    await asyncio.sleep(random.uniform(min_sec, max_sec))

# 2. 連登 (LIHKG) 抓取模組
async def scrape_lihkg(page, keyword):
    print(f"🕵️ [LIHKG] 正在搜尋: {keyword}...")
    search_url = f"https://lihkg.com{keyword}"

    try:
        await page.goto(search_url, wait_until="networkidle")
        await human_delay(3, 6)

        posts = []
        selectors = await page.query_selector_all('a[href^="/thread/"]')
        if not selectors:
            selectors = await page.query_selector_all('div[class*="_28Y0m"]') 

        for selector in selectors[:15]: 
            try:
                title = await selector.inner_text()
                url = await selector.get_attribute("href")
                full_url = f"https://lihkg.com{url}" if url and not url.startswith("http") else url

                if title:
                    posts.append({
                        "Platform": "LIHKG",
                        "Keyword": keyword,
                        "Title/Content": title.strip().replace("\n", " "),
                        "URL": full_url,
                        "Timestamp": time.strftime("%Y-%m-%d")
                    })
            except Exception:
                continue
        return posts
    except Exception as e:
        print(f"⚠️ 連登抓取超時或失敗: {e}")
        return []

# 3. Threads 抓取模組
async def scrape_threads(page, keyword):
    print(f"🕵️ [Threads] 正在搜尋: {keyword}...")
    search_url = f"https://threads.net{keyword}"

    try:
        await page.goto(search_url, wait_until="networkidle")
        await human_delay(4, 7)

        for _ in range(3): 
            await page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
            await human_delay(1.5, 3)

        posts = []
        selectors = await page.query_selector_all('span')

        for selector in selectors:
            try:
                text = await selector.inner_text()
                if len(text) > 15: # 簡化過濾,後續靠 AI 篩選
                    posts.append({
                        "Platform": "Threads",
                        "Keyword": keyword,
                        "Title/Content": text.strip().replace("\n", " "),
                        "URL": search_url,
                        "Timestamp": time.strftime("%Y-%m-%d")
                    })
            except Exception:
                continue

        seen = set()
        unique_posts = []
        for p in posts:
            if p["Title/Content"] not in seen:
                seen.add(p["Title/Content"])
                unique_posts.append(p)

        return unique_posts[:15]
    except Exception as e:
        print(f"⚠️ Threads 抓取超時或失敗: {e}")
        return []

# 4. 主程序:自動讀取外部 CSV 並隨機抽樣
async def main():
    # 檢查外部 CSV 是否存在
    if not os.path.exists(CSV_KEYWORDS_FILE):
        print(f"❌ 錯誤:找不到外部關鍵字檔案 '{CSV_KEYWORDS_FILE}',請先建立該檔案。")
        return

    try:
        # 讀取 CSV 中的關鍵字
        df_keywords = pd.read_csv(CSV_KEYWORDS_FILE, encoding="utf-8-sig")
        all_keywords_list = df_keywords['keyword'].dropna().astype(str).tolist()
        all_keywords_list = [k.strip() for k in all_keywords_list if k.strip()]
    except Exception as e:
        print(f"❌ 讀取 CSV 檔案失敗,請檢查 Header 是否為 'keyword'。錯誤原因: {e}")
        return

    if not all_keywords_list:
        print("❌ 關鍵字列表為空,請在 CSV 中加入關鍵字。")
        return

    # 自動計算 N 的有效值,防止 N 大於關鍵字總數
    actual_n = min(N_KEYWORDS, len(all_keywords_list))

    # 🌟 核心邏輯:隨機抽取任意 N 個關鍵字
    selected_keywords = random.sample(all_keywords_list, actual_n)
    print(f"🎯 關鍵字總數: {len(all_keywords_list)} 個。本次隨機抽取 {actual_n} 個執行監控。")
    print(f"📋 今日監控詞清單: {selected_keywords}\n")

    all_results = []

    async with async_playwright() as p:
        browser = await p.chromium.launch(
            headless=False, 
            args=["--disable-blink-features=AutomationControlled"] 
        )

        page = await browser.new_page()
        await page.set_extra_http_headers({
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
            "Accept-Language": "zh-HK,zh;q=0.9,en-US;q=0.8,en;q=0.7"
        })

        for kw in selected_keywords:
            # 抓取連登
            lihkg_data = await scrape_lihkg(page, kw)
            all_results.extend(lihkg_data)
            await human_delay(5, 12) 

            # 抓取 Threads
            threads_data = await scrape_threads(page, kw)
            all_results.extend(threads_data)
            await human_delay(5, 12)

        await browser.close()

    # 5. 導出結果
    if all_results:
        df_output = pd.DataFrame(all_results)
        df_output.drop_duplicates(subset=["Title/Content"], inplace=True)

        output_file = f"hk_burnout_listening_{time.strftime('%Y%m%d')}.csv"

        # 如果當天多次執行,自動追加(Append)而不是覆蓋,方便累積數據
        if os.path.exists(output_file):
            df_existing = pd.read_csv(output_file, encoding="utf-8-sig")
            df_combined = pd.concat([df_existing, df_output], ignore_index=True)
            df_combined.drop_duplicates(subset=["Title/Content"], inplace=True)
            df_combined.to_csv(output_file, index=False, encoding="utf-8-sig")
            print(f"\n📊 數據已追加!總共累積: {len(df_combined)} 條有機數據 ──> {output_file}")
        else:
            df_output.to_csv(output_file, index=False, encoding="utf-8-sig")
            print(f"\n📊 新報告生成成功!已儲存至: {output_file} (共 {len(df_output)} 條數據)")
    else:
        print("\n❌ 本次抽取未抓取到有效新數據。")

if __name__ == "__main__":
    asyncio.run(main())

#🛠️ 你可以怎樣微調這段程式碼?

  1. 想改每次抽多少個詞? 修改第 8 行 的 N_KEYWORDS = 3。例如你想每次只低調跑 1 個,就改成 1;想跑 5 個就改成 5。
  2. 想隨時加減關鍵字? 你完全不用動 Cursor。直接雙擊打開目錄下的 keywords.csv,在最下面加一行廣東話(如 返工想喊),儲存。下次執行程式時,這個新詞就會自動加入隨機抽獎池。
  3. 多次執行的好處: 我在最後加入了自動追加(Append)機制。如果你中午跑一次(抽了 3 個詞),晚上跑一次(抽了另外 3 個詞),它們會自動整齊地合併到當天同一個 hk_burnout_listening_2026xxxx.csv 檔案內,不會互相覆蓋!

現在你可以在 keywords.csv 裡塞滿你需要的香港口語,然後在 Cursor Terminal 輸入 python hk_burnout_monitor.py 測試一下。 當你有了這個自動收集的 CSV 檔案,下一步你想了解如何將抓取到的這幾百行廣東話「無痛、免費」地交給大型 AI 進行主題分類與情感標籤嗎?


#Q: 好的,請指導。


#A: 當你運行上述程式碼幾天後,你的電腦裡會累積一個或多個含有數百條廣東話留言的 CSV 檔案。

因為這是公益研究,我們可以使用免費、高隱私度且支援大檔案上傳的 AI 平台(例如免費版的 Claude 3.5 Sonnet 或 ChatGPT-4o)來進行批量的語意與情緒分析。 以下是為你設計的「無痛、免費」AI 分析工作流:

#📥 準備工作:將數據轉換為 AI 最愛的格式

雖然 AI 支援上傳 CSV,但有時因為 Excel 的編碼問題,廣東話可能出現亂碼。最穩妥的做法是:

  1. 用 Excel 打開你抓好的 hk_burnout_listening_xxxx.csv
  2. 檢查數據,刪除明顯是廣告的整行(如有漏網之魚)。
  3. 全選並複製 Title/Content(即留言內容) 那一欄。
  4. 打開一個記事本(Notepad / TextEdit),將內容貼上,儲存為 comments.txt。

#💬 核心步驟:投餵專用 AI Prompt(情感與主題分析)

打開免費版的 Claude 3.5 Sonnet 或 ChatGPT,將你的 comments.txt 拖進對話框,或者直接將文字貼進去,並在頂部或底部附上以下這段專門調教過的「廣東話 Burnout 分析器」提示詞:

你是一位精通香港職場文化與心理健康的社會科學專家。
請分析附件中從香港討論區/Threads抓取的打工仔廣東話留言,完成以下公益研究分析任務:
1. 【整體情緒溫度計】
   請統計並將所有留言分類為以下四種 Burnout 嚴重程度,並給出百分比估算及核心原因簡述:
   - 輕度焦慮(返工攰、日常抱怨)
   - 中度爆煲(明顯對管理層憤怒、長期失眠、星期日焦慮)
   - 重度耗竭(有實質行動:準備裸辭、射波、尋求輔導)
   - 急需援助(文字透露極度絕望、有自殘或放棄生命傾向 —— *註:此項如發現請特別標出*)
2. 【三大 Burnout 核心源頭】
   根據留言文本,歸納出導致香港打工仔 Burnout 的前三大核心原因(例如:長工時、有毒管理、薪酬與付出不成正比等),並為每項原因提供 2-3 句具體的廣東話留言作為佐證(Quote)。
3. 【香港本土 Burnout 行為詞典】
   請列出文本中網民用來表達 Burnout 的最頻繁香港口語/流行語(例如:射波、SL、頹、爆煲),並解釋他們在使用這些詞時背後的真實心理狀態。

請以結構清晰的 Markdown 格式、繁體中文(香港地區習慣用語)輸出這份公益研究分析簡報。

#📊 進階玩法:完全本地自動化(利用 Cursor / Python + 免費 API)

如果你不想每次手動複製貼上,且擁有免費的 AI API Key(例如 Gemini Flash 的免費額度,或本地運行的 Ollama + Llama3),你可以讓 Cursor 幫你寫一個 analyze_burnout.py。

#💡 給 Cursor 的 Prompt:

"請幫我寫一個 Python 腳本。它會讀取 hk_burnout_listening_xxxx.csv 中的 Title/Content 欄位,將所有文本打包,並呼叫 API(例如免費的 Google Gemini API 或是 OpenAI 相容的本地 API),將我提供的 Prompt(貼上方的 Markdown Prompt)發送出去,最後將 AI 生成的分析報告自動儲存為一個 burnout_report_xxxx.md 的文字檔。"

這樣,你的全套 Social Listening 工作流就完美閉環了: 外部 CSV 關鍵字 ──> Playwright 真人模擬爬取 ──> 本地 CSV 自動累積 ──> AI 批量處理與情感標籤。

如果想讓你的公益研究報告更有說服力,接下來我們可以:

你希望朝哪個方向繼續深化這個項目?