スクレイパー・インポーター
| データソース | スクリプト | 主要ロジック |
|---|
| kaigiroku.net 会議タイトルからの副次作成 | scripts/scrape_kaigiroku_meetings.py(get_or_create_conference / extract_conference_name_from_title / classify_conference_type) | 会議録タイトルをテナント固有キーワードと正規表現でパースして会議体名を抽出し、本会議/委員会/特別委員会を分類。マスタに無ければその場でConferenceを新規作成 |
| 国会会議録API取り込み時の副次作成 | src/application/usecases/import_kokkai_speeches_usecase.py(_get_or_create_conference) | 院名+会議名でConferenceを検索。見つからない場合は警告ログ付きで自動作成する |
| kaigiroku.net 本文バックフィル時の紐付け | scripts/backfill_kaigiroku_minutes.py | 既存MeetingのConference参照を利用してMinutes/Conversationを追加投入(このスクリプト自体はConferenceを作らないが、前段で作成されたConferenceに依存) |
| 選挙当選者からの一括生成 | scripts/populate_conference_members.py | election_members(is_elected=true)の当選議員を、院ごとに対応するConferenceのConferenceMemberに一括変換 |
| 自治体固有の委員会マスタ取り込み | scripts/import_kyoto_city_council.py ほか | 議会公式サイト掲載の委員会一覧を取り込み、初期マスタとして登録(自治体追加時の一括投入) |
| 管理画面からの手動入力(Streamlit) | src/interfaces/web/streamlit/views/conferences/tabs/{new_tab, edit_delete_tab, list_tab}.py | 会議体管理ページから新規登録・属性編集・削除を実行。スクレイピングで取れない委員会や過去会期の手動補完に使用 |
DBテーブル(PostgreSQL)
| テーブル | 説明 |
|---|
conferences | 会議体(本会議・委員会・特別委員会)の基本情報。名称・会期・conference_type・所属議会を保持 |
conference_members | 会議体ごとの構成員(所属議員)と役職・開始日 |
dbtモデル(Data Vault層)
| モデル | 役割 |
|---|
hub_conference | Conference のハブ(ビジネスキー) |
sat_conference | Conference の属性サテライト(名称・種別) |
link_conference_member | Conference ↔ Politician の構成員リンク |
sat_conference_member | 構成員の属性サテライト(役職・期間) |
BigQuery公開テーブル
| テーブル | データセット |
|---|
conferences | sagebase |
conference_members | sagebase |
hub_conference | sagebase_vault |
このデータ群の処理が副次的に作成/更新するレコード
一部のスクレイピング処理は、主目的のレコードを登録する過程で、
関連する未知のマスタレコードを自動作成します。処理元と生成先の対応を下表に示します。
| 生成/更新されるテーブル | トリガー | 挙動 |
|---|
conferences | 他データ群(会議録)のスクレイピング処理の副次作成として生まれるケースあり | import-speeches / scrape_kaigiroku_meetings.py が、会議タイトルから未知の会議体を検出した際に自動作成する |
conference_members | scripts/populate_conference_members.py | 選挙データ(election_members)の当選者をConferenceMemberに一括展開。会議体データ単独では生成されない |