DB4DDは、日本の政府会議文書(PDF)を自動処理し、AIによる要約をMarkdown形式で生成するシステムです。OpenAI APIを活用して構造化された情報を抽出し、包括的な要約を作成し、Obsidian vaultとしてデータを整理します。
現在、以下の2つの政府省庁を対象としています:
- デジタル庁 - 60以上の会議グループ、403以上のファイル
- こども家庭庁 - 40以上の会議グループ、310以上のファイル
- PDFの自動処理: 政府会議のPDFからテキストを抽出・処理
- 多段階AI要約:
- 適応的なテキストチャンキング
- 固有名詞、数値、アクションアイテムの並列抽出
- 包括的な分析のための多層要約
- 構造化された出力: ObsidianのYAMLフロントマターと互換性のあるMarkdownファイルを生成
- スマートキャッシング: 効率化のための二層キャッシングシステム(APIレスポンス + テキスト抽出)
- 適応的レート制限: API使用を最適化するためのインテリジェントな並列制御
- Obsidian統合: ナレッジグラフ構築のための自動ウィキリンク生成
- PDF抽出 - PyMuPDFを使用したテキスト抽出
- インテリジェントチャンキング - ドキュメント長に基づく適応的なチャンクサイズ調整
- 並列処理 - 固有名詞、数値、アクションアイテムの同時抽出
- 多層要約:
- チャンクごとの詳細なミニ要約
- 全文の深い分析
- セクションの統合と合成
- 構造化された出力を持つ強化された最終要約
- Markdown生成 - 重複排除を伴う構造化された出力
各会議要約には以下が含まれます:
- 概要: 3-4文の全体概要
- 主要な論点: 5-8個の主要な議論ポイント
- 議論の流れ: 時系列のナラティブ
- 決定事項: 具体的な決定事項と次のステップ
- 未解決の課題: 未解決の問題
- 重要な固有名詞: 重要な人物、組織、システム
- タグ: 分類キーワード
- Python 3.8以上
- OpenAI APIキー
- リポジトリをクローン:
git clone https://github.com/yourusername/DB4DD.git
cd DB4DDこのプロジェクトではパッケージ管理に uv を使用します。
-
uvのインストール (未導入の場合)
curl -LsSf https://astral.sh/uv/install.sh | sh -
依存関係のインストール
cd infrastructure uv venv source .venv/bin/activate uv pip install -r requirements.txt
-
環境を設定:
cp .env.example .env
# .envファイルをOpenAI APIキーと設定で編集必要な環境変数:
OPENAI_API_KEY=sk-... # OpenAI APIキー
OPENAI_MODEL=gpt-4o-mini # 使用するモデル
VAULT_ROOT=./vaults # 出力ディレクトリ(デフォルト: ./vaults)
MAX_CONCURRENT_REQUESTS=10 # 最大並列リクエスト数
OPENAI_MAX_PARALLEL=20 # 最大並列ワーカー数すべての処理スクリプトはinfrastructure/ディレクトリから実行する必要があります。
cd infrastructure
# 未処理のPDFをすべて処理
python src/main.py
# 特定の会議を処理
python src/main.py --meeting "デジタル"
# 特定の回を処理
python src/main.py --round 5
# 既存のファイルを再処理
python src/main.py --overwrite
# ドライラン(処理内容のプレビュー)
python src/main.py --dry-runpython src/main.py --ministry "デジタル庁"
### 自動クローリング
```bash
cd infrastructure
python main_crawler.py
infrastructure/data/raw/crawler_downloads/master_raw/ にPDFが保存されます(重複なしの固定ディレクトリ)。
PDFからではなく、すでに抽出済みのテキストキャッシュから処理を行う場合(高速・再処理用):
# 基本的な使用法
python src/main_from_text_cache.py
# Turboモード(AIを使わず高速に骨子を作成、オフライン可)
python src/main_from_text_cache.py --turbo
# スマートモード(巨大なファイルをスキップして安全に処理)
python src/main_from_text_cache.py --max-size-kb 500# 最大並列処理モード
python src/main.py --aggressive
# カスタムレート制限
python src/main.py --rate-limit-rpm 3000 --rate-limit-tpm 150000
# ワーカー数の調整
python src/main.py --workers 8# APIキャッシングを無効化
python src/main.py --nocache
# 7日より古いキャッシュを削除
python src/main.py --cleanup-cache 7
# vaultと処理済みデータベースをクリア
python src/main.py --cleanObsidian統合のためにキーワードをウィキリンクに変換:
python src/wikilinkify.pyこのスクリプトは:
- vault内のすべての
*.mdファイルをスキャン Keywords.txtからキーワードを[[WikiLinks]]に変換- YAMLフロントマター、コードブロック、既にリンクされたテキストをスキップ
DB4DD/
├── infrastructure/
│ ├── main_crawler.py # クローラー実行エントリーポイント
│ ├── requirements.txt # 依存関係リスト
│ ├── src/
│ │ ├── crawler/ # クローラーモジュール
│ │ ├── main.py # メイン処理(セッション統合機能付き)
│ │ ├── main_from_text_cache.py # キャッシュされたテキストからの処理
│ │ ├── wikilinkify.py # Obsidianウィキリンクジェネレーター
│ │ ├── core/ # コアモジュール
│ │ │ ├── api_client.py # キャッシング付きOpenAI APIクライアント
│ │ │ ├── rate_limiter.py # 適応的レート制限
│ │ │ └── models.py # Pydanticモデル
│ │ ├── processing/ # 処理モジュール
│ │ │ ├── pdf_processor.py # PDFテキスト抽出
│ │ │ ├── text_summarizer.py # 多段階AI要約
│ │ │ └── prompt_manager.py # プロンプトテンプレート
│ │ ├── output/ # 出力生成
│ │ │ └── markdown_generator.py # Markdownファイル生成
│ │ └── utils/ # ユーティリティ
│ │ ├── file_utils.py # ファイル解析とデータベース
│ │ └── file_utils_enhanced.py # 拡張パーサー
│ ├── data/
│ │ ├── raw/ # ソースPDFファイル
│ │ ├── text_cache/ # キャッシュされたテキスト抽出
│ │ ├── raw_shortened/ # 処理済みPDF
│ ├── vaults/ # 出力Obsidian vaults
│ │ ├── master_vault/ # マスターデータベース(常に最新)
│ │ │ ├── デジタル庁/
│ │ │ └── こども家庭庁/
│ │ └── 20251228/ # 日次実行結果(日付別スナップショット)
│ └── .cache/ # APIレスポンスキャッシュ
└── CLAUDE.md # Claude Code用プロジェクトドキュメント
期待される命名パターン:
{会議名}_第{N}回_{YYYYMMDD}_{オプション接尾辞}.pdf
例: デジタル社会推進会議_第05回_20230615_資料1.pdf
生成される命名パターン:
{会議名}_第{N}回_{YYYY}-{MM}-{DD}.md
- 500kトークン超のドキュメント: 100k文字に切り詰め、500文字チャンクを使用
- 100kトークン超のドキュメント: chunk_size/4を使用(デフォルト: 500文字)
- 通常のドキュメント: 長さに基づいて1000〜chunk_sizeの間で最適化
- 50チャンク超のドキュメントの場合、約25グループにバッチ化
- 詳細を維持しながらAPI呼び出しを削減
- main_arguments、action_items、open_issues、named_entitiesに適用
- 0.8の類似度閾値を使用(単語重複率)
- 最終出力での冗長な情報を防止
コントリビューションを歓迎します!プルリクエストをお気軽に提出してください。
[ライセンスをここに記載]
このプロジェクトは以下を使用しています:
- OpenAI API - AI要約
- PyMuPDF - PDFテキスト抽出
- Pydantic - データ検証
- Obsidian - ナレッジマネジメント