文档解析主流开源工具全家桶及RAG中的文档目录解析PageIndex思路解析


文档解析主流开源工具全家桶及RAG中的文档目录解析PageIndex思路解析

仅用于站内搜索,没有排版格式,具体信息请跳转上方微信公众号内链接

今天是2025年4月22日,星期二,北京,晴。
关于RAG切分,已经有很多的方案了,我们也说过很多文档解析的方案,例如基于文档布局分析,将文档解析成段落、标题、图片等等block。可以以这些block作为一个单位做切分。
但随着大模型的上下文越来越大,可能不需要切的这么细,可以直接作为目录进行索引,那么问题就来了,如何进行目录生成?我们来看一个实现方案。
然后,继续回到文档解析,我们可以再看文档解析的代表模型工具池,东西越来越多,有哪些主流的,表现又如何,如何评价,都可以找到答案。
抓住根本问题,做根因,专题化,体系化,会有更多深度思考。大家一起加油。

在PDF上运行PageIndex,命令如下:
预处理工作流为:使用页面索引处理文档以生成树形结构->将树形结构及其对应的文档ID存储在数据库表中->将每个节点的内容单独存储在另一个表中,通过节点ID和树ID进行索引。

1)主入口:page_index_main是程序的主入口,负责初始化日志记录器、解析PDF文档,并调用目录检测函数check_toc。
2)目录检测:check_toc检测文档中是否存在目录,并判断目录是否包含页码信息。
3)目录处理:如果目录存在且包含页码信息,调用process_toc_with_page_numbers进行处理。
如果目录存在但不包含页码信息,调用process_toc_no_page_numbers进行处理。
如果目录不存在,调用process_no_toc生成目录结构。
4)目录验证与修正:使用verify_toc验证目录的准确性。如果验证准确率不是100%,调用fix_incorrect_toc_with_retries进行修正。
5)递归处理大型节点:对目录树的每个节点递归调用process_large_node_recursively,处理大型节点。
6)最终输出:返回结构化的目录信息,例如几个例子:
就是把一个pdf做成目录结构的工作,有目录的,做页码映射;没目录的,找到标题,根据标题层级,组装成目录。

对于存在目录的,先找到对应页码,做存储:
然后进一步在原有的目录基础上进行补充。
然后,在具体用法上,构建好之后,进行RAG的思路如下:查询预处理分析查询以识别所需的知识->文档选择搜索相关的文档及其ID,从数据库中检索对应的树形结构**->节点选择在树形结构中搜索以识别相关节点->LLM生成从数据库中检索所选节点的对应内容,格式化并提取相关信息,将组装好的上下文与原始查询一起发送给LLM,生成具有上下文信息的响应。
节点选择提示示例如下:
实际上,里面的核心的核心其实还是如何利用llm进行目录识别,例如:
prompt=”你是一个XML标题层级校正专家,根据语义,将标题层级调整为正确的层级,如果存在,谨慎修改标题的内容错误,如不确定不应该修改。根据情况,可以有多个一级标题。输入格式的是用于匹配结果的,你绝对不应该修改。不允许添加、删除标题,不允许调整标题顺序。”

但是,这种方式有很强的假设性。1)假设pypdf解析的东西不乱,不遗漏;2)不可编辑的使用多模态做,准确率高;3)llm解析目录的效果好【但其实并不一定,需要加入视觉特征】;
关于文档解析,我们可以找到不少的文档解析的方案,可以这个可以作为一个工具模型池,如下:
1、文档解析方案方案
1)MinerU:https ://mineru.org.cn/;
2)ppstructure:https ://github.com/PaddlePaddle/PaddleOCR/blob/main/docs/ppstructure/overview.md
上面两个是pipeline式的,下面是端到端的文档领域微调大模型:
1)Marker:https ://github.com/VikParuchuri/marker;
2)Unstructured:https ://github.com/Unstructured-IO/unstructured;
3)OpenParse:https ://github.com/Filimoa/open-parse;
4)Docling:https ://ds4sd.github.io/docling/;
5)Mistral-OCR:https ://mistral.ai/news/mistral-ocr?utm_source=ai-bot.cn;
6)GOT-OCR:https ://github.com/Ucas-HaoranWei/GOT-OCR2.0;
7)Nougat:https ://github.com/facebookresearch/nougat;
8)olmOCR:https ://github.com/allenai/olmocr;
9)SmolDocling:https ://huggingface.co/ds4sd/SmolDocling-256M-preview;
下面是通用多模态大模型:
1)GPT4o:https ://openai.com/index/hello-gpt-4o/;
2)Gemini2.0-flash:https ://deepmind.google/technologies/gemini/flash/;
3)Gemini2.5-pro-exp-0325:https ://deepmind.google/technologies/gemini/pro/;
4)Qwen2-VL-72B:https ://qwenlm.github.io/zh/blog/qwen2-vl/;
5)Qwen2.5-VL-72B:https ://github.com/QwenLM/Qwen2.5;
6)InternVL2-Llama3-76B:https ://github.com/OpenGVLab/InternVL
2、TextRecognition文本识别
1)PaddleOCR:https ://www.paddlepaddle.org.cn/hub/scene/ocr;
2)Tesseract:https ://tesseract-ocr.github.io/tessdoc/;
3)OpenOCR:https ://github.com/Topdu/OpenOCR;
4)EasyOCR:https ://www.easyproject.cn/easyocr;
5)Surya:https ://github.com/VikParuchuri/surya
3、Layout版式布局分析

4、Formula公式解析模型
1)Mathpix:https ://mathpix.com/;
2)Pix2Tex:https ://github.com/lukas-blecher/LaTeX-OCR;

5、Table表格解析模型

对于具体效果,可以看https ://github.com/opendatalab/OmniDocBench,https ://arxiv.org/pdf/2412.07626,作为一个选型参考。
1、https ://github.com/VectifyAI/PageIndex
2、https ://github.com/opendatalab/OmniDocBench
老刘,NLP开源爱好者与践行者,主页:https ://liuhuanyong.github.io。
对大模型&知识图谱&RAG&文档理解感兴趣,并对每日早报、老刘说NLP历史线上分享、心得交流等感兴趣的,欢迎加入社区,社区持续纳新。
加入社区方式:关注公众号,在后台菜单栏中点击会员社区加入。


文章作者: ZejunCao
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ZejunCao !
  目录