このプロジェクトについて
## 概要
Hospital-Recruit-QA-Botは、国内42の主要病院の採用情報を毎朝自動的に収集し、収集データの整合性を検証するQA視点の自動化パイプラインです。単なるクローリングに留まらず、検証ゲートウェイを設けることで、信頼できるデータのみを結果に含める構造を目指しています。
## コア機能
### 1. RaiT検証ゲートウェイ
- 収集されたロウデータの欠損値や形式エラーをRaiT(Responsible AI Testing)フレームワークに基づいてリアルタイムで検証します。
- 検証を通過(PASS)した公告のみを最終結果に含め、`seen_posts`に登録することで、不適切なデータが結果に混入することを遮断します。
### 2. CI/CDパイプライン (GitHub Actions)
- 毎日午前9時(KST)にUbuntu仮想環境で自動実行されます。
- クローリング後、更新された`seen_posts.csv`をボットが自らコミット/プッシュし、重複収集を継続的に防止します。
### 3. 重複データフィルタリング
- ローカルとクラウド環境が同一の履歴DB(`seen_posts.csv`)を共有し、既に確認した公告は除外して新規公告のみを選別してレポートします。
## QA検証シナリオ
READMEにまとめられたテストケースは以下の通りです。
| ID | テスト項目 | 期待結果 | 状態 |
|---|---|---|---|
| TC-01 | RaiTデータ有効性検証 | `verify_rait_compliance`ロジックで欠損値および形式エラーを自動判別 | Pass |
| TC-02 | データ整合性ガード | PASS判定を受けた新規データのみを重複防止リストに反映 | Pass |
| TC-03 | 統合レポート分岐保存 | 全体/新規/RaiT_FAILデータを個別のシートに分離してエクセルを生成 | Pass |
| TC-04 | 42病院ターゲット接続 | セキュリティ遮断サイトを除き、ターゲットサイトへの正常接続およびデータパースを確認 | Pass |
## ワークフロー
1. **トリガー:** 毎日午前9時(KST)にGitHub Actionsスケジューラが自動実行
2. **収集:** Seleniumベースで病院別の採用ページの動的データを収集
3. **QA検証:** RaiTロジックによるデータ整合性検査
4. **重複除去:** `seen_posts.csv`との照合による重複公告のフィルタリング
5. **自動更新:** 検証済みの新規データをリポジトリに自動コミットおよびプッシュ
6. **レポート:** 最終的なエクセル結果物とエラーログをGitHub Artifactsとして保管
## 技術スタック
- **言語:** Python 3.10
- **ライブラリ:** Selenium, Pandas, Openpyxl, Webdriver-manager
- **自動化:** GitHub Actions (CI/CD)
- **保存:** CSV(`seen_posts.csv`)およびExcel成果物
## プロジェクト構造
```text
.github/workflows/ # CI/CDパイプライン設定 (crawler.yml)
top-hospitals/
├── qa/ # 病院別クローリングロジックおよびRaiT検証モジュール
├── main.py # メイン実行エンジン (QAゲートウェイおよびデータハンドリング)
└── seen_posts.csv # 重複防止用履歴DB (自動更新)
```
## 問題解決記録
- **環境間のパス移植性:** ローカルとGitHub Actions仮想サーバーのパスの違いにより実行エラーが発生しましたが、`os.path`ベースの相対パス動的生成により、環境に依存しない実行構造を構築しました。
- **データ整合性および重複管理:** 繰り返し収集時の重複問題を`seen_posts.csv`の履歴管理とGitHub Actionsの自動コミット連携で解決しました。
- **環境隔離:** `.gitignore`を精緻化し、ソースコードとデータ成果物を分離しました。
## 既知の制約
- サムスン倉原病院は強化されたセキュリティポリシーにより、GitHub Actions(Ubuntu/海外IP)環境からのアクセスが遮断されます。当該病院のデータが必要な場合はローカル環境での直接実行を推奨し、CI/CDパイプラインでは安定性のために当該ターゲットを自動スキップするように設定されています。
## 今後の計画
- Pytestの導入によるユニット/統合テストの自動化
- 文脈的なエラーとテキスト整合性を判別する多次元検証ロジックの高度化
- Slack/Email通知連携による結果およびRaiT FAILレポートの自動送信
## ライセンスおよび注意事項
MIT Licenseに従います。READMEでは、本プロジェクトが個人の技術力向上およびポートフォリオ目的であることを明記しており、収集情報の商業的利用を禁止しています。採用情報の著作権は各病院にあり、原著作権者の要請があった場合はリポジトリを非公開に転換する場合があることを明記しています。サーバー負荷最小化のためのディレイ適用と、RaiTゲートウェイによる有害データの遮断について言及しています。
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.