📚 機能ガイド

補助金情報システムの25の機能をわかりやすく解説します

📥
データ収集
7機能
🤖
AI解析
6機能
📊
データ管理
6機能
🔧
システム管理
6機能
📥

データ収集

1 URL追加・一括追加
補助金情報を取得したいWebページのURLを登録する機能
📋 できること
1件ずつURLを追加
複数URLを一括追加(1行1URL)
重複URLの自動チェック
❓ よくある質問
Q. 同じURLを2回登録できる?
できません。正規化されたURLで重複チェックされます
Q. 何件まで一括登録できる?
制限はありませんが、100件程度を推奨
Q. CSVからインポートできる?
直接は不可。テキストエリアに1行1URLで貼り付けてください
2 URL正規化
トラッキングパラメータを除去し、同一ページの重複登録を防止
📋 できること
utm_source等のトラッキングパラメータを自動削除
コンテンツ識別パラメータ(id, content等)は保持
URL重複チェックの精度向上
❓ よくある質問
Q. ?id=123は削除される?
いいえ。コンテンツ識別パラメータは保持されます
Q. どのパラメータが削除される?
utm_*, fbclid, gclid, ref等のトラッキング系のみ
Q. パラメータが消えてページが開けない?
本来残すべきパラメータが削除された可能性。開発者に連絡を
3 Webスクレイピング
URLにアクセスしてHTML取得・解析、補助金情報を抽出
📋 できること
HTMLの取得・解析
補助金情報の本文抽出
関連ファイルリンクの検出
❓ よくある質問
Q. JavaScript生成コンテンツは取得できる?
いいえ。静的HTMLのみ対応しています
Q. タイムアウトは何秒?
30秒(環境変数で変更可能)
Q. 取得に失敗する原因は?
ボット対策、サーバーダウン、リダイレクト、ネットワーク障害など
4 ボット対策検出
アクセス先のWAF(ボット対策)を検出し、緊急フラグを設定
📋 対応種類(5種類)
Incapsula / Imperva
Cloudflare
reCAPTCHA
Akamai
汎用ブロック(403等)
❓ よくある質問
Q. ボット対策を回避できる?
いいえ。手動でデータ入力が必要です
Q. 「緊急」と表示される理由は?
自動取得不可のため、手動対応が必要な状態です
Q. ボット対策された場合どうすれば?
ブラウザで直接アクセスして情報を手動入力してください
5 ファイル自動ダウンロード
PDF、Excel、Wordファイルを自動検出・ダウンロード
📋 対応形式
PDF (.pdf)
Excel (.xlsx, .xls)
Word (.doc) ※DOCXは除外
❓ よくある質問
Q. 最大ファイルサイズは?
50MB(環境変数で変更可能)
Q. ファイルはどこに保存される?
MinIO(オブジェクトストレージ)に保存されます
Q. DOCXがダウンロードされないのはなぜ?
設定で除外されています。主にPDFを優先しています
6 インテリジェント選別
ファイルをキーワードで分類し、分析優先度を自動判定
📋 優先度レベル(4段階)
high: 要領、要綱、ガイドライン → 必ず分析
medium: 手引き、案内 → 分析
low: Q&A、FAQ → 5MB以下のみ分析
skip: 様式、申請書 → 分析しない
❓ よくある質問
Q. なぜ様式・申請書は分析しない?
補助金の詳細情報が含まれないためです
Q. 優先度は変更できる?
環境変数でキーワードを変更できます
Q. 5MB以上のPDFは分析されない?
low優先度の場合のみ。high/mediumは分析されます
7 PDF解析・テキスト抽出
PDFからテキストを抽出し、AI分析用データを生成
📋 できること
テキスト・テーブル抽出(pdfplumber)
高速テキスト抽出(PyMuPDF)
解析結果のDBキャッシュ
❓ よくある質問
Q. スキャンPDFは読める?
いいえ。OCR機能はありません(画像PDFは不可)
Q. 解析結果はキャッシュされる?
はい。pdf_analysis_cacheテーブルに保存されます
Q. PDF解析が遅い理由は?
ページ数やテーブル構造により時間がかかる場合があります
🤖

AI解析

8 OpenAI GPT-4o-mini
スクレイピング結果をAIに送信し、構造化データを抽出
📋 抽出項目
自治体名、都道府県
補助金名、補助対象商品
申請期間、補助金額
問い合わせ先、継続状況
❓ よくある質問
Q. API料金はどのくらい?
1件あたり約0.1〜0.5円(テキスト量による)
Q. どのモデルを使っている?
gpt-4o-mini(コスト効率と精度のバランス)
Q. APIキーはどこで設定する?
.envファイルのOPENAI_API_KEYに設定
9 構造化データ抽出
AIが自由文から22項目の構造化データをJSON形式で出力
📋 抽出される22項目
基本情報: 自治体名、都道府県、補助金名
対象: 補助対象商品、対象者、対象条件
金額: 補助金額、補助率、上限額
期間: 申請開始日、申請終了日
連絡先: 問い合わせ先、URL
❓ よくある質問
Q. 抽出精度はどのくらい?
約85-95%(サイトの構造による)
Q. 間違った情報が抽出されたら?
編集画面から手動で修正できます
Q. 項目が空欄の理由は?
元ページに情報がない、またはAIが抽出できなかった場合
10 継続状況判定
補助金が「継続中」「終了」「未確認」のいずれかを自動判定
📋 判定キーワード例
終了: 終了しました、受付締め切り、予算上限
継続: 受付中、募集中、申請受付
❓ よくある質問
Q. 「未確認」とは?
AIが判断できなかった状態。手動確認が必要です
Q. 継続状況が間違っている場合は?
編集画面から手動で変更できます
Q. 終了した補助金を再確認するには?
再スクレイピングで最新状況を取得できます
11 信頼度スコア算出
AI分析結果の信頼度を0-100で算出、閾値以下はレビューフラグ設定
📋 信頼度レベル
80以上: 高信頼(自動承認)
60-79: 中信頼(確認推奨)
60未満: 低信頼(要レビュー)
❓ よくある質問
Q. スコアはどう算出される?
AIが抽出できた項目数と確信度から算出
Q. 信頼度が低い理由は?
情報が少ない、構造が複雑、または曖昧な表現が多い場合
Q. 閾値は変更できる?
環境変数CONFIDENCE_THRESHOLDで設定可能
12 レート制限対応
OpenAI APIのレート制限に対応した指数バックオフリトライ
📋 リトライ設定
最大リトライ: 5回
初回待機: 1秒
バックオフ係数: 2倍
❓ よくある質問
Q. 429エラーが出たら?
自動的にリトライされます。しばらく待ってください
Q. 処理が遅いのはなぜ?
レート制限により待機中の可能性があります
Q. レート制限を上げるには?
OpenAIのプランをアップグレードしてください
13 エラー原因AI分析
スクレイピングエラーの原因をAIが分析し、推奨対応を提示
📋 分析内容
HTTPステータスの確認
リダイレクトの検出
ボット対策の種類特定
推奨対応の提案
❓ よくある質問
Q. 分析にAPI料金がかかる?
はい。1件約0.05円
Q. 「原因確認」ボタンはどこ?
エラー項目の一覧と詳細ページに表示されます
Q. 再分析はできる?
はい。分析済みでも「再分析」ボタンで更新可能
📊

データ管理

14 一覧表示・検索・フィルタ
登録済み補助金情報の一覧表示、検索とフィルタで絞り込み
📋 フィルタ項目
都道府県(47都道府県)
継続状況(継続中/終了/未確認)
ステータス(pending/analyzed/error)
❓ よくある質問
Q. 自治体名で検索できる?
はい。漢字・ひらがな・カタカナで検索可能
Q. ソート順を変えるには?
テーブルヘッダーをクリックして並べ替え
Q. 複数条件で絞り込める?
はい。都道府県と自治体名の組み合わせが可能
15 詳細表示・編集(22項目)
個別の補助金情報を詳細表示し、22項目すべてを編集可能
📋 編集可能項目
基本情報: 自治体名、補助金名など
金額情報: 補助金額、補助率など
期間情報: 申請開始日、終了日など
その他: 備考、ステータスなど
❓ よくある質問
Q. 編集履歴は残る?
はい。subsidy_info_historyに保存されます
Q. 間違えて保存した場合は?
履歴から過去のバージョンに復元できます
Q. 必須項目はある?
URLのみ必須。他は空欄でも保存可能
16 履歴表示・復元
編集やスクレイピングの変更履歴を表示し、過去のバージョンに復元可能
📋 記録される操作
スクレイピング実行
手動編集
復元操作
❓ よくある質問
Q. 復元すると履歴は消える?
いいえ。復元も新しい履歴として記録されます
Q. 何世代前まで戻れる?
制限なし。すべての履歴から復元可能
Q. 履歴はどこで確認する?
詳細ページの「履歴」タブから確認できます
17 緊急フラグ(needs_review=2)
即座に確認が必要な項目を「緊急」として赤色で強調表示
📋 緊急になる条件
ボット対策検出
HTTPエラー(403, 404等)
アクセス不可
❓ よくある質問
Q. 「緊急」と表示される理由は?
自動処理ができず、手動対応が必要な状態です
Q. 緊急フラグを解除するには?
問題を解決して再スクレイピング、または手動で編集
Q. 通常の「要レビュー」との違いは?
緊急(2)はエラー、要レビュー(1)は信頼度低下
18 自治体名サジェスト
自治体名入力時に既存データからサジェスト表示
📋 できること
漢字・ひらがな・カタカナ対応
既存データからのサジェスト
2文字以上で候補表示
❓ よくある質問
Q. サジェストが表示されない?
2文字以上入力してください
Q. 新しい自治体名は?
自由入力可能。サジェストになくても登録できます
Q. ひらがなで検索できる?
はい。「とうきょう」で「東京都」がヒットします
19 かな変換(pykakasi)
自治体名の漢字をひらがなに自動変換し、検索性を向上
📋 変換例
東京都港区 → とうきょうとみなとく
大阪市中央区 → おおさかしちゅうおうく
❓ よくある質問
Q. 読み方が間違っている場合は?
自動変換の限界です。検索には影響少ないです
Q. カタカナでも検索できる?
はい。内部でひらがなに変換して検索します
Q. 英語の自治体名は?
そのまま保存されます(変換なし)
🔧

システム管理

20 環境変数一元管理(config.py)
全ての設定を環境変数で管理し、.envファイルで切り替え可能
📋 主要設定
DATABASE_URL, OPENAI_API_KEY
REQUEST_TIMEOUT, MAX_RETRIES
CONFIDENCE_THRESHOLD
❓ よくある質問
Q. 設定はどこで変更する?
.envファイル(ローカル)または.env.prod(本番)
Q. 設定項目数は?
50+項目(タイムアウト、リトライ、閾値など)
Q. 設定変更後の反映方法は?
Dockerコンテナの再起動が必要です
21 処理時間追跡(5種類)
スクレイピング処理の各フェーズの時間を記録
📋 記録項目
scraping_time: HTML取得・解析時間
file_download_time: ファイルDL時間
pdf_analysis_time: PDF解析時間
ai_analysis_time: AI分析時間
total_processing_time: 合計時間
❓ よくある質問
Q. 処理時間はどこで確認できる?
データベースの該当レコードに記録されています
Q. 処理が遅いのはなぜ?
PDF解析やAI分析が時間を要することがあります
Q. 平均処理時間は?
PDF無しで5-10秒、PDF有りで30-60秒程度
22 4種類ログファイル
アプリケーションログを4種類に分類して出力
📋 ログファイル
app.log: アプリケーション全般
error.log: エラー(WARNING以上)
scraping.log: スクレイピング詳細
ai_analysis.log: AI分析詳細
❓ よくある質問
Q. ログはどこにある?
data/logs/ディレクトリ内
Q. エラーを調べるには?
error.logを確認してください
Q. ログレベルは変更できる?
環境変数LOG_LEVELで設定可能
23 排他制御(同時実行防止)
同じIDのスクレイピングが同時実行されることを防止
📋 できること
同一URLの重複スクレイピング防止
データ整合性の保護
❓ よくある質問
Q. ロック方式は?
メモリ内ロック(プロセス単位)
Q. 「処理中」と表示されたら?
別のプロセスが処理中。完了まで待ってください
Q. ロックが解除されない場合は?
Dockerコンテナを再起動してください
24 Adminer(DB管理)
WebベースのMySQL管理ツール。テーブル閲覧・編集・SQL実行
📋 できること
テーブルデータの閲覧・編集
SQLクエリの実行
テーブル構造の確認
❓ よくある質問
Q. Adminerにアクセスするには?
ローカル: http://localhost:8081
Q. 本番環境では?
環境変数ADMINER_REPLICASで有効化が必要
Q. ログイン情報は?
.envファイルのMYSQL_USER/MYSQL_PASSWORDを使用
25 Docker healthcheck
各Dockerコンテナの死活監視。異常時は自動再起動
📋 ヘルスチェック設定
web: HTTPリクエスト(60秒間隔)
mysql: mysqladmin ping(10秒間隔)
minio: curl(30秒間隔)
❓ よくある質問
Q. unhealthyと表示されたら?
コンテナに問題あり。ログを確認してください
Q. 自動再起動する?
restart: unless-stoppedで設定されています
Q. 状態を確認するには?
docker compose ps で STATUS列を確認