Skip to content

Latest commit

 

History

12 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LINE 聊天紀錄清洗工具

這個專案用來整理公司各個 LINE 頻道匯出的聊天紀錄,將原始 .txt 檔清洗成結構化 CSV,方便後續查閱、篩選、交接與分析。

目前主流程是:

  1. 將 LINE 匯出的文字檔放進 data/raw/
  2. 由 main.py 讀取 config.json
  3. 解析聊天紀錄、辨識使用者、過濾系統訊息與不需要的內容
  4. 將結果輸出到 data/output/*.csv
  5. 視需要再用 scripts/csv_splitter.py 將 CSV 拆成多個 Markdown 檔

專案結構

chat_log_cleaner/
├── main.py
├── config.json
├── data/
│   ├── raw/
│   ├── output/
│   └── markdown/
├── scripts/
│   ├── chat_parser.py
│   ├── csv_splitter.py
│   ├── smart_user_identifier.py
│   ├── url_restorer.py
│   ├── user_directory_manager.py
│   ├── user_identifier.py
│   ├── utils.py
│   └── TreeMaker.py
├── requirements.txt
└── README.md

主要檔案

  • main.py 專案主入口。掃描 data/raw/*.txt,逐檔清洗並輸出 CSV。
  • scripts/chat_parser.py 聊天紀錄解析核心。負責日期解析、訊息拆解、多行訊息處理、關鍵字過濾、關注標記與網址還原。
  • scripts/smart_user_identifier.py 智能使用者辨識。從聊天樣本推測真正的發話者,適合群組聊天。
  • scripts/url_restorer.py 將訊息內容中的 percent-encoded 網址片段還原成可讀中文網址。
  • scripts/user_identifier.py 傳統使用者辨識備援。
  • scripts/user_directory_manager.py 讀取 config.json 內的使用者名冊,做公司內部已知名稱的精準比對。
  • scripts/csv_splitter.py 將清洗後的 CSV 拆成多個 Markdown 檔,方便閱讀或交接。
  • scripts/utils.py 共用工具,例如讀取設定、輸出 CSV、專案路徑處理。

使用前準備

1. 安裝依賴

pip install -r requirements.txt

2. 放入 LINE 匯出檔

將 LINE 匯出的聊天文字檔放到 data/raw/。

建議:

  • 一個頻道一個 .txt
  • 檔名保留原始群組名稱即可
  • 原始檔請使用 UTF-8

3. 設定 config.json

目前實際會用到的設定如下:

{
  "date_range": {
    "start": "2025-10-15",
    "end": "2025-12-31"
  },
  "watchlist_users": [
    "關注用戶1",
    "關注用戶2"
  ],
  "exclude_keywords": [
    "加入聊天",
    "退出社群",
    "退出群組",
    "封鎖",
    "解除封鎖",
    "Auto-reply"
  ],
  "watchlist_keywords": [
    "維修",
    "道歉",
    "客人",
    "有錢",
    "社會中堅",
    "小屁孩"
  ],
  "user_directory": {
    "users": [
      "王小明",
      "客服_Amy",
      "電商部_陳小華"
    ]
  },
  "analysis_settings": {
    "sample_count_智能識別樣本數量": 500,
    "traditional_sample_count_傳統識別樣本數量": 20,
    "min_frequency_private_私聊最小頻率": 0.05,
    "min_frequency_group_社群最小頻率": 0.03,
    "min_content_diversity_最小內容多樣性": 0.05,
    "max_user_name_length_用戶名最大長度": 20,
    "min_user_name_length_用戶名最小長度": 2
  },
  "parsing_settings": {
    "emoji_chars": ["😀", "😂", "😅", "🙏", "~"],
    "content_indicators": ["貼圖", "圖片", "影片", "語音訊息", "檔案", "位置"],
    "conversation_starters": ["嗨嗨", "想跟你討教", "順便問一下", "我還是先", "我把樓上", "合約都", "然後", "User~"]
  }
}

設定說明

date_range

  • start 只保留這個日期之後的訊息。
  • end 只保留這個日期之前的訊息。

watchlist_users

指定要特別標記的使用者名稱。輸出 CSV 時,這些人的訊息會被標為 True。

exclude_keywords

只要訊息內容或名稱中包含這些關鍵字,就直接過濾掉。適合排除:

  • 加入聊天
  • 退出群組
  • 系統通知
  • 自動回覆

watchlist_keywords

只要訊息內容包含這些關鍵字,就算發話者不在 watchlist_users,也會被標記成重點訊息。

analysis_settings

  • sample_count_智能識別樣本數量 智能辨識會先抽前幾筆訊息來估算常見發話者。
  • traditional_sample_count_傳統識別樣本數量 傳統備援辨識要看的樣本數。
  • min_frequency_private_私聊最小頻率 私聊模式下,使用者最低出現比例。
  • min_frequency_group_社群最小頻率 群組模式下,使用者最低出現比例。
  • min_content_diversity_最小內容多樣性 避免把重複內容或非真人訊息誤判成使用者。
  • max_user_name_length_用戶名最大長度 控制名稱過長時不當成正常使用者。
  • min_user_name_length_用戶名最小長度 控制名稱過短時不當成正常使用者。

user_directory

  • users 公司內已知會出現的 LINE 名稱清單。這份名單的用途是幫 parser 精準認人,不是重點標記。

parsing_settings

  • emoji_chars 幫助判斷某段文字比較像表情或內容,不像使用者名稱。
  • content_indicators 像 貼圖、圖片、影片 這種特殊內容標記。
  • conversation_starters 用來幫助拆分「名稱 / 內容」邊界的對話起始詞。

使用者名冊

現在使用者名冊已經合併進 config.json 的 user_directory.users。

建議把公司內常見的 LINE 顯示名稱都放進這裡,特別是:

  • 名稱有空格
  • 名稱有括號
  • 名稱有部門前綴
  • 名稱很容易跟一般訊息混淆

這份名單的目的,是讓 parser 更穩定辨識「誰是使用者名稱」。

執行方式

清洗原始聊天紀錄

python main.py

執行後會:

  • 讀取 config.json
  • 掃描 data/raw/*.txt
  • 將每個頻道輸出成一個 data/output/*.csv

拆分 CSV 成 Markdown

python scripts/csv_splitter.py

常用參數:

python scripts/csv_splitter.py --max-files 5 --min-records 200
python scripts/csv_splitter.py --file "data/output/某個頻道.csv"

輸出格式

CSV 欄位

輸出的 CSV 固定包含 5 欄:

  • 日期
  • 時間
  • 使用者
  • 訊息內容
  • 是否關注對象

Markdown 拆分結果

scripts/csv_splitter.py 會依筆數將 CSV 平均拆成多個 .md 檔,輸出到 data/markdown/。

用途:

  • 分批閱讀大群組聊天
  • 交給同事逐段檢查
  • 供後續 AI 或人工摘要使用

內容正規化

目前主流程在輸出 CSV 前,會對訊息內容額外做兩件事:

  • 還原 LINE @tag 的標準名稱,例如 @呆✨[宜加寵物_曾琪晏_小呆]
  • 還原網址中的中文路徑,例如把 Monge-%E7%91%AA%E6%81%A9%E5%90%89 還原成 Monge-瑪恩吉

支援的 LINE 記錄格式

目前解析器有處理這些常見格式:

  • 日期行:2025.10.15 星期三
  • 日期行:2025/10/15(週三)
  • 訊息行:12:04\t使用者\t內容
  • 訊息行:12:04 使用者 內容
  • 多行訊息續行

目前適合的使用情境

  • 公司群組聊天清洗
  • 部門頻道整理
  • 客服或電商營運群訊息回顧
  • 需要先把 LINE 原始文字轉成乾淨表格再分析的情境

注意事項

  • 這個專案會處理真實聊天紀錄,請注意個資與公司內部資訊
  • 若輸出 CSV 被 Excel 開啟中,再次覆寫時會寫入失敗
  • Windows 終端可能無法完整顯示 emoji,但檔案內容本身仍會保留
  • config.json 內的 user_directory.users 若留空,程式仍可運作,但會更依賴智能辨識

建議維護方向

  • 若公司頻道名稱或成員命名規則固定,優先維護 config.json 內的 user_directory.users
  • 若常有新的系統訊息樣式,優先更新 exclude_keywords
  • 若某些人常被辨識錯誤,再調整 analysis_settings

授權

此專案主要供內部整理與研究使用,使用時請遵守公司資料管理與隱私規範。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages