RAG进阶:扫描版PDF处理方案实测,突破知识库建设的最后一公里

B站影视 韩国电影 2025-02-16 03:51 1

摘要:"为什么我的RAG效果这么差?" "又在为知识库准确率发愁?" "找到好的开源方案了吗?"作为一个技术博主,我理解大家的焦虑。但是,很多人忽略了问题:你的核心知识真的都在网上吗?事实是,很多最有价值的知识,往往躺在那些积灰的档案袋里 - 技术手册、项目总结、研

"为什么我的RAG效果这么差?" "又在为知识库准确率发愁?" "找到好的开源方案了吗?"作为一个技术博主,我理解大家的焦虑。但是,很多人忽略了问题:你的核心知识真的都在网上吗?

事实是,很多最有价值的知识,往往躺在那些积灰的档案袋里 - 技术手册、项目总结、研发记录...这些扫描版PDF才是真正的"知识金矿"。

上周,一位粉丝问我:"能不能把扫描版PDF放进RAG知识库?"这个问题戳中了技术落地的痛点。经过一整天的实测,我找到了一个可落地、可复制的解决方案。

别再纠结于网上公开资料的效果了。今天,我要分享一个经过实战验证的扫描版PDF处理方案。话不多说,直接上干货...

- 图书:《从技术走向管理:李元芳履职记》扫描版

- 页数:约270页

- 特点:

- 文字+漫画插图混排

- 有表格和段落缩进

- 典型的管理类书籍排版

1. PDF拆分测试

使用PyMuPDF尝试直接提取:- 正文识别率:0% 是能识别到人为添加的广告网址 其他啥也识别不了- 漫画无法处理- 表格排版全乱import osimport sysimport jsonimport loggingfrom pathlib import Pathimport fitz # PyMuPDFfrom pprint import pprintproject_root = Path(__file__).parent.parent.parent.parentsys.path.insert(0, str(project_root))logging.basicConfig(level=logging.INFO)logger = logging.getLogger(__name__)class PDFDirectExtractor:"""PDF直接文本提取测试"""def __init__(self, pdf_path: str):self.pdf_path = pdf_pathself.doc = Nonedef __enter__(self):self.doc = fitz.open(self.pdf_path)return selfdef __exit__(self, exc_type, exc_val, exc_tb):if self.doc:self.doc.closedef extract_text(self, max_pages: int = 3) -> dict:"""提取前N页的文本内容Args:max_pages: 最大页数,默认3页Returns:dict: 包含每页文本内容、字数统计等信息"""results = {'total_pages': len(self.doc),'processed_pages': min(max_pages, len(self.doc)),'pages': ,'stats': {'total_chars': 0,'total_words': 0,'avg_chars_per_page': 0}}for page_num in range(min(max_pages, len(self.doc))):page = self.doc[page_num]page_text = page.get_textwords = [w for w in page.get_text("words") if w[4].strip]# 获取文本块blocks = page.get_text("blocks")

2. OCR方案对比

测试了老牌的Tesseract和国产的PaddleOCR:

PaddleOCR表现:

- 中文识别准确率90%+

- 能较好保留段落格式

- 漫画部分自动跳过

- 表格识别还行

Tesseract表现:

- 中文效果差

- 格式容易乱

- 处理速度慢

3. 多模态测试

用Gemini2.0 flash和Qwen-VL-Max测试:

- 能正确理解漫画内容

- 可以解释配图含义

- 表格内容提取完整

- 适合处理混排内容

(经验分享:Qwen-VL一定要用max版本,plus测下来效果堪忧。Gemini2.0用flash就行了 没必要用pro 差异不大。 )

多模态模型提示词

多模态的好处是直接可以返回json,分类显示书籍信息,而且可以直接将拆好的句子用来嵌入。

"embeddings_prep": {"chunks": [{"text": "快速、精准地实现从技术到管理的华丽转身","metadata": {"section": "从技术走向管理","page": 1,"chunk_type": "正文"}},{"text": "阐述了技术人员转向管理中遇到的各种问题及处理方法","metadata": {"section": "从技术走向管理","page": 1,"chunk_type": "正文"}},{"text": "相信技术牛人在您向管理转型时一定会像我一样喜欢她,并把她作为自己工作中的指导老师","metadata": {"section": "从技术走向管理","page": 1,"chunk_type": "正文"}}]}

缺点是:收费,

下面是Qwen-VL-MAX价格

具体效果

拿书中一段测试:

- 原文:首页带作者信息 出版社 书籍名字等

- OCR:提取出文字内容,准确率95%

- 多模态:成功理解漫画表达的管理情境

- 整体:基本还原了作者想表达的内容 还能获取 首页带作者信息 出版社 书籍名字等 按照json返回

更令我惊讶的是漫画中的距离很远的字也被它正确的识别到了!

{"metadata": {"doc_type": "书籍","title": "从技术走向管理:李元芳履职记","author": "王树文","date": null,"source": "电子工业出版社","keywords": ["技术管理", "职业发展", "领导力", "管理转型"]},"content": {"summary": "本书讲述了从技术人员转型为管理人员的故事,旨在帮助技术人员更好地理解和应对转型过程中遇到的各种问题。通过李元芳的履职经历,探讨了领导力的三大主要来源,并为希望向管理转型的技术人员提供指导。","main_points": ["技术人员向管理转型的华丽转身","技术人员转向管理中遇到的问题及处理方法","领导力的三大主要来源:职权、技能、个人魅力"],"sections": [{"heading": "从技术走向管理","content": "李元芳履职记","level": 1}]}

1. 分辨率问题

- 扫描质量太差会影响识别

- 建议300dpi以上

2. 内存消耗

- 处理图片页面时内存占用大

- 建议分批处理

3. 结构保存

- 用JSON保存层级关系

- 图文对应关系要标注

ANALYSIS_PROMPTS = {'caption': """分析这份扫描文档并提取结构化内容。必须严格按照以下JSON格式返回,保证JSON语法正确且完整:{"metadata": {"doc_type": "文档类型","title": "完整标题","author": "作者全名","date": "出版日期","source": "出版社或来源","keywords": ["关键词1", "关键词2", "关键词3"]},"content": {"summary": "100字以内的文档摘要","main_points": ["完整的要点1","完整的要点2","完整的要点3"],"sections": [{"heading": "章节标题","content": "章节内容","level": 1}]},"embeddings_prep": {"chunks": [{"text": "完整的语义单元文本","metadata": {"section": "所属章节名称","page": 1,"chunk_type": "标题/正文/列表/图表"}}]}}""",'text': """提取文档中的所有文本内容,按照以下JSON格式返回(不要添加其他描述):{"text_blocks": [{"content": "文本内容","type": "heading/paragraph/list/table","position": {"page": 1, "block": 1},"semantic_unit": true}],"relationships": [{"type": "hierarchy/reference","source_block": 0,"target_block": 1}]}"""}

1. 知识管理

- 快速数字化纸质书籍

- 建立可搜索的知识库

2. 学习辅助

- 提取关键概念

- 生成复习要点

3. 内容创作

- 素材快速提取

- 案例库建设

人工方案与AI方案效率对比

不同方案效果对比

欢迎关注我,持续为你带来RAG知识库搭建和AI Agent落地实战以及设计中的痛点和对策!

如果觉得有帮助,请点个赞!我会持续分享一线工程实践经验。

#技术分享 #RAG实战 #PDF处理

来源:物联全栈123一点号

相关推荐