---
# System prepended metadata

title: 'Day 1. [PPT Chatbot] 讀取ppt的策略'
tags: [RAG]

---

# Day 1. [PPT Chatbot] 讀取ppt的策略

這系列文不太會把Code放上來，基本上我都是修修改改ChatGPT產生的範例，所以問ChatGPT就可以了。

## 0. 前言

除了嘗試Docling之外，也有想了很多懶人方法：
- ptt先轉pdf，用OCR套件產生markdown
- ppt先轉圖片，用mistral產生markdown

缺點：
- 字型會影響到OCR的辨識效果，有遇過出現亂碼的情況。
- OCR和vlm對某些繁體字會辨識錯誤。
- 向量化後的效果都不是很好，在問答過程中會東漏西漏。

## 1. `python-pptx`範例
首先透過pip安裝 ([document](https://python-pptx.readthedocs.io/en/latest/#api-documentation))
``` pip
pip install python-pptx
```

安裝後引用pptx，範例如下(ChatGPT)：
```python
from pptx import Presentation

# Load the presentation
prs = Presentation("your_file.pptx")

# Loop through slides and extract text
for i, slide in enumerate(prs.slides):
    print(f"Slide {i+1}")
    for shape in slide.shapes:
        if hasattr(shape, "text"):
            print(shape.text)
```
- 用`Presentation`讀取目標ppt。
- Loop每一個slide。
- slide中的每一個物件被存放在`slide.shapes`中。
- Loop每一個shape，先判斷物件類型，再來決定要用什麼方式爬資料。

## 2. 情境分析
以我的情境，只打算朝5個物件類型下手：
- 文字方塊：直接讀取內容。
- 表格：直接讀取內容，針對合併儲存格做特殊處理。
- 圖片：將物件轉換成base64字串，丟到vlm解析，用的是mistral。
- 圖形：
    - 以我的情境來說，user通常是內嵌一份Excel，裡面可能有很多sheet。最後停留在某個sheet後，跳出編輯畫面，***可視範圍***即是簡報時要報告的內容。跳出編輯畫面的同時，PPT會自動將「可視範圍」建立一張截圖。
    - ***找到這張截圖，丟到vlm解析。***
    - 為什麼我不直接讀取內嵌Excel的內容?
        - 因為excel可能有很多編輯痕跡，不是最終要呈現的資料。一來如果我把所有資料都讀出來，未來給LLM閱讀時，可能會擾亂他對文本的解讀。二來資料太雜，很難爬出來。
- 備忘稿：直接讀取內容。

## 3. 輸出格式
經過多番嘗試(包含跟Qdrant的運作、LLM的prompt...等)，以下是我測試出來的格式，每一張slide會轉出類似的內容：

```markdown
---

- title: 各項目在各客戶的執行進度
- month: 2025-10
- customers: ["Apple", "Samsung", "LG", "Sony", "Nokia"]
- items: ["S10", "S11", "B12", "C99"]
- slide_index: 2

# 各項目在各客戶的執行進度
- Nokia在2025-09正在執行S11項目，預計2026Q1進行小量試產
- Samsung的S10項目進行得很順利

|客戶|項目|進度|
|----|----|----|
|Sony|C99|小量試產中|
|LG|S10|跟客戶合作測試|
|Apple|B12|跟客戶合作測試|

---
```

- title：如果是套PPT的樣板，通常第一個textbox內容就會是標題。
- month：檔案月份。
- customers、items：這裡都是預先尋找關鍵字，以便塞資料到Qdrant時可以一併把metadata也新增進去。
    - customers：主要是運用LLM內涵的知識辨認***可能的***客戶關鍵字。
    - items：運用regular expression找出關鍵字。
- slide_index：第幾張slide。
- 剩下的就是內文，上下都用`markdown`水平線隔開。

## 4. 限制
- 如果該slide有太多圖型、圖片、流程圖...等，比較不適合轉換成markdown，因為用人眼才讀得懂。尤其很多slide只有icon、字很少，這種文件就不適合做RAG。
- 關鍵字搜尋需要人介入來判斷，很花時間。
- title是抓第一個textbox，如果遇到不是套ppt樣板的slide，就會抓錯標題。