PDFに質問しよう3 ~ PDFアップロード機能をつけて読み取ろう | SkillhubAI(スキルハブエーアイ)

PDFに質問しよう3 ~ PDFアップロード機能をつけて読み取ろう

ステップ2: PDFアップロード機能をつけて読み取ろう

次に、PDFファイルをアップロードして、中身のテキストを取り出す機能を追加しましょう。

Streamlitではファイルアップローダー機能を使って、さまざまなファイルを読み込むことができます。今回は以下の流れでPDFファイルを処理します:

  1. PDFをアップロード
  2. PyPDF2でPDFファイルを読み取り
  3. 全ページのテキストを抽出

実際のコードはこうなります:

import streamlit as st
from PyPDF2 import PdfReader

st.set_page_config(
    page_title="PDFに質問しよう",
    page_icon="📄",
    layout="wide"
)

def get_pdf_text():
    """PDFをアップロードしてテキストを取得する関数"""
    uploaded_file = st.file_uploader(
        label='Upload your PDF here😇',
        type='pdf',  # PDFファイルだけ受け付ける
        help='テキストが含まれるPDFファイルをアップロードしてください'
    )

    if uploaded_file:
        # PDFを読み込む
        pdf_reader = PdfReader(uploaded_file)

        # 全ページのテキストを結合
        text = ''
        for page_num, page in enumerate(pdf_reader.pages, 1):
            page_text = page.extract_text()
            text += f'\n--- {page_num}ページ目 ---\n'
            text += page_text

        # 読み取り結果の情報を表示
        st.success(f"✅ PDFを読み込みました!")
        st.info(f"📊 ページ数: {len(pdf_reader.pages)}ページ")
        st.info(f"📝 文字数: {len(text)}文字")

        # テキストのプレビューを表示(最初の500文字)
        with st.expander("テキストのプレビュー(最初の部分)"):
            st.text(text[:500] + "..." if len(text) > 500 else text)

        return text
    else:
        return None

def page_pdf_upload():
    """PDFアップロードページ"""
    st.title("📄 PDF Upload")
    st.write("PDFファイルをアップロードして、AIが理解できる形に変換しましょう!")

    # PDFテキストの取得
    pdf_text = get_pdf_text()

    if pdf_text:
        # ここで後ほどテキストの処理を行います
        st.write("次のステップでこのテキストを処理していきます!")

def page_ask_my_pdf():
    st.title("🤔 Ask My PDF(s)")
    st.info("この機能は次の章で実装します")

# ページ選択
selection = st.sidebar.radio("Go to", ["PDF Upload", "Ask My PDF(s)"])
if selection == "PDF Upload":
    page_pdf_upload()
elif selection == "Ask My PDF(s)":
    page_ask_my_pdf()

st.file_uploaderについて、もう少し詳しく説明しますね。このコンポーネントには便利な設定がたくさんあります:

  • type='pdf': PDFファイルだけを受け付ける(type=['pdf', 'txt']のように複数指定も可能)
  • accept_multiple_files=True: 複数ファイルのアップロードを許可
  • help: ヘルプテキストを表示

また、デフォルトではアップロードされるファイルのサイズは200MBまでですが、これはStreamlitの設定で変更可能です。