iT邦幫忙

2025 iThome 鐵人賽

DAY 5
0
Software Development

建構跨平台AI對話機器人:從LINE到Telegram實踐SDGs推廣的30天專案紀實系列 第 5

Day 5【資料處理】 讀取與解析 PDF 文件:讓機器人學習 SDGs 知識的第一步

  • 分享至 

  • xImage
  •  

HI!大家好,我是 Shammi 😊

今天正式操作為我的 AI 對話機器人建立「知識庫」。
操作前,你有沒有想過為什麼 AI 能夠學習?

昨天認識了 RAG 這個強大的藍圖,我們知道如果要讓 AI 說實話,就必須提供它可靠的參考資料,這一步驟對我來說是推廣 SDGs 的項目,也是最重要的一個環節。
今天的篇幅就要來解鎖這個藍圖的第一塊基石:如何從 PDF 文件中提取知識

🌐 一、為什麼 PDF 文件是個挑戰?

我的 SDGs 知識庫是以 PDF 文件的形式存在。雖然 PDF 對人類來說易於閱讀,但對於機器來說,它卻是一種「非結構化資料」。

想像一下,PDF 文件就像一本精心排版的實體書,裡面有圖片、表格、不同的字體和分欄。而我需要做的,是把這本書的所有文字內容,乾淨地「複製貼上」到一個純文字檔案裡,並且不能遺漏任何資訊。這個過程,就需要一個專門的工具來處理。

🌐 二、套件 PyPDF2:將 PDF 轉化為 AI 知識的幕後功臣

在此階段,我於 Day 3 安裝的 PyPDF2 套件就派上用場了。它的角色,就像是我們的專屬「PDF 閱讀器與翻譯機」,能將 PDF 的複雜格式,轉化為機器可以理解的簡單文字。

以下是使用 PyPDF2 進行資料處理的幾個關鍵步驟:
1️⃣ 導入套件:首先需要導入 PyPDF2
2️⃣ 開啟文件:接著,用 Python 的內建功能開啟 SDGs PDF 文件。
3️⃣ 逐頁讀取PyPDF2 允許逐頁讀取 PDF 的內容。我將會寫一個迴圈,遍歷每一頁。
4️⃣ 提取文字:對於每一頁,PyPDF2 都能提取出其中的文字內容。
5️⃣ 合併與清理:最後,將所有頁面的文字合併成一個完整的長字串,並進行一些基本的清理,例如去除多餘的換行符號或空白。

🌐 三、實作教學:用程式碼提取 SDGs 知識

準備好的PDF,假設PDF命名為「17SDGs.pdf」,接著請在 Colab 筆記本中新增一塊「程式碼區塊」,此階段有兩個方法可以使用,提供給讀者們參考囉😊

方法一:透過程式碼上傳檔案
這種方式最簡單,每次執行時都會跳出檔案選擇器。

import io
from google.colab import files
from PyPDF2 import PdfReader

#step1.上傳檔案
print("請選擇你要上傳的 PDF 文件:")
uploaded = files.upload()  # {filename: bytes}

#step2.解析與切分
stored_chunks = []
for filename, data in uploaded.items():
    if filename.lower().endswith('.pdf'):
        reader = PdfReader(io.BytesIO(data))
        text = ''.join(page.extract_text() or '' for page in reader.pages)#透過迴圈讀取每一頁的文字
    else:
        text = data.decode('utf-8') #如果上傳的不是 PDF,則直接當作文字檔處理

    #將文字內容以每 1000 字為單位進行切分
    for i in range(0, len(text), 1000):
        stored_chunks.append(text[i:i+1000])

print(f"✅ 上傳並切分為 {len(stored_chunks)} 個文字區塊!")

參考結果:
補充:執行時,請記得「全部執行」哦!這樣才能重新安裝 DAY 3 的「PyPDF2 」套件。
(1)
https://ithelp.ithome.com.tw/upload/images/20250902/20151627sfJCWNd6mH.jpg

(2)
https://ithelp.ithome.com.tw/upload/images/20250902/20151627ELXyhBI1Dt.jpg

方法二:從 Colab 側邊欄上傳
如果想避免每次執行都重新上傳檔案,可以將檔案直接拖曳到 Colab 介面左側的「檔案」欄位中。

優點: 一次上傳,多次使用。
缺點: 當 Colab 執行階段重新啟動時,檔案會被清空,需要重新上傳。

對應程式碼:
當檔案已經在 Colab 側邊欄中時,就不需要使用此語言 files.upload(),而是直接讀取檔案路徑。

import io
from PyPDF2 import PdfReader
from pathlib import Path

#定義檔案路徑,確保路徑與上傳的檔案名稱相符
pdf_file_path = Path("/content/17SDGs.pdf")

#確認檔案是否存在
if not pdf_file_path.exists():
    print(f"❌ 錯誤:找不到檔案在 {pdf_file_path},請檢查檔案是否已上傳。")
else:
    with open(pdf_file_path, "rb") as file:
        reader = PdfReader(file)
        text = ''.join(page.extract_text() or '' for page in reader.pages)

    stored_chunks = []
    for i in range(0, len(text), 1000):
        stored_chunks.append(text[i:i+1000])
        #將文字內容以每 1000 字為單位進行切分

    print(f"✅ 從側邊欄檔案讀取並切分為 {len(stored_chunks)} 個文字區塊!")

💡 重要提醒:無論使用哪種方法,在執行程式前,都需確保「執行階段」的「執行所有項目」被點擊過,這樣才能讀取到 Day 3 所安裝的 PyPDF2 套件。

總結

第五天的內容主要是將 PDF 的「非結構化」知識庫,轉化為「結構化」的文字內容。這個長長的文字字串,就是我的機器人將要學習的「教科書」。有了這本教科書,才能進行下一步的關鍵任務:將文字轉換成向量。明天,我將會深入探討 Embedding 模型,並開始進行有趣的實測與選擇,為我的 AI 機器人建立它的「大腦」囉!🧠


上一篇
Day 4【核心概念】 認識 RAG 架構與其在對話機器人中的應用
系列文
建構跨平台AI對話機器人:從LINE到Telegram實踐SDGs推廣的30天專案紀實5
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言