菜鸟AI - 让提示词生成更简单! 全站导航 全站导航
AI工具安装 新手教程 进阶教程 辅助资源 AI提示词 热点资讯 技术资讯 产业资讯 内容生成 模型技术 AI信息库

已有账号?

首页 > AI教程 > LlamaIndex PDF转Document实战:AI Agent编程第三天
进阶教程 Agent编程第三天

LlamaIndex PDF转Document实战:AI Agent编程第三天

2026-06-03
阅读 0
热度 0
作者 菜鸟AI编辑部
摘要

摘要

LlamaIndex 中 PDF 文件读取的正确姿势 默认情况下,SimpleDirectoryReader 支持多种文件格式,但处

LlamaIndex 中 PDF 文件读取的正确姿势

默认情况下,SimpleDirectoryReader 支持多种文件格式,但处理 PDF 这类结构化文档时容易连带排版标签一并读入,造成文本混乱。理想状态是仅提取纯正文内容,但目前官方并未提供开箱即用的 Reader 实现这一步。

学习AI Agent编程-第三天-LlamaIndex - 如何将PDF文件正确转成Document

LlamaIndex 社区维护了一个免费的开源解析器 liteparse,但官方为推广付费的 Reader 产品,未将其直接封装为 Reader 接口。解决方案是自行封装一个自定义 Reader。

准备工作

安装 Python 依赖包:

pip install liteparse

实现自定义 Reader

编写一个继承自 LlamaIndex 的 BaseReader 类,借助 liteparse 解析 PDF 文件并转换为 Document 对象。核心在于重写 lazy_load_data 方法,在其中实例化 LiteParse,遍历文件路径调用 parser.parse(),提取文本与元数据。

from datetime import datetime
from typing import Any, Iterable
from liteparse import LiteParse
from llama_index.core import SimpleDirectoryReader, Document
from llama_index.core.readers.base import BaseReader

# 继承BaseReader基类
class PDFReader(BaseReader):
    """借助liteparse解析PDF文件,提取纯文本内容"""
    def lazy_load_data(self, *args: Any, **load_kwargs: Any) -> Iterable[Document]:
        documents = []
        # 创建LiteParse解析器实例
        parser = LiteParse()
        # args 为传入的路径元组
        for path in args:
            # 解析PDF并获取文本
            result = parser.parse(str(path))
            # 构建Document对象
            document = Document(
                name=path.name,
                text=result.text,
                metadata={
                    "author": "Kurt Johnson",
                    "file_type": "application/pdf",
                    "file_path": str(path),
                    "file_name": path.name,
                    "creation_date": datetime.now().strftime("%Y-%m-%d"),
                    "last_modified_date": datetime.now().strftime("%Y-%m-%d"),
                }
            )
            documents.append(document)
        return documents

测试运行

编写 __main__ 快速验证流程:

if __name__ == '__main__':
    # 实例化自定义PDF Reader
    parser = PDFReader()
    # 将.pdf后缀映射到该Reader
    pdf_file_extractor = {
        ".pdf": parser
    }
    reader = SimpleDirectoryReader("./data", file_extractor=pdf_file_extractor)
    # 加载文档
    documents = reader.load_data()
    for document in documents:
        print(f'{document.metadata['file_name']} - {document.metadata['file_type']}')
        print('-' * 80)
        print(document.text)
        print('-' * 80)
        print('n')

运行时可能遇到 OCR 相关的警告日志,不会影响最终结果,但视觉上不够干净。原因在于 liteparse 依赖 Tesseract OCR 引擎,需要下载语言数据文件。解决步骤:

  1. 下载以下两个文件:
https://github.com/tesseract-ocr/tessdata/raw/main/eng.traineddata
https://github.com/tesseract-ocr/tessdata/raw/main/chi_sim.traineddata
  1. 将文件放入 ~/.tesseract-rs/tessdata 目录。

配置完成后再次运行,日志警告即消失。若只需英文 OCR,仅下载 eng.traineddata 即可。

至此,我们获得了一个可精准提取 PDF 文本内容的自定义 Reader。之后使用 SimpleDirectoryReader 处理 PDF 文件时,会按照预期返回干净的 Document 对象。

来源:互联网

免责声明

本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。

同类文章推荐

相关文章推荐

更多