mcpField
L
large-document-processing

large-document-processing

github.com/findinfinitelabsドキュメント138 回インストール2 日前に更新
リポジトリ

large-document-processing について

大規模な文書を処理し、AI トレーニングや RAG 向けにテキストを分割するスキルです。DOCX、PDF、EPUB、プレーンテキスト、CSVを解析し、構造の保持とメモリ効率を考慮した処理方法を扱います。

主な機能

  1. 01DOCX、PDF、EPUBなどの解析
  2. 02文書構造の保持
  3. 03意味・構造に沿った分割
  4. 04大容量ファイルのストリーム処理
  5. 05JSONL、JSON、プレーンテキスト出力

活用シーン

  1. 01RAG向けの一定サイズのテキスト作成
  2. 02AIトレーニングデータへの文書変換
  3. 03大規模PDFのページ単位処理
  4. 04EPUBコンテンツの抽出

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/findinfinitelabs/chuuk --skill large-document-processing

インストール後、Claude Code で/large-document-processingを入力して読み込まれたか確認します。

詳細

大規模ドキュメント処理とインテリジェントなテキストチャンク分割

⚠️ リポジトリの実態(最初にお読みください)

実際のコンポーネントは次のとおりです。

NWT 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つの項目を扱います。

  1. 大規模ドキュメントの解析 — 構造を保持した DOCX/PDF/EPUB の取り込み
  2. インテリジェントなテキストチャンク分割 — 解析したテキストを、AI トレーニングまたは RAG 向けに意味のまとまりを保った単位に分割

ソースファイル

ファイル用途
src/utils/nwt_epub_parser.pyNWT 聖書(英語 + チューク語)用の EPUB パーサー
scripts/extract_jwpub.pyJW 出版物の .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.0
  • ebooklib>=0.18
  • beautifulsoup4>=4.12.0

コメント