关于 large-document-processing
用于处理大型文档并为 AI 训练或 RAG 准备文本块的技能。支持解析 DOCX、PDF、EPUB、纯文本和 CSV,并提供保留结构及降低内存占用的处理方法。
主要功能
- 01解析 DOCX、PDF、EPUB 等格式
- 02保留文档结构
- 03语义与结构化文本分块
- 04流式处理大型文件
- 05输出 JSONL、JSON 和纯文本
适用场景
- 01为 RAG 准备定长文本块
- 02将文档整理为 AI 训练数据
- 03逐页处理大型 PDF
- 04提取 EPUB 内容
安装
复制下面的命令,在终端中运行。
$
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进行包装。
概览
这里结合了两个密切相关的问题:
- 大型文档解析 — 导入 DOCX/PDF/EPUB,同时保留结构
- 智能文本分块 — 将解析后的文本拆分为语义连贯的片段,用于 AI 训练或 RAG
源文件
| 文件 | 用途 |
|---|---|
src/utils/nwt_epub_parser.py | NWT 圣经 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.0ebooklib>=0.18beautifulsoup4>=4.12.0
评论
支持 Markdown