ステップ2: PDFアップロード機能をつけて読み取ろう
次に、PDFファイルをアップロードして、中身のテキストを取り出す機能を追加しましょう。
Streamlitではファイルアップローダー機能を使って、さまざまなファイルを読み込むことができます。今回は以下の流れでPDFファイルを処理します:
- PDFをアップロード
- PyPDF2でPDFファイルを読み取り
- 全ページのテキストを抽出
実際のコードはこうなります:
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の設定で変更可能です。