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

默认情况下,SimpleDirectoryReader是可以处理各种类型文件的,但是,在处理一些PDF等特殊格式的文件时并不能很好地识别内容文本,它连格式文本也一起读了进来,这并不是我们想要的。

但是目前也没有一个好的内置的Reader能正确读取PDF的内容文本,只能自己来实现。

LlamaIndex自己提供了一个开源免费版的parser:liteparse,但是为了他家付费的Reader,他并没有将这个parser封装成一个Reader,这里我们就可以自己封装这个Reader。

首先引入这个python包:

shell 复制代码
pip install liteparse

然后实现Reader:

python 复制代码
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):
    """
    using liteparse to parse PDF files
    """
    def lazy_load_data(self, *args: Any, **load_kwargs: Any) -> Iterable[Document]:
        documents = []
        # 实例化一个liteparser,用于把pdf文件的内容文本读取出来
        parser = LiteParse()
        # 其实args是一个path和tuple
        for path in args:
	        # 读取文本内容
            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

测试使用这个Reader:

python 复制代码
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')

默认情况下会有报错的日志,虽然并不影响运行,但是可以解决掉:

  1. 下载相应的文件
shell 复制代码
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目录
相关推荐
Dovis(誓平步青云)1 小时前
从Redis指标采集到异常告警:redis_exporter + Prometheus 完整实战
服务器·数据库·人工智能·redis·架构·prometheus·vibe coding
AcaDesign2 小时前
国家/省部市级科技奖答辩PPT_科技进步奖_自然科学奖_技术发明奖|WordinPPT
大数据·人工智能·科技·powerpoint
Ai-_Man4 小时前
希望大家能推荐一款软件,可以直接把文心生成的代码变流程图,提高办公效率
人工智能·ai·小程序·流程图
AI02266 小时前
探秘AI Agent软件公司:开启智能时代的创新引擎
人工智能
fīɡЙtīиɡ ℡8 小时前
AI 应用系统设计
java·开发语言·人工智能
小淮AI8 小时前
国际教育课程的本土化探索:以枫叶教育三十年为观察样本
大数据·人工智能
又折桃枝换酒钱8 小时前
VisCoder2:构建多语言可视化编码智能体(翻译与解读)
人工智能·信息可视化
AI绘画哇哒哒9 小时前
【建议收藏!】35岁后端血泪忠告,这3类人别硬转Agent(过来人亲述)
java·人工智能·后端·ai·程序员·大模型·agent
Chengbei119 小时前
DSH渗透测试插件dsh-pentest全新升级!适配DeepSeek Harness,可视化探索链路,一键搭建轻量化AI渗透测试环境。
人工智能·web安全·网络安全·微信·小程序·系统安全·安全架构