large-document-processing について
大規模な文書を処理し、AI トレーニングや RAG 向けにテキストを分割するスキルです。DOCX、PDF、EPUB、プレーンテキスト、CSVを解析し、構造の保持とメモリ効率を考慮した処理方法を扱います。
主な機能
- 01DOCX、PDF、EPUBなどの解析
- 02文書構造の保持
- 03意味・構造に沿った分割
- 04大容量ファイルのストリーム処理
- 05JSONL、JSON、プレーンテキスト出力
活用シーン
- 01RAG向けの一定サイズのテキスト作成
- 02AIトレーニングデータへの文書変換
- 03大規模PDFのページ単位処理
- 04EPUBコンテンツの抽出
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ findinfinitelabs/ chuuk --skill large-document-processingインストール後、Claude Code で/large-document-processingを入力して読み込まれたか確認します。
詳細
大規模ドキュメント処理とインテリジェントなテキストチャンク分割
⚠️ リポジトリの実態(最初にお読みください)
実際のコンポーネントは次のとおりです。
- トップレベルのパイプライン:
LargeDocumentProcessor- 構造を考慮したパーサー:
AdvancedDocumentParser- 進捗表示付きストリーミング OCR:
EnhancedOCRProcessor- チャンク分割ツール:
IntelligentTextChunker— intelligent-text-chunking スキルを参照してください。- トレーニングデータ生成:
AITrainingDataGenerator- セットアップヘルパー:
scripts/setup_large_document_processing.pyNWT EPUB パーサーが公開しているのは
get_verse(book_num, chapter, verse)のみです(nwt_epub_parser.py)。get_chapter/get_bookはありません。bible-epub-processing スキルを参照してください。ソースデータは
config/data/の下にあります(トップレベルのdata/ではありません)。入力に聖書の参照が含まれる可能性がある場合は、チャンク分割の呼び出しを常に
src/utils/scripture_parser.pyのprotect_scripture_references/restore_scripture_referencesで囲んでください。
概要
ここでは、密接に関連する次の2つの項目を扱います。
- 大規模ドキュメントの解析 — 構造を保持した DOCX/PDF/EPUB の取り込み
- インテリジェントなテキストチャンク分割 — 解析したテキストを、AI トレーニングまたは RAG 向けに意味のまとまりを保った単位に分割
ソースファイル
| ファイル | 用途 |
|---|---|
src/utils/nwt_epub_parser.py | NWT 聖書(英語 + チューク語)用の EPUB パーサー |
scripts/extract_jwpub.py | JW 出版物の .jwpub アーカイブを展開 |
scripts/setup_large_document_processing.py | ドキュメントパイプラインの初回セットアップ |
output/processed_document/ | 処理済みコンテンツの出力ディレクトリ |
ドキュメント処理
対応形式
- DOCX(
python-docxを使用) - PDF(
PyMuPDFを使用。fitzとしてインポート) — 注意:fitz==0.0.1.dev2は requirements に含まれていません。PyMuPDFのみを使用してください - EPUB(
ebooklib+NWTEpubParserを使用) - プレーンテキスト / CSV — 直接読み込み
EPUB のパターン(NWT 聖書)
from src.utils.nwt_epub_parser import NWTEpubParser
parser = NWTEpubParser('data/bible/nwt_E.epub')
verse_text = parser.get_verse('John', 3, 16)
chapter_verses = parser.get_chapter('Genesis', 1)
PDF/DOCX のパターン
import fitz # PyMuPDF — installed as PyMuPDF, exposed as fitz
doc = fitz.open('large_document.pdf')
for page_num, page in enumerate(doc):
text = page.get_text()
# process text...
インテリジェントなテキストチャンク分割
戦略の選択
| 戦略 | 用途 |
|---|---|
| セマンティック | AI トレーニングデータ — トピックや段落の境界を尊重 |
| 構造ベース | 明確な見出しやセクションがあるドキュメント |
| 固定サイズ | 予測可能なチャンクサイズが必要な RAG システム |
| スライディングウィンドウ | コンテキストの重複が必要な QA タスク |
実装パターン
# Sentence-boundary-aware chunking
def chunk_text(text: str, max_chars: int = 1024, overlap: int = 100) -> list[str]:
sentences = re.split(r'(?<=[.!?])\s+', text)
chunks, current = [], ''
for sent in sentences:
if len(current) + len(sent) > max_chars and current:
chunks.append(current.strip())
current = current[-overlap:] + ' ' + sent # overlap
else:
current += ' ' + sent
if current.strip():
chunks.append(current.strip())
return chunks
チューク語を考慮したチャンク分割
# Chuukese uses the same sentence terminators as English
SENTENCE_ENDINGS = re.compile(r'(?<=[.!?])\s+')
def detect_language(text: str) -> str:
has_accents = bool(re.search(r'[áéíóú]', text))
return 'chuukese' if has_accents else 'english'
メモリ効率
- 大きな PDF は、DOM 全体をメモリに読み込まず、ページごとに処理します
- EPUB の章はストリーミング処理し、書籍全体を一度に読み込まないでください
- チャンク出力は RAM に蓄積せず、JSONL ファイルに逐次書き込みます
出力形式
- JSONL:1行につき1つの JSON オブジェクト — 大規模なトレーニングデータセットに最適
- JSON 配列:フロントエンドで使用する小規模なバッチ向け
- プレーンテキスト:確認用にクリーニングした抽出テキスト
依存関係
PyMuPDF==1.23.8— PDF 処理用(fitz==0.0.1.dev2は追加しないでください)python-docx>=1.2.0ebooklib>=0.18beautifulsoup4>=4.12.0
コメント
Markdown 対応