| name | data-processing-workflows |
| description | Polibaseのデータ処理ワークフローとパイプラインを説明します。議事録処理、Web scraping、政治家データ収集、話者マッチングなどの処理フロー、依存関係、実行順序を理解する際にアクティベートされます。 |
Data Processing Workflows(データ処理ワークフロー)
目的
Polibaseの各種データ処理ワークフロー、パイプライン、システム設計原則を理解し、正しい順序で処理を実行できるようにします。
いつアクティベートするか
このスキルは以下の場合に自動的にアクティベートされます:
src/minutes_divide_processor/,src/web_scraper/,src/party_member_extractor/ディレクトリでの作業時- ユーザーが「処理フロー」「パイプライン」「ワークフロー」「データ処理」と言った時
- 処理の順序や依存関係に関する質問時
- 議事録処理、スクレイピング、話者マッチングの実装・修正時
システム設計原則
Polibaseは以下の6つの設計原則に基づいています:
1. 政治家情報は政党Webサイトから取得
- 政治家データは政党の公式Webサイトから取得
- 定期的に更新して最新情報を維持
- 名前、役職、選挙区などを構造化して抽出
2. 話者と発言内容は議事録から抽出
- 話者名と発言内容を議事録から抽出
- 会話のコンテキストと順序を維持
conversationsとspeakersテーブルに構造化データとして保存
3. 話者-政治家マッチングはLLMを活用
- 名前のバリエーションや敬称の処理にLLMを使用
- ルールベース + LLMのハイブリッドアプローチ
speakersとpoliticiansの高精度なリンク
4. 議員団(Parliamentary Groups)管理
- 議員団は会議内の投票ブロックを表現
- 役職(団長、幹事長など)付きのグループメンバーシップ履歴を追跡
- 提案の投票を個々の政治家とグループの両方にリンク
5. 会議メンバー抽出は段階的処理
members_introduction_urlから段階的にメンバーを抽出- 中間データ用のステージングテーブル(
extracted_conference_members) - 信頼度スコア付きのLLMベースファジーマッチング
- 最終所属作成前の手動レビュー機能
6. データ入力はStreamlit UIから
- 政党メンバーリストURLをWeb UIで管理
- 議事録URLの登録と管理
- 会議メンバー紹介URLの管理
- すべてのデータ入力をユーザーフレンドリーなインターフェースで
処理パイプライン
標準フロー(PDFから)
PDF議事録
↓
[1] Minutes Divider
↓ 個別の発言に分割
Conversations
↓
[2] Speaker Extraction
↓ 話者情報を抽出
Speakers
↓
[3] Speaker Matching
↓ 政治家とマッチング
Linked Conversations
ステップ1: Minutes Divider
ファイル: src/minutes_divide_processor/
処理内容:
- PDF議事録をLangGraphの状態管理とGemini APIで処理
- 個別の発言に分割して抽出
入力: PDF議事録
出力: conversations テーブルのレコード
ステップ2: Speaker Extraction
ファイル: src/extract_speakers_from_minutes.py
処理内容:
- 会話から話者情報を抽出
- 話者レコードを作成
入力: conversations テーブル
出力: speakers テーブルのレコード
ステップ3: Speaker Matching
ファイル: update_speaker_links_llm.py
処理内容:
- ルールベース + LLMのハイブリッドマッチング
- 会話を話者レコードにリンク
入力: speakers, politicians テーブル
出力: リンク済み conversations
ステップ4: Politician Data Collection
コマンド: polibase scrape-politicians
処理内容:
- 政党Webサイトから最新の政治家情報を取得
入力: political_parties.members_list_url
出力: politicians テーブルのレコード
Web Scraping フロー(GCS統合)
議会Webサイト
↓
[1] Web Scraper (--upload-to-gcs)
↓ GCSにアップロード
GCS Storage (gs://bucket/...)
↓ URI保存
Meetings Table (gcs_pdf_uri, gcs_text_uri)
↓
[2] Minutes Divider (--meeting-id)
↓ GCSから直接取得
標準フローに合流
ステップ1: Web Scraper
ファイル: src/web_scraper/
処理内容:
- 議会Webサイトから議事録を抽出
- kaigiroku.netシステムに対応(多くの日本の地方議会で使用)
- JavaScriptベースサイト用にPlaywrightを使用
--upload-to-gcsフラグでGCSに自動アップロード- GCS URIを
meetingsテーブルに保存
対応システム:
- kaigiroku.net(日本の地方議会で広く使用)
オプション:
--upload-to-gcs: GCSにアップロード
ステップ2: GCS-based Processing
コマンド: polibase process-minutes --meeting-id <id>
処理内容:
- Minutes Dividerが
--meeting-idパラメータでGCSからデータを直接取得
ステップ3: 以降の処理
標準フロー(話者抽出、話者マッチング)と同じ
Conference Member Extraction フロー(段階的処理)
Conference members_introduction_url
↓
[1] Extract Conference Members
↓ スクレイピング + LLM抽出
Staging Table (extracted_conference_members: status='pending')
↓
[2] Match with Politicians
↓ LLMファジーマッチング
Staging Table (status='matched'/'needs_review'/'no_match')
↓
[3] Create Affiliations
↓ status='matched' のみ処理
politician_affiliations
ステップ1: Extract Conference Members
コマンド: polibase extract-conference-members
処理内容:
- 会議URLからメンバー情報をスクレイピング
- Playwright + LLMでメンバー名、役職、政党所属を抽出
- ステージングテーブル
extracted_conference_membersに status='pending' で保存
入力: conferences.members_introduction_url
出力: extracted_conference_members (status='pending')
ステップ2: Match with Politicians
コマンド: polibase match-conference-members
処理内容:
- LLMベースのファジーマッチング
- 名前と政党で既存の政治家を検索
- LLMで名前のバリエーションを処理して最適なマッチを決定
- マッチングステータスを更新:
matched(信頼度 ≥ 0.7)needs_review(信頼度 0.5-0.7)no_match(信頼度 < 0.5)
入力: extracted_conference_members, politicians
出力: extracted_conference_members (status更新)
ステップ3: Create Affiliations
コマンド: polibase create-affiliations
処理内容:
- 最終的な政治家-会議の関係を作成
matchedステータスのレコードのみ処理- 役職付きで
politician_affiliationsにエントリを作成
入力: extracted_conference_members (status='matched')
出力: politician_affiliations
処理順序のチェックリスト
議事録処理の場合
- ステップ1: Minutes Divider で議事録を分割
- ステップ2: Speaker Extraction で話者を抽出
- ステップ3: Speaker Matching で政治家とマッチング
- 順序厳守: この順序を変更しないこと
Web Scrapingの場合
- GCS認証:
gcloud auth application-default loginを実行済み - アップロード:
--upload-to-gcsフラグを使用 - URI確認:
meetingsテーブルにgcs_pdf_uri/gcs_text_uriが保存されているか - 処理実行:
--meeting-idで処理を実行
Conference Member Extractionの場合
- ステップ1:
extract-conference-membersでスクレイピング - ステップ2:
match-conference-membersでマッチング - ステップ3:
create-affiliationsで所属作成 - レビュー:
needs_reviewステータスのレコードを手動確認
追加コンポーネント
Meeting Management UI
場所: src/interfaces/web/streamlit/
機能:
- URLルーティング付きStreamlitベースWebインターフェース
- 会議、政党、会議、その他の管理
Party Member Extractor
場所: src/party_member_extractor/
機能:
- LLMベースで政党メンバーリストページから政治家情報を抽出
- Gemini APIでHTMLから構造化データを抽出
- 複数ページのメンバーリストのページネーション対応
- 重複レコード作成を防ぐ重複チェック実装
Conference Member Extractor
場所: src/conference_member_extractor/
機能:
- 会議メンバーの段階的抽出とマッチング
- 中間データレビュー用ステージングテーブル
- 手動レビュー機能付き信頼度ベースマッチング
詳細リファレンス
詳細なデータフロー図と実装ガイドは reference.md を参照してください。
ダイアグラム
視覚的なフロー図: