電子書籍学習ワークフロー 実装計画¶
📁 docs/ebook-learning/plan/implementation-plan.md
関連Issue: KZ55230/MyLab#292
概要¶
DLsite等の電子書籍(PDF/画像ZIP)をOCR処理し、Claude APIで要約・分析してObsidianにナレッジとして蓄積するパイプラインを構築する。
⚠️ スコープ外: DRM付きKindleのDRM解除は実装しない。入力はDRMフリーのPDF/ZIPのみとする。
ワークフロー全体像¶
入力ファイル(PDF or 画像ZIP)
↓
① pdf_processor.py ── PDF/ZIPを画像リストに正規化
↓
② ocr_processor.py ── macOS Vision Framework で日本語OCR
↓
③ ai_analyzer.py ── Claude API で要約・キーコンセプト抽出
↓
④ obsidian_exporter.py ── Markdown化してvaultに保存
フェーズ構成¶
Phase 1: PDF/ZIP → 画像変換(pdf_processor.py)¶
目的: 様々な入力形式を画像のリストに統一する
| 入力形式 | 処理 |
|---|---|
| テキスト埋め込みPDF | pdfplumber でテキスト直接抽出 → OCR不要 |
| スキャンPDF | PyMuPDF(fitz) でページごとに画像化 |
| 画像ZIP(DLsite等) | ZIPを展開して画像ファイルリストを取得 |
依存ライブラリ: - PyMuPDF (fitz): PDFページ → 画像 - pdfplumber: テキスト埋め込みPDF のテキスト抽出 - Pillow: 画像前処理
Phase 2: OCR処理(ocr_processor.py)¶
目的: 画像から日本語テキストを高精度に抽出する
- macOS Vision Framework を使用(monthly-expense-trackerの実績あり)
- 縦書き・横書き両対応
- ページ単位でテキストを返す
注意点: - テキスト埋め込みPDFはOCR不要(Phase 1 でスキップ判定) - 画像解像度が低い場合はアップスケール処理を挟む
Phase 3: AI分析(ai_analyzer.py)¶
目的: 抽出テキストからナレッジを生成する
Claude API(claude-sonnet-4-6)に以下を依頼:
| 出力 | 内容 |
|---|---|
| 概要要約 | 本全体の200字程度の要約 |
| 章ごとの要点 | 各章の重要ポイント箇条書き |
| キーコンセプト | 覚えるべき用語・概念一覧 |
| 学習メモ | 実践・応用できるポイント |
| 関連タグ | Obsidian タグ候補 |
トークン節約戦略: - 全ページを一度に送らず、章単位で分割処理 - テキストが長い場合はページ要約 → 全体要約の2段階
Phase 4: Obsidian出力(obsidian_exporter.py)¶
目的: 分析結果を構造化Markdownとしてvaultに保存する
出力先: ~/repos/MyLab/vault/読書ノート/
Markdownテンプレート:
---
title: {{タイトル}}
source: {{DLsite/PDF/etc}}
date: {{処理日}}
tags: [読書, {{AIが提案したタグ}}]
---
## 概要
{{要約}}
## 章ごとの要点
{{章別ポイント}}
## キーコンセプト
{{用語・概念}}
## 学習メモ
{{実践ポイント}}
技術スタック¶
| 役割 | ライブラリ |
|---|---|
| PDF処理 | PyMuPDF, pdfplumber |
| OCR | macOS Vision Framework (pyobjc) |
| AI分析 | anthropic (Claude API) |
| 設定管理 | PyYAML |
| 画像処理 | Pillow |
タスクリスト¶
- Phase 1:
pdf_processor.py実装 - Phase 2:
ocr_processor.py実装(monthly-expense-trackerのVisionコードを流用) - Phase 3:
ai_analyzer.py実装 - Phase 4:
obsidian_exporter.py実装 -
main.pyでパイプライン結合 - DLsiteのZIP形式で動作確認
- スキャンPDFで動作確認
未決事項¶
- Kindleについて: DRMフリー版の購入方法をドキュメント化するか検討
- LiquidTextとの連携: エクスポートしたノートの取り込み手順をドキュメント化するか検討
- チャンク分割戦略: 長い本をどう分割してAPIに渡すか(トークン制限対策)