Claude Code Plugins

Community-maintained marketplace

Feedback

data-processing-workflows

@trust-chain-organization/polibase
0
0

Polibaseのデータ処理ワークフローとパイプラインを説明します。議事録処理、Web scraping、政治家データ収集、話者マッチングなどの処理フロー、依存関係、実行順序を理解する際にアクティベートされます。

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

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. 話者と発言内容は議事録から抽出

  • 話者名と発言内容を議事録から抽出
  • 会話のコンテキストと順序を維持
  • conversationsspeakers テーブルに構造化データとして保存

3. 話者-政治家マッチングはLLMを活用

  • 名前のバリエーションや敬称の処理にLLMを使用
  • ルールベース + LLMのハイブリッドアプローチ
  • speakerspoliticians の高精度なリンク

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 を参照してください。

ダイアグラム

視覚的なフロー図: