一、文档分割方法
基于规则的切分方法
- 字符/固定大小分块:按固定字符数或令牌数切分,简单但可能破坏语义连贯性。例如,指定每块300个字符,并设置重叠(如100字符)以减少信息割裂。
- 内容感知分块:利用标点符号、段落或标题等结构特征分割。例如,使用NLTK或spaCy进行句子或段落分割。
- 递归分块:多级分割策略,先按段落或标题分割,若块仍过大则进一步细分,适用于长文本。
- 特殊文档类型分割:针对Markdown、XML等结构化文档,使用预定义分隔符(如标题层级)分割。
基于语义的切分方法
- 语义聚类分割:通过嵌入模型(如BERT)计算句子或段落的语义相似度,将相关文本合并为块。例如,LlamaIndex的SemanticSplitterNodeParser。
- 滑动窗口与相似度阈值:结合滑动窗口和余弦相似度,动态调整分块边界,确保语义连贯性。
基于内容类型的切分
针对pdf文件,一个文件中通常包含多种不同的内容组成(图片、表格、正文等等),grobid 可以识别pdf 文件中的内容格式,将pdf分割成图片,表格,正文等。
基于大模型(LLM)的智能分割
- 问答类文档拆分:通过大模型提取问题,按问题-答案对分割。例如,使用提示词模板让LLM输出问题列表,再根据问题切分文本。
- 标题提取与分块:利用LLM识别文档中的标题层级,按一级标题切分长文档。例如,缩减文本行后输入大模型提取标题,再按标题分割。
混合方法
嵌入与规则结合:例如,先按语义分块,再通过规则优化块大小,兼顾灵活性与效率。
二、成熟工具推荐
通用文本分割工具
- LangChain文本分割器:支持字符分割(CharacterTextSplitter)、递归分割(RecursiveCharacterTextSplitter)及Markdown/代码分割,适用于大模型开发场景。
- Linux命令行工具:如split(按行/字节分割)、csplit(正则匹配分割)、dd(按块分割),适合处理大型纯文本文件。
结构化文档工具
- PDF分割
- PDF Size Splitter:按大小或页数分割PDF,支持批量操作。
- PyPDF2/pdfminer:Python库,可编程解析PDF内容并按段落分割。
- 表格分割
- Excel文件分割器:按行或份数切分Excel文件,支持.xls/.xlsx格式。
- 语义分割与LLM集成工具
- LlamaIndex:提供语义分割器(SemanticSplitter),结合嵌入模型和相似度阈值动态分块。
- 自定义LLM提示词模板:如通过大模型提取标题或问题,实现智能分块(需结合OpenAI或本地LLM)。
- 多格式文件处理工具
- 文本分割器:如西盟TXT分割器、闪电文本分割器,支持按大小、行数或章节分割文本。
- 音频/视频分割:如传华MP3切割器,按时间点切割音频文件。
三、方法选择与工具对比
| 场景 | 推荐方法 | 工具示例 | 优势 |
| ———————— | ——————- | ——————————- | —————————- |
| 长文本处理(如论文) | 递归分块 + 语义聚类 | LangChain递归分割器、LlamaIndex | 兼顾结构完整性与语义相关性 |
| 结构化文档(如Markdown) | 特殊格式分割 | MarkdownTextSplitter | 保留文档层级逻辑 |
| 问答类文档 | LLM提取问题分块 | 自定义提示词模板 + GPT模型5 | 精准定位问答对,提升检索效率 |
| 大型文件传输 | 固定大小分块 | Linux split命令、FileSplit | 快速分割,支持合并还原 |