Claude-skill-registry data-processing-workflows

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

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/data-processing-workflows" ~/.claude/skills/majiayu000-claude-skill-registry-data-processing-workflows && rm -rf "$T"
manifest: skills/data/data-processing-workflows/SKILL.md
source content

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

コマンド:

sagebase 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

コマンド:

sagebase 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

コマンド:

sagebase extract-conference-members

処理内容:

  • 会議URLからメンバー情報をスクレイピング
  • Playwright + LLMでメンバー名、役職、政党所属を抽出
  • ステージングテーブル
    extracted_conference_members
    に status='pending' で保存

入力:

conferences.members_introduction_url
出力:
extracted_conference_members
(status='pending')

ステップ2: Match with Politicians

コマンド:

sagebase 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

コマンド:

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

ダイアグラム

視覚的なフロー図: