mcpField
L
large-document-processing

large-document-processing

github.com/findinfinitelabs文档处理138 次安装2 天前更新
代码仓库

关于 large-document-processing

用于处理大型文档并为 AI 训练或 RAG 准备文本块的技能。支持解析 DOCX、PDF、EPUB、纯文本和 CSV,并提供保留结构及降低内存占用的处理方法。

主要功能

  1. 01解析 DOCX、PDF、EPUB 等格式
  2. 02保留文档结构
  3. 03语义与结构化文本分块
  4. 04流式处理大型文件
  5. 05输出 JSONL、JSON 和纯文本

适用场景

  1. 01为 RAG 准备定长文本块
  2. 02将文档整理为 AI 训练数据
  3. 03逐页处理大型 PDF
  4. 04提取 EPUB 内容

安装

复制下面的命令,在终端中运行。

$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 进行包装。

概览

这里结合了两个密切相关的问题:

  1. 大型文档解析 — 导入 DOCX/PDF/EPUB,同时保留结构
  2. 智能文本分块 — 将解析后的文本拆分为语义连贯的片段,用于 AI 训练或 RAG

源文件

文件用途
src/utils/nwt_epub_parser.pyNWT 圣经 EPUB 解析器(英语 + Chuukese)
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 系统
滑动窗口需要上下文重叠的问答任务
实现模式
# 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 的分块
# 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 章节;不要一次性加载整本书
  • 将分块结果增量写入 JSONL 文件,而不要全部累积在 RAM 中

输出格式

  • JSONL:每行一个 JSON 对象——最适合大型训练数据集
  • JSON 数组:适用于由前端使用的较小批次
  • 纯文本:用于检查的清理后提取文本

依赖项

  • PyMuPDF==1.23.8 — PDF 处理(不要添加 fitz==0.0.1.dev2)
  • python-docx>=1.2.0
  • ebooklib>=0.18
  • beautifulsoup4>=4.12.0

评论

支持 Markdown