LESSON 30分

ストーリー

田中VPoE
Step 1でRAGの全体像を掴んだ。Step 2では「ドキュメント処理」に集中する。RAGの品質は入力データの品質で決まる
あなた
ドキュメント処理って、ファイルを読み込んでテキストにするだけではないんですか?
田中VPoE
それは入口に過ぎない。NetShop社にはMarkdown、PDF、Confluence、Google Docs、Notion…多様な形式のドキュメントが散在している。それぞれの形式からテキスト、テーブル、画像、メタデータを正しく抽出する必要がある
あなた
形式ごとに処理が違うんですね
田中VPoE
そうだ。しかも単にテキストを抽出するだけでは不十分だ。ヘッダー構造、テーブルの意味、コードブロックの扱い…ドキュメントの「構造」を保持することがRAGの検索品質に直結する

ドキュメント形式別の処理

主要な形式と処理方法

形式特徴処理ツール考慮事項
Markdown構造が明確、パースしやすいmarkdown-it, remarkヘッダー階層を保持、コードブロック分離
PDFレイアウト情報が豊富だが抽出が難しいPyMuPDF, pdfplumber, Unstructuredテーブル、画像、段組みの処理
HTMLタグベースで構造が明確BeautifulSoup, Unstructuredナビゲーション等の不要要素の除去
Word(docx)リッチテキスト形式python-docx, Unstructuredスタイル情報の活用、埋め込みオブジェクト
ConfluenceREST APIでアクセスAtlassian API + HTMLパーサーページ階層、マクロの展開
NotionAPIでアクセスNotion APIブロック構造の再帰的取得
Google DocsGoogle Drive APIでアクセスGoogle Docs APIコメント、提案の扱い

テキスト抽出のアーキテクチャ

ドキュメントローダーのアーキテクチャ:

[ドキュメントソース]
├── ファイルシステム(Markdown, PDF, docx)
├── クラウドストレージ(S3, GCS)
├── SaaSプラットフォーム(Confluence, Notion, Google Docs)
└── データベース(Wiki, CMS)

[Document Loader]
├── FormatDetector(形式判定)
├── TextExtractor(テキスト抽出)
├── StructureParser(構造解析)
├── MetadataExtractor(メタデータ抽出)
└── Cleaner(クリーニング)

[統一ドキュメント形式]
{
  "content": "抽出されたテキスト",
  "metadata": { ... },
  "structure": { "headings": [...], "tables": [...] }
}

PDF処理の実践

PDFはRAGで最も頻繁に扱う形式の一つですが、処理が最も困難でもあります。

PDFの種類と対応

PDF種類特徴処理方法
テキストベースPDFテキストが直接埋め込まれているテキスト抽出ライブラリで直接抽出
スキャンPDF画像として保存されているOCR(Tesseract, AWS Textract)が必要
複合PDFテキストと画像が混在テキスト抽出 + OCRのハイブリッド

テーブルの処理

アプローチツール精度処理速度
ルールベースpdfplumber中〜高高速
ML ベースTable Transformer中程度
LLMベースGPT-4 Vision非常に高低速・高コスト
専用サービスAWS Textract, Azure Document Intelligence中程度

「テーブルの処理はRAGのアキレス腱だ。テーブルの内容をそのままテキスト化すると意味が崩れる。行と列の関係を保持した形でテキスト化するか、テーブル専用の検索パスを用意するかを検討する必要がある」 — 田中VPoE


構造の保持

ヘッダー階層の重要性

ドキュメントのヘッダー構造は、コンテキストの理解に不可欠です。

ヘッダー階層の保持例:

# RAGシステム設計ガイド
## 3. ベクトルDB
### 3.1 インデックス設計
インデックスのパラメータは以下の通り...

→ チャンク化する際に「3.1 インデックス設計」のテキストだけでなく、
  上位ヘッダー「RAGシステム設計ガイド > ベクトルDB > インデックス設計」
  というパンくず情報を付加する

コードブロックの扱い

戦略説明適するケース
本文と一体で処理コードブロックを本文テキストの一部として扱う短いコード例
分離して処理コードブロックを独立したチャンクとして扱う長いコード、スニペット集
メタデータ付加言語、ファイル名等のメタデータを付加コード検索の精度向上

データクリーニング

よくあるノイズと対処

ノイズ対処
HTMLタグ残り<div>, <span>タグ除去、テキストのみ抽出
不要なヘッダー/フッターページ番号、著作権表示パターンマッチで除去
重複コンテンツテンプレートの定型文ハッシュベースの重複検出
特殊文字ゼロ幅スペース、制御文字Unicode正規化(NFKC)
過度な空白連続スペース、空行の連続正規化処理
古い情報廃止された手順、旧バージョンの仕様日付ベースのフィルタリング
クリーニングパイプラインの例:

Raw Text
  → Unicode正規化(NFKC)
  → HTMLタグ除去
  → 特殊文字の除去/置換
  → 空白の正規化
  → ヘッダー/フッター除去
  → 重複コンテンツの検出・除去
  → Clean Text

まとめ

ポイント内容
形式別処理Markdown/PDF/HTML/Office等、形式ごとに適切なツールと処理方法を選択
PDF処理テキストベース/スキャン/複合の種類を判別し、テーブル処理に注意
構造保持ヘッダー階層やコードブロックの構造を保持して検索精度向上
クリーニングノイズの除去とテキストの正規化でデータ品質を確保

チェックリスト

  • ドキュメント形式別の処理方法を理解した
  • PDF処理の課題と対処法を理解した
  • 構造保持の重要性を理解した
  • データクリーニングのパイプラインを理解した

次のステップへ

次は「チャンキング戦略」を学びます。抽出したテキストをどのように分割するかは、RAGの検索品質に最も大きな影響を与えます。


推定読了時間: 30分