# 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,就會抓錯標題。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up