個人サイト群アーカイブとRAGデータベース化設計メモ
1 はじめに
本書は,複数の個人サイトをミラー取得し,正規化・本文抽出を行い,最終的にRAG(Retrieval-Augmented Generation)用データベースへ投入するための設計および実装方針をまとめたものです.
単なるHTML保存ではなく,
- 意味のある本文抽出
- メタ情報付与
- 再利用可能な構造化
- 将来の検索・再構築対応
を目的としています.
2 設計方針の転換
2.1 旧設計(段階中心)
sites/
└ rock/
├ mirror/
├ normalized/
├ corpus/
├ logs/
この構造では,サイトが増えると混在しやすく,サイト単位での更新や管理が煩雑になります.
2.2 新設計(サイト中心)
data/
├ mirror/
│ ├ site1/
│ ├ site2/
│ └ site3/
├ normalized/
│ ├ site1/
│ ├ site2/
│ └ site3/
├ corpus/
│ ├ site1/
│ ├ site2/
│ └ site3/
└ logs/
├ site1/
├ site2/
└ site3/
この構造により,
- サイト単位の更新が容易
- RAGベクトルDBのサイト別管理が容易
- サイト別設定変更が容易
となります.
3 HTML正規化処理
3.1 文字コード問題
HTML内のmetaタグに含まれる charset が,実際にnkfでUTF-8へ変換された内容と不整合を起こすことがあります.
そのため,meta内の charset を一律 UTF-8 に書き換えます.
sed -E 's/(charset=)["'\'']?[^"'\'' >]+/\1UTF-8/I'
nkfの自動検出に任せ,metaのみ整合性を取ります.
4 バイナリファイルの除去
ミラー取得時に画像やバイナリが混入するため,事前に除去します.
find "$TARGET_DIR" -type f -print0 \ | xargs -0 grep -IL . \ | xargs -r rm -f
これにより,テキストとして扱えないファイルを削除できます.
5 本文抽出戦略
HTMLはサイトごとに構造が一定ではないため,正規表現による固定抽出は困難です.
そのため,
- HTML → Markdown(gfm)
- LLMによる意味的本文抽出
を採用しました.
LLMには以下を削除させます.
- ナビゲーション
- フッタ
- サイドバー
- CPU表示
- 装飾のみの画像
- メニュー一覧
保持対象は以下です.
- 本文段落
- 本文内リンク
- 本文内画像
- 本文中の表
- コードブロック
6 メタ情報付与方針(RAG最適化)
JSONではなく,YAMLフロントマター+Markdown本文形式を採用します.
この形式は,例えば
- Hugo
- Jekyll
などの静的サイト生成系とも親和性があります.
6.1 機械抽出+LLM補完
機械で確実に取得できる情報はLLMに任せません.
6.1.1 機械抽出
- source(元ファイル名)
- path(相対パス)
- processed_at
- filenameからの日付抽出(YYYY-MM-DD)
6.1.2 LLM補完
- title
- category
- tags(3〜8個)
- summary(2〜3行)
6.2 出力例
--- source: "chari_2009-05-20.html" path: "site1/chari/2009-05/" processed_at: 2026-03-01 date: 2009-05-20 title: 夜装備で続行した紀美野方面ライド category: diary tags: - cycling - night ride - wakayama summary: > 紀美野方面へのサイクリング記録. 休憩後,夜装備で走行を継続した. --- (Markdown本文)
7 品質監視
LLMは稀に本文をほとんど出力しないことがあります.
そのため,文字数閾値による異常検出を行います.
if [ ${#markdown_content} -lt 500 ]; then
echo "[!] Suspiciously short" >> error.log
fi
これにより,大量処理時の事故を防止します.
8 RAG投入を前提とした設計意図
本設計は以下を前提としています.
- title + summary をembedding対象にできる
- 本文をチャンク分割してベクトル化できる
- tagsによるフィルタ検索が可能
- dateによる時系列検索が可能
- サイト単位でDB更新が可能
単なるアーカイブではなく,検索可能知識基盤の構築を目的としています.
9 今後の拡張
- チャンク戦略の最適化
- サイト別設定ファイルの導入
- 差分検出による再処理最小化
- ベクトルDB自動更新パイプライン
10 まとめ
本設計は,
- HTMLの構造的不定性に対応するためLLMを活用
- メタ情報は機械抽出+意味補完のハイブリッド
- サイト中心構造でスケーラブルに管理
- RAG用途を前提としたデータ設計
という思想に基づいています.
これにより,個人サイト群を長期的に再利用可能な知識資産へと変換できます.