議員データ

対象: 国会 / 地方議会

👀 ざっくり言うと

国会議員と地方議員の氏名・ふりがな・選挙区・所属政党などの基本情報を、各政党公式サイトや議会公式サイトから自動収集しています。 会議録から抽出した発言者(speaker)をLLMで議員本人に照合し、発言と議員を紐付けた上で、政党・会派の所属履歴も時系列で記録します。

🔄 データの流れ

graph TD
    A["政党公式サイト
所属議員一覧ページ"]:::source B["議会公式サイト
会派名簿ページ"]:::source C["国会会議録API
発言者のふりがな"]:::source D["Wikipedia
議員記事"]:::source M["管理画面からの手動入力
Streamlit 議員・政治家管理"]:::source P1["議員一覧取得
Playwrightでページを取得"]:::process P2["構造化抽出
BAMLで氏名・選挙区・政党を抽出"]:::process P3["名簿テキスト解析
BAMLで議員名・役職・会派を抽出"]:::process P4["会派所属リンク付け
選挙当選者×政党×会派マッピング"]:::process P5["発言者 ↔ 政治家 照合
ルール→LLMハイブリッド"]:::process P6["ふりがな補完
API由来のname_yomiをpoliticiansに反映"]:::process P7["政治家の手動登録・編集
新規作成・属性訂正・紐付けレビュー"]:::process T_POL["politicians
テーブル(政治家)"]:::table T_PGM["parliamentary_group_memberships
テーブル(会派所属)"]:::table T_PMH["party_membership_history
テーブル(政党所属履歴)"]:::table T_SP["speakers
テーブル(発言者)"]:::table V["dbt Data Vault層
hub / sat / link モデル"]:::process H["BigQuery公開
sagebase スキーマ"]:::public A --> P1 B --> P1 P1 --> P2 P1 --> P3 P2 --> T_POL P2 --> T_PMH P3 --> T_PGM P3 --> P4 P4 --> T_PGM C --> P5 P5 --> T_SP P5 --> P6 D --> P6 P6 --> T_POL M --> P7 P7 --> T_POL P7 --> T_PGM P7 --> T_PMH T_POL --> V T_PGM --> V T_PMH --> V T_SP --> V V --> H classDef source fill:#ffffff,stroke:#1a1a1a,stroke-width:2.5px,color:#1a1a1a classDef process fill:#ffffff,stroke:#737373,stroke-width:1px,color:#1a1a1a classDef table fill:#ffffff,stroke:#1a1a1a,stroke-width:1.5px,stroke-dasharray: 6 3,color:#1a1a1a classDef public fill:#1a1a1a,stroke:#1a1a1a,stroke-width:2.5px,color:#ffffff
元データ 加工 DB 公開
📂 技術的な詳細(開発者向け)

スクレイパー・インポーター

データソーススクリプト主要ロジック
各政党公式サイト(所属議員一覧)src/infrastructure/external/web_scraper_service.pyPlaywrightで議員一覧ページを取得し、氏名・選挙区・政党所属をBAMLで構造化抽出
議会公式サイト(会派・委員会名簿)src/infrastructure/external/langgraph_parliamentary_group_member_extraction_agent.py名簿テキストからBAMLで議員名・役職を構造化抽出。ルールベースで信頼度0.9以上を優先採用、残りをLLMで補完
政党 × 選挙当選者 → 会派の紐付けscripts/link_parliamentary_groups.py / link_parliamentary_groups_bulk.py国政選挙で当選した政党所属議員を、parliamentary_group_parties の対応表に基づいて会派に自動登録
発言者 ↔ 政治家 の照合src/infrastructure/external/langgraph_politician_matching_agent.py会議体・政党名・発言時期を考慮してSpeakerを政治家に紐付け。信頼度スコアを保持し低信頼は手動レビューに回す
国会API → ふりがな補完scripts/backfill_politician_furigana.pyマッチ済みSpeakerのname_yomi(国会API由来)をPolitician.furiganaに書き戻し
管理画面からの手動入力(Streamlit)src/interfaces/web/streamlit/views/politicians_view.py / conversations/components/politician_creation_form.py議員一覧ページから政治家の新規登録・属性編集。発言者マッチングのレビュー画面から「新規政治家として登録」するパスもあり、スクレイプで取れない議員を手動で補完

DBテーブル(PostgreSQL)

テーブル説明
politicians政治家の基本情報(氏名・ふりがな・選挙区)
political_parties政党マスタ
parliamentary_groups議会内会派(chamber・有効期間つき)
parliamentary_group_memberships政治家の会派所属履歴
party_membership_history政治家の政党所属履歴
conference_members議会(Conference)への構成員情報
speakers発言者レコード(politician_idに紐付く)

dbtモデル(Data Vault層)

モデル役割
hub_politicianPolitician のハブ
sat_politicianPolitician の属性サテライト
hub_political_party政党のハブ
sat_political_party政党の属性サテライト
hub_parliamentary_group会派のハブ
sat_parliamentary_group会派の属性サテライト
link_pg_membership政治家 ↔ 会派 の所属履歴リンク
link_speaker_politician発言者 ↔ 政治家 の名寄せリンク

BigQuery公開テーブル

テーブルデータセット
politicianssagebase
political_partiessagebase
parliamentary_groupssagebase
parliamentary_group_membershipssagebase
conference_memberssagebase